2

以下のコードがあり、次のエラー出力が表示されます。

Enter your exam score
40
./if2.sh: line 6: 40: No such file or directory
Very well done. You have an A grade.

CentOS で bash 4.1.2(1) を使用しています。

#!/bin/bash
#This script demonstrates the if-then-elif format.

echo "Enter your exam score"
read exam_pct
if [ $exam_pct < 40 ]
then
    echo "Sorry, you have failed."
elif [ $exam_pct > 70 ]
then 
    echo "Very well done. You have an A grade."
else
    echo "Well done. You passed."
fi

ここで何が問題なのですか?

4

4 に答える 4

4

交換

if [ $exam_pct < 40 ]

if (( exam_pct < 40 ))

ビルから提供されたリンクを見てください。Unix シェルの歴史は、非直感的な拡張機能でいっぱいです。ケースによっては、Bash を安全に使用できるはずです。シェルの歴史に興味がある場合は、http://www.in-ulm.de/~mascheck/bourne/をご覧ください。

于 2013-06-18T02:24:59.867 に答える
4

if [ $exam_pct < 40 ]する必要がありますif [ "$exam_pct" -lt 40 ]

if [ $exam_pct > 70 ]する必要がありますif [ "$exam_pct" -gt 70 ]

常に変数を引用してください。

詳細については、こちらをご覧ください - http://tldp.org/LDP/abs/html/comparison-ops.html

于 2013-06-18T02:25:18.830 に答える
3

エラーが発生する理由を詳しく説明するには、[特別な構文ではありません。これは単なる実行可能ファイル(通常はビルトインを介して提供さ/usr/bin/[れますが、システムに存在する可能性があります) であり、慣例により最後の引数として "]" を取ります。

したがって、 を記述するとき[ $exam_pct < 40 ]、実際に行っていることは[、(理想的には) 2 つの引数 ( 、$exam_pctおよびの内容) と、その標準入力にパイプされ]た名前のファイルの内容から始まります。40

同様に、 を実行すると、 の出力( は標準出力に書き込まれないため、空白になります) を というファイルに[ $exam_pct > 70 ]リダイレクトしています。[ $exam_pct ][70

于 2013-06-18T02:51:52.643 に答える