unix shell编程 - 检查数字和字母

时间:2015-01-11 05:26:44

标签: bash shell unix

我是Unix shell或bash编程的新手。

我正在对库存计划进行项目。我想知道是否可以检查函数中的数字和字母。

例如,我要出售一个汉堡包,价格我只会放数字,如果我要在其中输入字母,我怎么能检查我是否在其中加了字母而不是数字?

对不起,如果我的英语不好,英语不是我的第一语言。

echo -n "Food :"
  read food
    echo -n "Price :"
      read price

3 个答案:

答案 0 :(得分:1)

你可以通过多种方式做到这一点。

  1. 在if条件下使用test:

    if [ $var -eq $var 2> /dev/null ]
    then
        ...
    fi
    
  2. OR

        if [[ $var == +([0-9]) ]]
        then
            ## its a number
        fi
    
    1. 使用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]开始(^)并继续相同直到结束($)

希望有所帮助。