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形式にとって重要ではなく、属性間のスペースの量や型も重要ではありません。

おすすめ記事