我想在两个值之间插入数字,否则重复脚本直到正确的数字.
这是我的脚本,它无法正常工作:
validation(){
read number
if [ $number -ge 2 && $number -ls 5 ]; then
echo "valid number"
break
else
echo "not valid number, try again"
fi
}
echo "insert number"
validation
echo "your number is" $number
Run Code Online (Sandbox Code Playgroud)
您的 if 语句:
if [ $number -ge 2 && $number -ls 5 ]; then
Run Code Online (Sandbox Code Playgroud)
应该:
if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then
Run Code Online (Sandbox Code Playgroud)
所做的更改:
ls不是有效的比较运算符,请使用le.&&.分隔单括号条件表达式。您还需要在脚本的第一行中有一个 shebang: #!/usr/bin/env bash
如果您使用的是Bash,则最好使用算术表达式,((...))以提高可读性和灵活性:
if ((number >= 2 && number <= 5)); then
# your code
fi
Run Code Online (Sandbox Code Playgroud)
要循环阅读直到输入有效数字,请执行以下操作:
#!/bin/bash
while :; do
read -p "Enter a number between 2 and 5: " number
[[ $number =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; }
if ((number >= 2 && number <= 5)); then
echo "valid number"
break
else
echo "number out of range, try again"
fi
done
Run Code Online (Sandbox Code Playgroud)
((number >= 2 && number <= 5))也可以写成((2 <= number <= 5))。
也可以看看: