我正在编写一个示例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" != *['!'@#\$%^\&*()_+]* ]]'
答案 0 :(得分:1)
这可能是另类
#!/bin/bash
str='sudo'
if ! [ "$str" = "sample" ] && ! [[ "$str" =~ [^[:alnum:]]+ ]]
then
echo "Proceed"
else
echo "Stop"
fi
注意强>
^
否定它,实质上我们正在寻找其他任何字母数字!
否定它。+
检查至少一次。答案 1 :(得分:0)
在bash shell上的每个方面都很好。
user@host:/tmp$ cat test.sh
#!/bin/bash
str='sudo'
if [ "$str" != "sample" ] && [[ "$str" != *['!'@#\$%^\&*()_+]* ]]
then
echo "Proceed"
else
echo "Stop"
fi
user@host:/tmp$ ./test.sh
Proceed
如果你像下面那样跑,这可能是错误的结果。
user@host:/tmp$ ksh test.sh
Stop