もし他の文でも質問が上がってきたのに見つからず申し訳ありません。ネストされた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
答え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
(文字の場合)を大文字に強制することで応答確認を簡素化します。