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