如果条件出现问题,则进行Bash

如果条件出现问题,则进行Bash,bash,scripting,Bash,Scripting,我正在尝试一些简单的bash脚本,我正在编写一个简单的比较脚本,程序读取一个字符char,如果是“Y”或“Y”,它将打印“YES”,如果是“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时,它仍然打印“是”,我试图找

我正在尝试一些简单的bash脚本,我正在编写一个简单的比较脚本,程序读取一个字符
char
,如果是“Y”或“Y”,它将打印“YES”,如果是“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时,它仍然打印“是”,我试图找出我做错了什么。我知道这和括号有关,因为当我使用带括号的语法时,就像这样

if [ "$char" == "Y" ] || [ "$char" == "y" ]
它很好用。 我试过括号的所有组合,比如

if (( "$char" = "Y" )) || (( "$char" = "y" ))

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

(…)
只用于算术;您正在执行字符串比较。改为使用
[
。您可以使用模式匹配同时检查大写或小写

if [[ $char = [Yy] ]]; then
如果您确实想使用
/bin/sh
实现便携性,请使用两个
[
命令:

if [ "$char" = Y ] || [ "$char" = y ]; then
((…)
仅用于算术;您正在执行字符串比较。请改用
[[
。您可以使用模式匹配同时检查大小写

if [[ $char = [Yy] ]]; then
如果您确实想使用
/bin/sh
实现便携性,请使用两个
[
命令:

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

sh
不是
bash
你是对的。我是否应该在原始帖子中更改它?
sh
不是
bash
你是对的。我是否应该在原始帖子中更改它?
if [ "$char" = Y ] || [ "$char" = y ]; then