我正在编写一个示例 shell 脚本,如果字符串不等于“sample”并且字符串不包含特殊字符,我必须执行一些操作。我尝试了下面的代码,但出现语法错误。这是正确的做法吗?如果不是,正确的做法是什么?
#!/bin/bash
str='sudo'
if [ "$str" != "sample" ] && [[ "$str" != *['!'@#\$%^\&*()_+]* ]]
then
echo "Proceed"
else
echo "Stop"
fi
我遇到这样的语法错误:
bash-3.2$ ./test.sh
./test.sh: line 3: syntax error in conditional expression: unexpected token `('
./test.sh: line 3: syntax error near `&*()'
./test.sh: line 3: `if [ "$str" != "sample" ] || [[ "$str" != *['!'@#\$%^\&*()_+]* ]]'
最佳答案
这可能是一个替代方案
#!/bin/bash
str='sudo'
if ! [ "$str" = "sample" ] && ! [[ "$str" =~ [^[:alnum:]]+ ]]
then
echo "Proceed"
else
echo "Stop"
fi
注意
- 检查 bash [ character classes ] .
- 字符类之前的
^
否定它,本质上我们正在寻找字母数字以外的任何内容 - 类似地,在测试表达式否定它之前
!
。 +
检查至少出现一次。
关于bash - 用于检查字符串和特殊字符的 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38377805/