web-dev-qa-db-ja.com

Linuxシェルスクリプトで最初の条件が真の場合に2番目の条件を実行する方法

if状態があります。その条件が真の場合、1つのスクリプトが実行され、その後、別の条件を確認する必要があります。

ifステートメントなどを使用してこれを行うにはどうすればよいですか?

例えば、

 if [ condition -eq o ]
 then
 run script
 again condition(this condition depends on above script output value)
 run another script
 else
 exit
3
bunny

最初の条件が真の場合に2番目の条件を実行する方法

コードは次の構造を持つ必要があります。

if [condition -ne 0]
then 
  do_something 
  if [expression that depends on exit status of do_something]
  then 
    do something_else 
  fi 
fi

[〜#〜]構文[〜#〜]

if test-commands; then
  consequent-commands;
[Elif more-test-commands; then
   more-consequents;]
[else alternate-consequents;]
fi

test-commandsリストが実行され、戻りステータスがゼロの場合、consequent-commandsリストが実行されます。

test-commandsがゼロ以外のステータスを返す場合、各Elifリストが順番に実行され、その終了ステータスがゼロの場合、対応するmore-consequentsが実行され、コマンドが完了します。

else alternate-consequentsが存在し、最後のifまたはElif句の最後のコマンドの終了ステータスがゼロ以外の場合、alternate-consequentsが実行されます。

戻りステータスは、最後に実行されたコマンドの終了ステータスです。真の条件がテストされていない場合はゼロです。

例のリンクについては、以下を参照してください。


参考文献

6
DavidPostill

それはのように聞こえます

first-condition && consequences1

に続く:

(再び)

first-condition && second-condition && consequences2

これは、セカンダリifを元のファイルに挿入することでif;then;fiに変更できます。

if [ first-condition ]; then
   consequences1
   if [ second-condition ]; then # Because first-condition is already true here
      consequences2
   fi
fi

したがって、consequences2は「他の」問題ではありません:)ネストは楽しいです。

2番目の条件が単にresults1の出力に基づいている場合は、2番目のifのテストでそれを実行できます。

if [ first-condition ]; then
  if [ consequences1-test ]; then
    consequences2
  fi
 fi

ポットを甘くする 。テストでは何でも実行できることを思い出してください。最後のコマンド(またはstdioの出力)のリターンコードのみですが、次に何かをテストする必要があります。

[ "`consequences1`" == "allok" ]

問題

2
featheredfrog
cd lock
if [ $(ls -ltr | grep -q exitup) -eq 0 ]; then
rm exitup
if [ $(Appl_Monitor | echo $?) -ne 110 ]; then
kb_shutdown
kb_startup
if [ $(ls -ltr | grep -q exitup) - eq 0 ]; then
rm exitup
if [ $(Appl_Monitor | echo $?) -eq 110 ]; then
echo " kb app is fine
       $(ls -ltr | Appli_Monitor | echo $?) | mailx -s "KB App " [email protected]
else
echo " Warning KB app is not running
       $(ls -ltr | Appli_Monitor | echo $?) | mailx -s "KB App " [email protected]
fi
fi
fi
fi

私の知識でこのスクリプトを作成しました。間違いがある場合は、提案をしてください。ここで、kb_startup、kb_shutdown、およびappl_monitorは、/ binで定義されているプログラムです。

0
bunny