加算、減算、乗算、除算を行う基本的な計算機を作成しています。
加算は機能しますが、乗算は機能しません。乗算しようとすると、「プログラムを正しく実行できませんでした」という応答が返されます。
$ ./calculator 4 + 5
9
$ ./calculator 4 * 5
You did not run the program correctly
Example: calculator 4 + 5
Googleで検索したところ、\\*
コード、それでも動作しません。誰かが私に解決策や説明を提供できますか?
ここに私のコードがあります
#!/bin/bash
if [ $# != 3 ]; then
echo You did not run the program correctly
echo Example: calculator 4 + 5
exit 1
fi
if [ $2 = "+" ]; then
ANSWER=`expr $1 + $3`
echo $ANSWER
fi
if [ $2 = "*" ]; then
ANSWER=`expr $1 \\* $3`
echo $ANSWER
fi
exit 0
コードには多くの問題があります。ここに修正があります。 *
は、「現在のディレクトリ内のすべてのファイル」を意味します。代わりに、リテラルアスタリスク/乗算文字を意味するには、エスケープする必要があります。
./calculator 3 \* 2
または
./calculator 3 "*" 2
また、二重引用符で囲む必要があります"$2"
、 さもないと *
は再び「すべてのファイル」の意味を開始します:
#!/bin/bash
#Calculator
#if [ `id -u` != 0 ]; then
# echo "Only root may run this program." ; exit 1
#fi
if [ $# != 3 ]; then
echo "You did not run the program correctly"
echo "Example: calculator 4 + 5"
exit 1
fi
# Now do the math (note quotes)
if [ "$2" = "+" ]; then echo `expr $1 + $3`
Elif [ "$2" = "-" ]; then echo `expr $1 - $3`
Elif [ "$2" = "*" ]; then echo `expr $1 \* $3`
Elif [ "$2" = "/" ]; then echo `expr $1 / $3`
fi
exit 0
*
はシェル構文の特殊文字であるため、エスケープする必要があります。 (エスケープされていない場合、現在のディレクトリ内のすべてのファイルのリストに展開されます)。ただし、エスケープするには単一のバックスラッシュのみを使用する必要があります。
ANSWER=`expr $1 \* $3`