id = s001の場合は実行

id = s001の場合は実行

私の変数にはid各トピックの名前が削除されました。各項目に特定のコマンドがあるので、次のように言いたいと思います。

if [[$id = s001]]; then do something. End

if [[$id = "s002"]]; then do something else. End

など。

正しいアプローチは何ですか?ありがとう

答え1

この問題を解決する一般的な方法は、case宣言を使用することです。

case $id in
  (s001) do something 
         ;;
  (s002) do something else
         do something additional 
         ;;
  (s003) do something else entirely
         ;;
  (*)    do something unexpected 
         ;;
esac

強化するいくつかの構文は次のとおりです。

  • 私は開くかっこと閉じ括弧にオプションを入れるのが好きです。括弧を閉じることは必須ですが、視覚的なバランスを好みます。
  • リストされているオプションの中に一致するオプションがない場合特定のコマンドを実行したい場合、この(*)オプションは包括的です。
  • オプションに一致する各コマンドは;;;で終わる必要があります。セクションを終了するあまり一般的ではないオプションもあります。私はまた、;;セクションが適切に終了したかどうかを簡単に知ることができるように、別々の行に「を置く」傾向があります。

答え2

Schallerが上で述べたように、イベントは非常に迅速に進行します。それ以外の条件文を好む場合は、次のように書くことができます。

if [[ -n "${id}" ]]; then  
  if [[ "${id}" == "s001" ]]; then 
    echo "do something" 
  elif [[ "${id}" == "s002" ]]; then 
    echo "do something else" 
  fi
fi 

注:-nテストは、比較が正しくないようにIDが設定されていることを確認します。これは再評価を避けるための条件付きラッパーです。

関連情報