此问题已在此处有答案:
Unexpected operator error [duplicate](4个答案)
7年前关闭。
我的代码:
#!/bin/sh
#filename:choose.sh
read choose
[ "$choose" == "y" -o "$choose" == "Y" ] && echo "Yes" && exit 0
[ "$choose" == "n" -o "$choose" == "N" ] && echo "No" && exit 0
echo "Wrong Input" && exit 0
但当我执行
sh ./choose.sh
终端提示我
[: 4: n: :Unexpected operator
[: 5: n: :Unexpected operator
我的bash脚本有错误吗?谢谢!
7条答案
按热度按时间snvhrwxg1#
您的bash脚本没有错误,但您使用**
sh
**执行它,它的语法不太复杂因此,您需要运行
bash ./choose.sh
,或者将脚本转换为仅使用符合POSIX的sh
命令,例如字符串之间的=
而不是==
。zqry0prt2#
POSIX sh 不理解
==
的字符串相等性,因为这是一种 bash-ism。请使用=
。其他人说括号不支持 sh 是错误的,顺便说一句。
mcvgt66p3#
要使用Bash执行它,使用#!/bin/bash并chmod它使其可执行,然后使用
sc4hvdpw4#
你可以使用case/esac代替if/else
xoefb8l85#
你必须使用bash或者用标准sh重写脚本
vptzau2j6#
实际上,方括号“[”只是test命令的内部shell别名。
所以你可以说:
或
...它们在sh或bash中是等价的。注意在“[”命令上需要有一个结束的“]”括号,但除此之外“[”与“test”相同。“man test”是一个好东西。
aelbi1ox7#
不要使用任何保留关键字作为任何变量名的开头:例如,主机名将作为主机{TYPE}失败|NAME}是保留的