我有以下代码,并收到以下错误输出:
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
这里有什么问题?
答案 0 :(得分:4)
替换
if [ $exam_pct < 40 ]
与
if (( exam_pct < 40 ))
看看Bill给出的链接。 Unix shell历史记录充满了非直观的扩展。根据您的情况,Bash应该可以安全使用。 如果您对shell历史感兴趣,请查看http://www.in-ulm.de/~mascheck/bourne/
答案 1 :(得分:4)
if [ $exam_pct < 40 ]
应为if [ "$exam_pct" -lt 40 ]
if [ $exam_pct > 70 ]
应为if [ "$exam_pct" -gt 70 ]
请始终引用您的变量。
答案 2 :(得分:3)
详细说明您收到错误的原因:[
不是特殊语法;它只是一个executable(通常是通过内置提供的,虽然/usr/bin/[
可能存在于你的系统中),按照惯例,它以“]”作为它的最后一个参数。
所以当你写[ $exam_pct < 40 ]
时,你实际做的是用(理想情况下)两个参数([
和$exam_pct
的内容)开始]
,以及名称为40
的文件的内容通过管道传输到其标准输入。
同样,当你执行[ $exam_pct > 70 ]
时,你将[ $exam_pct ]
的输出重定向到一个名为[
的输出(因为70
不会写入stdout) {{1}}。
答案 3 :(得分:1)
为了完整性:
if [ $exam_pct \< 40 ]
也有效