我正在尝试一些简单的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)
但它们都不起作用.你能告诉我我的错误是什么吗?
(( ... ))为算术仅 ; 你正在进行字符串比较.请[[改用.您可以使用模式匹配同时检查大写或小写.
if [[ $char = [Yy] ]]; then
Run Code Online (Sandbox Code Playgroud)
如果您真的想要使用/bin/sh便携性,那么使用两个[命令:
if [ "$char" = Y ] || [ "$char" = y ]; then
Run Code Online (Sandbox Code Playgroud)