Im делает небольшой калькулятор, который принимает 3 аргумента командной строки, например sh programname operand1 operator operand2
, и вычисляет его значение. Я хочу, чтобы пользователь вводил только 3 аргумента и оператор, который может быть только +,-,x,/,%,^
. Проблема Im, когда пользователь вводит #
или /*
, программа не выводит правильное сообщение об ошибке.Специальные символы в качестве аргумента в bash
Мой код:
#!/bin/sh
if [ ! $# == 3 ]
then
echo "Usage: sh $0 operand1 operator operand2 "
exit 1
fi
n1=$1 op=$2 n2=$3
if [ $2 == "+" ]; then
ans=`expr $n1 + $n2`
echo "$ans"
elif [ $2 == "-" ]; then
ans=`expr $n1 - $n2`
echo "$ans"
elif [ $2 == "x" ]; then
ans=`expr $n1 \* $n2`
echo "$ans"
elif [ $2 == "/" ]; then
ans=`expr $n1/$n2`
echo "$ans"
elif [ $2 == "%" ]; then
ans=`expr $n1 % $n2`
echo "$ans"
elif [ $2 == "^" ]; then
echo $((n1**n2))
else
echo "Error: invalid operator"
exit 1
fi
Когда пользователь 2 /* 3
или 2 # 4
программа не распознает то будет его 3 аргументов и вывести первое сообщение об ошибке, когда он действительно должен вывести последний еще заявление.
Почему вы используете 'expr' вообще, если' $ ((...)) 'доступно? – chepner