验证bash脚本中的输入

时间:2015-04-15 10:16:08

标签: linux shell scripting

我有一个代码,通过给出宽度和高度来找到矩形的区域。

echo -n "Enter width: "
read width

echo -n "Enter height:"
read height

echo "Area of rectangle $(echo "$height*$width" | bc) sqcm"

如何才能输入,只能输入一个数字,否则会显示错误?

4 个答案:

答案 0 :(得分:1)

由于您正在读取输入两次,我会使用一个函数来检查它。这样就不会重复代码了。

检查输入是否只包含数字和至少一个。否则,它会不断要求输入:

myread () {
  while :                     # infinite loop
  do
     read value
     [[ $value =~ ^[0-9]+$ ]] && echo "$value" && return  #return value if good input
  done
}

echo -n "Enter width: "
width=$(myread)             #call to the funcion and store in $width

echo -n "Enter height: "
height=$(myread)            #call to the funcion and store in $height

echo "Area of rectangle $(echo "$height*$width" | bc) sqcm"

答案 1 :(得分:0)

你也许可以使用grep来检查,但是如果你想要这些检查,真正的bash(以及一般的shell)是一个糟糕的语言选择。

答案 2 :(得分:0)

类似的东西:

echo $width | grep -E -q '^[0-9]+$' || echo "numeral expected!"

答案 3 :(得分:0)

你可以做一些像thi

这样的事情
    if [[ -n "$width" ]] ; then

        nodigits="$(echo $width| sed 's/[[:digit:]]//g')"

        if [[ ! -z $nodigits ]] ; then

            print "Invalid number format! Only digits, no commas, spaces, etc." 

        fi 
    fi