我想在两个值之间插入数字,否则重复脚本直到正确的数字。
这是我的脚本,但无法正常工作:
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
答案 0 :(得分:6)
如果您使用Bash,最好使用算术表达式((...))
以获得可读性和灵活性:
if ((number >= 2 && number <= 5)); then
# your code
fi
要在循环中读取,直到输入有效数字:
#!/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
((number >= 2 && number <= 5))
也可以写为((2 <= number <= 5))
。
另见:
答案 1 :(得分:2)
你的if语句:
if [ $number -ge 2 && $number -ls 5 ]; then
应该是:
if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then
所做的更改:
ls
不是有效的比较运算符,请使用le
。&&
。此外,您需要在脚本的第一行添加一个shebang:#!/usr/bin/env bash
答案 2 :(得分:2)
试试下面的代码
echo "Enter number"
read input
if [[ $input ]] && [ $input -eq $input 2>/dev/null ]
then
if ((input >= 1 && input <= 4)); then
echo "Access Granted..."
break
else
echo "Wrong code"
fi
else
echo "$input is not an integer or not defined"
fi
答案 3 :(得分:0)
if [ $number -ge 2 && $number -ls 5 ]; then
应该是
if [[ $number -ge 2 && $number -le 5 ]]; then
有关详细信息,请参阅help [[
答案 4 :(得分:0)
需要进行2次更改。
建议塞尔吉奥。
if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then
不需要break
。 only meaningful in a for, while, or until loop