繁体   English   中英

如果语句语法错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM