我是shell脚本的新手,所以我有一个问题.我在这段代码中做错了什么?
#!/bin/bash
echo " Write in your age: "
read age
if [ "$age" -le "7"] -o [ "$age" -ge " 65" ]
then
echo " You can walk in for free "
elif [ "$age" -gt "7"] -a [ "$age" -lt "65"]
then
echo " You have to pay for ticket "
fi
Run Code Online (Sandbox Code Playgroud)
当我试图打开这个脚本时,它询问我的年龄,然后它说
./bilet.sh: line 6: [: 7]: integer expression expected
./bilet.sh: line 9: [: missing `]'
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么.如果有人能告诉我如何修复它,我会很感激,抱歉我的英语不好,我希望你们能理解我.
kam*_*uel 32
您可以使用以下语法:
#!/bin/bash
echo " Write in your age: "
read age
if [[ "$age" -le 7 || "$age" -ge 65 ]] ; then
echo " You can walk in for free "
elif [[ "$age" -gt 7 && "$age" -lt 65 ]] ; then
echo " You have to pay for ticket "
fi
Run Code Online (Sandbox Code Playgroud)
che*_*ner 11
如果您正在使用-o(或-a),则需要在test命令的括号内:
if [ "$age" -le "7" -o "$age" -ge " 65" ]
Run Code Online (Sandbox Code Playgroud)
但是,它们的使用已弃用,您应该使用test由||(或&&)连接的单独命令:
if [ "$age" -le "7" ] || [ "$age" -ge " 65" ]
Run Code Online (Sandbox Code Playgroud)
确保结束括号前面有空格,因为它们在技术上是参数[,而不仅仅是语法.
在bash和其他一些shell中,你可以使用kamituel的答案中[[所示的高级表达式.以上内容适用于任何符合POSIX标准的shell.
小智 6
./bilet.sh: line 6: [: 7]: integer expression expected
Run Code Online (Sandbox Code Playgroud)
小心 " "
./bilet.sh: line 9: [: missing `]'
Run Code Online (Sandbox Code Playgroud)
这是因为您需要在括号之间留有空格,例如:
if [ "$age" -le 7 ] -o [ "$age" -ge 65 ]
Run Code Online (Sandbox Code Playgroud)
看:增加了空间,没有 " "
如果您正在比较的变量具有不是数字/数字的隐藏字符,也会发生此错误。
例如,如果要从第三方脚本中检索整数,则必须确保返回的字符串不包含诸如或的隐藏字符"\n""\r"。
例如:
#!/bin/bash
# Simulate an invalid number string returned
# from a script, which is "1234\n"
a='1234
'
if [ "$a" -gt 1233 ] ; then
echo "number is bigger"
else
echo "number is smaller"
fi
Run Code Online (Sandbox Code Playgroud)
这将导致脚本错误,: integer expression expected因为$a其中包含非数字的换行符"\n"。您必须按照以下说明删除此字符:如何从Bash中的字符串中删除回车符
因此,请使用以下内容:
#!/bin/bash
# Simulate an invalid number string returned
# from a script, which is "1234\n"
a='1234
'
# Remove all new line, carriage return, tab characters
# from the string, to allow integer comparison
a="${a//[$'\t\r\n ']}"
if [ "$a" -gt 1233 ] ; then
echo "number is bigger"
else
echo "number is smaller"
fi
Run Code Online (Sandbox Code Playgroud)
您还可以set -xv用来调试bash脚本并显示这些隐藏的字符。参见https://www.linuxquestions.org/questions/linux-newbie-8/bash-script-error-integer-expression-expected-934465/
| 归档时间: |
|
| 查看次数: |
129276 次 |
| 最近记录: |