ユーザーが "next"という単語を入力するまで続かないbashでwhileループを作成しようとしています。しかし、条件を満たすために文字列を使用する方法を理解できないようです。
#Beginning of code
echo -e "Please type next to continue."
read word
while [ "$word" -ne "next" ]
do
read word
done
#the rest of the code
答え1
!=
代わりに使用-ne
echo -e "Please type next to continue."
read word
while [ "$word" != "next" ]
do
read word
done
比較演算子を確認してください。 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html
答え2
他の人が言ったように、-ne
文字列を比較するために整数比較を使用しないでください。代わりに括弧=/!=
内に使用してください。それにもかかわらず、それでも壊れやすい。文字列が正確に一致する必要があります。test
[
]
''
する同じ''
。case
この場合、通常はsを処理する方が良いです。
set --
while read word
case $?$#$word in
($?$#[Nn][Ee][Xx][Tt]) ! :;;
([!0]*|05*) ! break ;;esac
do set '' "$@"
done
デフォルト値が提供されます$IFS
(シェルを行う計画であれば考慮する価値がありますread
)、これはすべての上限/下限値に対して機能する必要があります。next
(必要なら)そしてループが無限に逃げることを防ぎます。
答え3
私の考えでは、あなたが望むもの:
echo 'Please type "next" to continue.'
while read word && [ "$word" != next ]; do
: something in the loop if needed
done
read
標準入力(ここでは確認された終了状態を介して)でファイルの終わりを確認するのも良い考えです。
答え4
無効な比較演算子を使用しました。次のように、文字列には「!=」、整数には「-ne」を使用する必要があります。
#Beginning of code
echo -e "Please type next to continue."
read word
while [ "$word" != "next" ]
do
read word
done
#the rest of the code
このページをチェックしてください:高度なbash
スクリプト:比較タスク