我正在学习编写脚本来帮助我的工作,而我只是试着用while
循环来解决问题。
如果用户没有回答是或否,我想重复一个问题 目前我使用if条件语句,这很容易,但如果用户没有用y或n回答,它只是退出脚本。
我已经尝试了下面的各种迭代,发现我不能使用-ne
,除非它是一个整数,但我似乎无法正确的是字符串比较。
我找到了更好的方法在线完成此操作,但如果我遗漏了一些关于简单while循环的基本内容,那么复制粘贴那些是毫无意义的。
#!/bin/sh
while [ $CONFIRM != "^y"|"^n"] # This is where I'm stuck
do
echo "Please say Yes or No." # Probably not doing this right either
read CONFIRM # Or this
done
if echo "$CONFIRM" | grep -iq "^n" ; then
echo "Okay, stopping script."
else
#do some cool stuff
fi
赞赏任何建议。
正确答案是......
#!/bin/bash
shopt -s nocasematch
while ! [[ $CONFIRM =~ ^(y|n) ]]
do
echo "Please say Yes or No."
read CONFIRM
done
echo "Success!"
答案 0 :(得分:1)
您正在将正则表达式与模式匹配混合在一起。
# Regular expression
while ! [[ $confirm =~ ^(y|n) ]]; do
或
# extended pattern
while [[ $confirm != @(y|n)* ]]; do
每个人都应该做你想做的事。
read
命令将变量的名称作为参数。
read confirm
使用参数扩展会导致read
设置名称包含在confirm
中的变量的值:
$ confirm=foo
$ read $confirm <<< 3
$ echo "$foo"
3
答案 1 :(得分:0)
尝试这样的事情:
while [[ -z $confirm || ( $confirm != y && $confirm != n ) ]]; do
read confirm
done