VMWare 서버에 SSH로 접속하여 가상 머신이 시작되었는지 확인하는 스크립트를 작성 중입니다. 배선에 약간의 오류가 있습니다 server=awk "/$i/{print $2}" /home/dharmit/scripts/vmids
. 다음 오류가 발생합니다.
./server_notify.sh: line 38: /688/{print }: No such file or directory
나는 인용문에서 몇 가지 실수를 했다는 것을 알고 있습니다. 하지만 오류가 무엇인지 찾을 수 없습니다.
for i in {144,528,544,576,592,624,640,688}
do
ssh [email protected] vim-cmd vmsvc/power.getstate $i | grep off > /dev/null
if [ $? -eq 0 ]
then
server=awk "/$i/{print $2}" /home/dharmit/scripts/vmids
echo "$server is Down"
fi
done
/home/dharmit/scripts/vmids의 내용
144 Web Server
528 N-Zimbra Mail Server
544 Zenoss
576 OTRS Supporting Tool
592 Proconsol
624 SVN
640 SFTP
688 FTP
누군가 내가 실수하고 있는 부분과 해결책이 무엇인지 지적할 수 있습니까?
답변1
awk 명령 주위에 백틱이 누락되었으며 큰따옴표를 사용하면 쉘이 awk 대신 $2를 삽입할 수 있습니다. server= 줄은 다음과 같아야 합니다.
server=`awk "/$i/"' {print $2}' /home/dharmit/scripts/vmids`
큰따옴표를 사용하면 쉘이 $i를 삽입할 수 있으며 이는 분명히 원하는 것입니다. 작은따옴표는 쉘이 $2를 삽입하는 것을 방지합니다. 백틱을 사용하면 awk 명령이 실행되고 결과가 server
변수 값이 되는 문자열로 변환됩니다 .