我正在尝试一些简单的bash脚本,我正在研究一个简单的比较脚本,程序读取一个字符char
,如果它是" Y"或" y",它打印"是",如果是" N"或" n",它是" NO"。字母Y,y,N,n应该是唯一将用作输入的字母。
#!/bin/sh
read char
if (( $char = "Y" )) || (( $char = "y" ))
then
echo "YES"
else
echo "NO"
fi
上面的脚本适用于Y或y,但是当我尝试输入N或n时,它仍会打印" YES"并且我试图弄清楚我做错了什么。我知道它与括号有关,因为当我使用带括号的语法时,就像这样
if [ "$char" == "Y" ] || [ "$char" == "y" ]
它运作得很好。 我已经尝试了括号的所有组合,比如
if (( "$char" = "Y" )) || (( "$char" = "y" ))
或
if (( $char == "Y" )) || (( $char == "y" ))
或
if (( "$char" == "Y")) || (("$char" == "y" ))
或
if (( "$char" == "Y" || "$char" == "y" ))
但它们都不起作用。 你能告诉我我的错误是什么吗?
答案 0 :(得分:5)
(( ... ))
仅适用于算术 ;你正在进行字符串比较。请改用[[
。您可以使用模式匹配同时检查大写或小写。
if [[ $char = [Yy] ]]; then
如果您确实想使用/bin/sh
进行移植,请使用两个[
命令:
if [ "$char" = Y ] || [ "$char" = y ]; then