我正在编写一个 shell 脚本,需要在执行时传递一个参数。我的问题是如何检查参数是否与给定的模式匹配。示例:
./script.sh 1 - 9
在这个例子中,1 - 9
thing 只有一个参数,而模式是"%s - %s"
。如何检查是否与模式匹配。谢谢您的建议
答案1
我在 shell 脚本中使用的三个主要程序是 sed、grep 和 awk。每个程序的妙处在于正则表达式。在 shell 中,$@ 都是位置参数,因此您可以回显 $@ 并将其导入 awk 或 grep。
echo $@ | awk '/\S+ - \S+/ {print}'
使用 grep 您可以测试返回值,$?:
$ echo 1 - 9 | egrep '\S+ - \S+'
1 - 9
$ echo $?
0
$ echo - 9 | egrep '\S+ - \S+'
$ echo $?
1
用测试检查返回值:
ARGS="$@"
MATCH=$(echo "$ARGS" | egrep '^\S+ - \S+')
if [ $? = 0 ]
then
echo "good match"
fi
或者使用上面的 MATCH:
if [ -n "$MATCH" ]
then
echo "good match"
fi