2015-04-15 3 views
0

У меня есть код, чтобы найти область прямоугольника, указав ширину и высоту.Подтвердить ввод в скрипте bash

echo -n "Enter width: " 
read width 

echo -n "Enter height:" 
read height 

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

Как это сделать, чтобы можно было ввести только число и, в противном случае, отобразить ошибку?

ответ

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" 
0

Возможно, вы можете использовать grep для проверки, но действительно bash (и оболочка вообще) - плохой выбор языка, если вы хотите эти проверки.

0

Что-то вроде:

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

Вы можете сделать некоторые вещи, как Тхи

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 
Смежные вопросы