[英]If statement syntax eror
我试图弄清楚如何检查第一个输入是否以.txt
结尾。 似乎标准的if语句语法不适用于基于我获取输入的方式的代码。 有谁知道我的代码中第一个if语句中else if语句的正确语法?
#!/bin/sh
printf "%b %b\n" "$*"
if [ "$1" = "-help" ]
then
echo "Cool Beans"
elif [ "$1" = "*.txt" ]
then
echo "text recd"
else
echo "first input not valid"
fi
if [ "$2" = "-help" ]
then
echo "help options"
else
echo "second input not valid"
fi
为了使模式匹配有效,可以使用Bash双括号条件语句(在删除引号的同时禁用匹配):
elif [[ "$1" = *.txt ]]
您还可以使用正则表达式匹配:
elif [[ "$1" =~ [.]txt$ ]]
请注意,您必须转义句号(或像我一样将其放在方括号中),以防止禁用其“任何字符”的特殊含义,并使用$
将正则表达式锚定到末尾, $
确保您匹配扩展名,而不是文件名中的子字符串。
如果您想要的不是bash专用的东西,可以尝试:
elif [ "${1##*.}" = txt ]
"${1##*.}"
扩展名删除最长的字符串,该字符串从名为1的变量(可以是任何变量)的开头开始,并以句点结束,仅保留扩展名。
您还可以使用case
语句进行POSIX兼容模式匹配:
printf "%b %b\n" "$*"
case $1 in
-help) echo "Cool Beans" ;;
*.txt) echo "text recd" ;;
*) echo "first input not valid"
esac
case $2 in
-help) echo "help options" ;;
*) echo "second input not valid" ;;
esac
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.