用于检查字符串和特殊字符的Shell脚本

时间:2016-07-14 15:06:13

标签: bash shell

我正在编写一个示例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" != *['!'@#\$%^\&*()_+]* ]]'

2 个答案:

答案 0 :(得分:1)

这可能是另类

#!/bin/bash
 str='sudo'
 if ! [ "$str" = "sample" ] && ! [[ "$str" =~ [^[:alnum:]]+ ]]
 then
   echo "Proceed"
 else
   echo "Stop"
 fi

注意

  1. 检查bash [ character classes ]
  2. 字符类之前的^否定它,实质上我们正在寻找其他任何字母数字
  3. 类似地,在测试表达式之前!否定它。
  4. +检查至少一次。

答案 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