Unix 쉘 스크립트에서 elif 문이 실행되지 않습니다.

Unix 쉘 스크립트에서 elif 문이 실행되지 않습니다.
#!/bin/ksh

print -n "\nEnter the client ID : "
read clientID
print $clientID

data=$(grep jms/erms/$clientID /export/home/a0706838/test.txt;)

print "\n $data"
getClientID=$(echo "$data" | awk '{print $8}'| perl -lne 'print substr($_,0,5)';)
print "$getClientID"
getClientID1=$(echo "$data" | awk '{print $9}'| perl -lne 'print substr($_,19,5)';)
getClientID2=$(echo "$data" | awk '{print $15}'| perl -lne 'print substr($_,20,5)';)

if [ -z "$data" ]
then
  print "Setup is not present on $i for $clientID"
  print "Please login to server $i manually and check for the client $clientID on path /apps/WebSphere/NA70_TBA/config/cells/CellV70_TBA/ in resources.xml file"
  print "==============================================================================================================================================================="

elif [ -z "$getClientID" ] | [ -z "$getClientID1" ] | [ -z "$getClientID2" ]
then
  print "Setup for client $clientID has been not done correctly on server $i. Please contact WasTech team for this."
  print "==============================================================================================================="

else
  print "\n"
  print "Setup is valid on $i for $clientID for CellV70_TBA path"
  print "====================================================================================================="
fi

test.txt 파일

<factories xmi:type="resources.jms.mqseries:MQQueue" xmi:id="MQQueue_1549053088921" name="ERMS Message Queue - 16661" jndiName="jms/erms/16662" persistence="QUEUE_DEFINED" priority="QUEUE_DEFINED" specifiedPriority="0" expiry="UNLIMITED" specifiedExpiry="0" baseQueueName="TBAT.16662.SPM.ERMSIN" CCSID="1208" useNativeEncoding="true" integerEncoding="Normal" decimalEncoding="Normal" floatingPointEncoding="IEEENormal" targetClient="MQ" queueManagerPort="1414" sendAsync="QUEUE_DEFINED" readAhead="QUEUE_DEFINED">

답변1

||쉘에 쓰여진 것은 논리적인 "or"입니다. 파이프( |)는 또 다른 이야기입니다. 특히 파이프의 종료 상태는 마지막 명령의 종료 상태이므로 여기서는 마지막 조건만 적용됩니다.

[ -z "$getClientID" ] | [ -z "$getClientID1" ] | [ -z "$getClientID2" ]

~해야 한다

[ -z "$getClientID" ] || [ -z "$getClientID1" ] || [ -z "$getClientID2" ]

주어진 XML을 구문 분석하는 것도 문제가 있고 깨지기 쉽습니다. 그러나 파일에서 구문 분석하려는 내용을 알려주지 않았기 때문에 실제로 많이 말할 수는 없습니다. 이는 질문의 요점이 아닙니다. name더 많은 단어를 추가하거나 일부 단어를 제거하는 방식으로 속성 값이 변경 되면 중단될 수 있습니다. 또한 속성의 순서에 따라 달라집니다. 의미상으로 말하면 순서는 XML 형식에 중요하지 않으며 속성 사이의 공백의 양이나 유형도 중요하지 않습니다.

관련 정보