korn 쉘은 for 루프 출력 "값"을 배열에 저장하고 다른 루프에 전달합니다.

korn 쉘은 for 루프 출력 "값"을 배열에 저장하고 다른 루프에 전달합니다.

Korn 쉘의 배열에 대한 도움이 필요합니다. 첫 번째 for 루프에서 두 번째 루프로 값을 전달해야 합니다.

첫 번째 루프는 /opt/IBM/db2/V11.5 /opt/IBM/db2/V11.5.8 /opt/IBM/db2/V11.5.8을 반환합니다.

그렇다면 "uniq" 값에 감사드립니다. 그래서 다음 uniq 값 /opt/IBM/db2/V11.5 /opt/IBM/db2/V11.5.8을 전달하고 싶습니다.

그러나 내 스크립트는 마지막 값만 전달합니다. 어떤 도움이라도 좋을 것입니다.

db2instance=`ps -eaf | grep db2sysc |grep -v grep | awk '{print $1}' | sort`
for instance in ${db2instance}; do
       set -A db2dirpath
       db2dirpath=$(su - $instance -c db2level| grep "Product is installed at" | awk '{print $5}' | sed 's/"//g' | sed 's/.$//')
do
DIRDB2=$(echo ${db2dirpath[@]} | uniq)
for db2dir in "${DIRDB2[@]}"
do
      su - $instance -c "/db/data1/Ansible/db2dirpath.sh $instance $db2dir"
done

답변1

이 문제를 해결할 수 있었습니다. 아래는 실제 코드입니다.

db2instance=`ps -eaf | grep db2sysc |grep -v grep | awk '{print $1}' | sort`

DIRDB2=$(
for instance in ${db2instance}; do
      db2dirpath=$(su - $instance -c db2level| grep "Product is installed at" | awk '{print $5}' | sed 's/"//g' | sed 's/.$//')
      echo "$db2dirpath"
done
)
DIRPATH=$(echo "$DIRDB2" | sort -u | uniq)
for db2dir in $DIRPATH
do
      su - $instance -c "/db/data1/Ansible/db2dirpath.sh $db2dir"
done

답변2

OP는 명확한 질문에 대답하지 않으려는 것 같으므로 이는 단지 추측일 뿐입니다.

# get a list of usernames that are running db2sysc. No need to sort them
# Assumption is the user names don't have unusual characters in them.
db2instance=$(ps -eaf | awk '/db2sys[c]/ {print $1}')
# set up an associative array to map dirpath to user name.
# probably should be called dpbath2user
typeset -A db2dirpath
# Loop over the usernames. Use associate array so we only record each
# db path once in the array.
for instance in ${db2instance}; do
       db2dirpath[$(su - $instance -c db2level| awk '/Product is installed a[t]/" {print $5}' | sed 's/"//g;s/.$//')]=$instance
done
# Loop over the paths
for db2dir in "${!db2dirpath[@]}"
do
      # process the path with the correct user name
      su - ${db2dirpath[db2dir]} -c "/db/data1/Ansible/db2dirpath.sh $instance $db2dir"
done

관련 정보