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

問題が他の投稿ですでに質問されている場合はお詫びしますが、見つかりませんでした。ネストされたifステートメントを作成する必要がある小さなシェルスクリプト。正しく実行されているかどうかはわかりません。エラーは発生しませんが、プログラムが期待どおりに機能していません。私が欲しいのは:ファイルがすでにMasterFile.txtにある場合、ユーザーはyまたはY、またはnまたはNと言ってプログラムを終了します。 問題:スクリプトが終了しない。ファイルが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 

コメント

  • ええと…これはどのシェルですか? shタイプのシェルは'ブロックに{ ... }を使用しません。
  • 私はそのbashを信じています。プログラムは1つのifステートメントで問題なく動作しました。' {...}が問題だとは思いません。ネストされたif
  • の実装方法に問題があるはずです

  • 最後のステートメント
  • @Kusalanandaええと、他の場所だけでなく、そこでのコマンドのグループ化にも使用できます…
  • @Ptheguy if "${string3}" = 'Y'は、コマンドの名前としてstring3の内容を取り、2つの引数=

回答

簡単な回答より一般的な構文で記述します。

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の最初の文字を大文字にするため、応答チェックが簡単になります。

コメント

  • つまり、2つのことです。1つはyと入力すると終了し、何を入力しても、次のエラー./test/sh: line19: [[variable: command not found
  • スクリプトの最初の行が#!/bin/bashであり、。 [[ [...] ]]構造はbash主義です。
  • はい、ヘッダーは正しいです
  • そして[["${string3^}"の間にスペースがありますか?
  • それだけです!!もう一度ありがとうございます。時間があれば、[[の意味と、スペースが非常に重要になる理由を教えていただけませんか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です