我是shell脚本的新手,并尝试编写检查参数是否存在以及是否与表达式匹配的功能。我不确定如何编写表达式,所以这就是我到目前为止所做的:
#!/bin/bash
if [[ -n "$1"] && [${1#*.} -eq "tar.gz"]]; then
echo "Passed";
else
echo "Missing valid argument"
fi
要运行脚本,我会输入以下命令:
# script.sh YYYY-MM.tar.gz
我相信我拥有的是
但是,我还要检查完整的文件名是否为YYYY-MM.tar.gz格式。
答案 0 :(得分:4)
if [[ -n "$1" ]] && [[ "${1#*.}" == "tar.gz" ]]; then
-eq
:(等于)算术测试
==
:比较字符串
请参阅:help test
答案 1 :(得分:2)
您也可以使用:
case "$1" in
*.tar.gz) ;; #passed
*) echo "wrong/missing argument $1"; exit 1;;
esac
echo "ok arg: $1"
答案 2 :(得分:0)
只要文件采用正确的YYYY-MM.tar.gz
格式,它显然是非空的,并且也以.tar.gz
结尾。检查正则表达式:
if ! [[ $1 =~ [0-9]{4}-[0-9]{1,2}.tar.gz ]]; then
echo "Argument 1 not in correct YYYY-MM.tar.gz format"
exit 1
fi
显然,上面的正则表达式太笼统,允许使用0193-67.tar.gz之类的名称。但是,您可以根据应用需要将其调整为适合您的应用程序。我可能会推荐
[1-9][0-9]{3}-([1-9]|10|11|12).tar.gz
只允许从1000开始的4位数年份(支持第一个千年ACE似乎没必要),只有1-12个月(没有前导零)。