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

Ioa*_*nis 1 bash scripting

我正在尝试一些简单的bash脚本,我正在编写一个简单的比较脚本,程序读取一个字符char,如果是"Y"或"y",则打印"YES",如果是"N"或"n",它是"否".字母Y,y,N,n应该是唯一将用作输入的字母.

#!/bin/sh

read char
if (( $char = "Y" )) || (( $char = "y" ))
then
    echo "YES"
else
    echo "NO"
fi
Run Code Online (Sandbox Code Playgroud)

上面的脚本适用于Y或y,但是当我尝试输入N或n时,它仍然会打印"YES",我正在试图弄清楚我做错了什么.我知道它与括号有关,因为当我使用带括号的语法时,就像这样

if [ "$char" == "Y" ] || [ "$char" == "y" ]
Run Code Online (Sandbox Code Playgroud)

它工作得很好.我已经尝试过括号的所有组合,比如

if (( "$char" = "Y" )) || (( "$char" = "y" ))
Run Code Online (Sandbox Code Playgroud)

要么

if (( $char == "Y" )) || (( $char == "y" ))
Run Code Online (Sandbox Code Playgroud)

要么

if (( "$char" == "Y"))  ||  (("$char" == "y" ))
Run Code Online (Sandbox Code Playgroud)

要么

if (( "$char" == "Y"  ||  "$char" == "y" ))
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 5

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

if [[ $char = [Yy] ]]; then
Run Code Online (Sandbox Code Playgroud)

如果您真的想要使用/bin/sh便携性,那么使用两个[命令:

if [ "$char" = Y ] || [ "$char" = y ]; then
Run Code Online (Sandbox Code Playgroud)