如果条件问题,请判断是否正确

时间:2017-04-22 21:06:42

标签: bash scripting

我正在尝试一些简单的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" ))

但它们都不起作用。 你能告诉我我的错误是什么吗?

1 个答案:

答案 0 :(得分:5)

(( ... ))仅适用于算术 ;你正在进行字符串比较。请改用[[。您可以使用模式匹配同时检查大写或小写。

if [[ $char = [Yy] ]]; then

如果您确实想使用/bin/sh进行移植,请使用两个[命令:

if [ "$char" = Y ] || [ "$char" = y ]; then