我目前正在学习bash,如果值不是预期的,我正在使用循环函数来调用函数。循环函数bash
我创建了一个小功能
#!/bin/bash
find_number(){
echo "Enter number"
read number
if [ ! $number == 1 ]; then
echo is not 1, enter number again
find_number
fi
echo "Got it"
}
find_number
如果输入了一个错误的值就重启功能,并创建一个循环,但唯一的问题是,该功能循环本身,当它继续终于返回的回声作为很多时候你错了。
例:
Enter number
5
is not 1, enter number again
Enter number
5
is not 1, enter number again
Enter number
1
Got it
Got it
Got it
正如你看到这里,我已经得到了结果的3倍。 要解决此问题,我以另一种方式写了我的代码。
#!/bin/bash
find_number(){
echo "Enter number"
while read number; do
if [ ! $number == 1 ]; then
echo is not 1, enter number again
else
break
fi
done
echo "Got it"
}
find_number
我的问题是......我是通过应用第二种方法来做正确的方法,还是有另一种方法呢?
感谢您的反馈
仅供参考,'=='不是POSIX标准化'测试'功能的一部分;标准的字符串比较运算符是'='。并且总是引用你的扩展 - '! [“$ number”= 1]'更不容易出现意外;考虑如果用户输入'23 = 23 -o 5'会发生什么;你会得到'[! 23 = 23 -o 5 == 1]'。 –
当你想检查一些东西不等于bash中的int时,使用'if [$ number!= 1]'。它更具可读性。 – Vinny
@Vinny,错误,重新:“到一个int” - 这是字符串比较,而不是数字比较。 ('='也是字符串比较;如果我们确定这些值是在同一个基础中,并且没有前导零,那么直到我们开始做比较或比对比更少的时候,这并不重要)。 –