[:shell 编程中的意外运算符[重复]
- 2024-10-22 08:29:00
- admin 原创
- 80
问题描述:
我的代码:
#!/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 脚本有什么错误吗?谢谢!
解决方案 1:
您的bash脚本没有错误。但是您执行该脚本时使用的sh
语法不够全面。
因此,您需要运行bash ./choose.sh
,或者将脚本转换为sh
仅使用符合 POSIX 的命令,例如=
在字符串之间而不是==
。
解决方案 2:
POSIX sh无法理解==
字符串相等性,因为这是bash主义。请使用=
。
顺便说一句,其他人说sh不支持括号是错误的。
解决方案 3:
要使用 Bash 执行它,请使用 #!/bin/bash 并将其 chmod 为可执行文件,然后使用
./choose.sh
解决方案 4:
您可以使用 case/esac 代替 if/else
case "$choose" in
[yY]) echo "Yes" && exit;;
[nN]) echo "No" && exit;;
* ) echo "wrong input" && exit;;
esac
解决方案 5:
您必须使用 bash 或使用标准 sh 重写脚本
sh -c 'test "$choose" = "y" -o "$choose" = "Y"'
解决方案 6:
事实上“[”方括号只是测试命令的内部 shell 别名。
因此你可以说:
test -f "/bin/bash" && echo "This system has a bash shell"
或者
[ -f "/bin/bash" ] && echo "This system has a bash shell"
... 它们在 sh 或 bash 中是等效的。请注意,在“[”命令上必须有一个结束的“]”括号,但除此之外,“[”与“test”相同。“man test”值得一读。
解决方案 7:
不要使用任何保留关键字作为任何变量名的开头:例如 HOSTNAME 将失败,因为 HOST {TYPE|NAME} 是保留的
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD