我试图在 bash 中创建一个 while 循环,直到用户输入单词“next”后才会继续。但我似乎无法弄清楚如何使用字符串来满足条件。
#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
(如果你打算做 shell 的话,这是值得研究的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
脚本编写:比较操作