我正在编写一个 shell 脚本,用于检查参数是否与字符串匹配。其中大约有 20 个,将来可能需要添加更多。
目前,我编写它的方式很难阅读,更新起来也很麻烦。我对 shell 脚本不是很熟悉,所以我不确定简化它并使其更易于管理的最佳方法。
if [ $4 =="CRITICAL" ] && [[ $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || $2 == "foo" || $2 == "bar" || ]]
VARIABLE=1
fi
Run Code Online (Sandbox Code Playgroud)
Foo 和 bar 在上面的脚本中都是不同的字符串。
在标准 shell 中,您可以使用case,它支持交替:
#!/bin/sh
if [ "$4" = CRITICAL ]; then
case $2 in
foo|bar|doo|quux)
VARIABLE=1
;;
esac
fi
Run Code Online (Sandbox Code Playgroud)
如果在上面花五行case太冗长,那就写在一行上:
case $2 in foo|bar|doo|quux) VARIABLE=1;; esac
Run Code Online (Sandbox Code Playgroud)
请注意,这==在 中不是标准的[ .. ],但在 Bash 和 ksh 中受支持。
if [[ $4 == CRITICAL && $2 =~ ^(a|b|c|d|e|f|g)$ ]]; then
VARIABLE=1
fi
Run Code Online (Sandbox Code Playgroud)
顺便说一句,未加引号的变量和位置参数在 inside 中使用是安全的[[ ... ]],但在[ ... ]. 换句话说,你[ $4 == "CRITICAL" ]应该是[ "$4" == "CRITICAL" ].
此外,上面CRITICAL根本不需要引用。它是一个固定字符串,没有空格或 shell 元字符。如果它是一个由于任何原因确实需要引用的固定字符串,最好使用单引号。
单引号用于固定字符串,双引号用于将变量、命令替换等插入字符串中。
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |