シェルスクリプトのネストされたIfステートメント

シェルスクリプトのネストされたIfステートメント

もし他の文でも質問が上がってきたのに見つからず申し訳ありません。ネストされたifステートメントを作成する必要がある小さなシェルスクリプトを作成しています。私が正しくやっているかどうかはわかりません。エラーは発生しませんが、プログラムは期待どおりに実行されません。私が望むのは、ファイルがすでに存在する場合、MasterFile.txtユーザーはyまたはを話して別のデータセットをインポートするか、またはを話してYプログラムnN終了するオプションです。問題:スクリプトは終了しません。。ファイルが存在しない場合は、MasterFile.txtデータセットをインポートします。コードは次のとおりです。

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt;
then {
   echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?"
   read string3
   if "${string3}" = 'Y' || "${string3}" = 'y'; then {
      screen -S trans -L /dev/ttyACM0
      screen -S trans -X stuff 's'$(echo -ne '\015')
      sleep 8s
      screen -S trans -X quit
   }
   else{return}
   fi
else{
#opening screen & begin analysis
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
}
fi

ベストアンサー1

より一般的な構文を使用してすばやく書き換えます。

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then 
   echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?"
   read string3
   if [[ "${string3^}" == 'Y' ]]; then
      screen -S trans -L /dev/ttyACM0
      screen -S trans -X stuff 's'$(echo -ne '\015')
      sleep 8s
      screen -S trans -X quit
   else
       exit 0
   fi
else
    #opening screen & begin analysis
    screen -S trans -L /dev/ttyACM0
    screen -S trans -X stuff 's'$(echo -ne '\015')
    sleep 8s
    screen -S trans -X quit
fi

これにはどの関数も宣言していないようですので、returnこのユースケースには無効です。あなたが尋ねる質問に対する肯定的でない答えは、スクリプト全体を中断することを意味すると思うのでexit

この構造は、${variable^}最初の文字$variable(文字の場合)を大文字に強制することで応答確認を簡素化します。

おすすめ記事