我是Unix shell或bash编程的新手。
我正在对库存计划进行项目。我想知道是否可以检查函数中的数字和字母。
例如,我要出售一个汉堡包,价格我只会放数字,如果我要在其中输入字母,我怎么能检查我是否在其中加了字母而不是数字?
对不起,如果我的英语不好,英语不是我的第一语言。
echo -n "Food :"
read food
echo -n "Price :"
read price
答案 0 :(得分:1)
你可以通过多种方式做到这一点。
在if条件下使用test:
if [ $var -eq $var 2> /dev/null ]
then
...
fi
OR
if [[ $var == +([0-9]) ]]
then
## its a number
fi
使用egrep和regex命令,如:
if [[ echo $var | egrep -q '^[0-9]+$' ]]
then
####...its a number...###
fi
答案 1 :(得分:0)
允许价格有小数点,这会检查有效价格:
re='^[0-9]+\.?[0-9]*$'
[[ $price =~ $re ]] && echo "Is Valid"
一个更完整的工作示例,它为错误的数字提供错误消息:
read -p "Enter the food name: " food
re='^[0-9]+\.?[0-9]*$'
while true
do
read -p "Enter the price: " price
[[ $price =~ $re ]] && break
echo " You must enter a valid number"
echo " Please try again"
done
echo ""
echo "The price of $food is $price"
以下显示了上述内容:
$ bash script.sh
Enter the food name: Hamburger
Enter the price: a lot
You must enter a valid number
Please try again
Enter the price: 1.9y
You must enter a valid number
Please try again
Enter the price: 0.99
The price of Hamburger is 0.99
正则表达式为^[0-9]+\.?[0-9]*$
。让我们一次看一件:
^
匹配开头。这确保了数字
[0-9]+
匹配一个或多个数字
\.?
匹配小数点(如果有)。
[0-9]*
匹配小数点后的数字(如果有)。
$
匹配字符串末尾,确保该号码后面没有非数字字符。
答案 2 :(得分:0)
就像是:
read price
expression='^[0-9]+$'
if ! [[ $price =~ $expression ]] ; then
echo "Error: Please enter a number" >&2; exit 1
fi
在这里,^ [0-9] + $显示"以数字[0-9]开始(^)并继续相同直到结束($)
希望有所帮助。