Bash 如何检查字符串是否不包含某些字符?

Bash 如何检查字符串是否不包含某些字符?,bash,Bash,我有bash脚本: #!/bin/bash if [ -z $1 ] || [ -z $2 ] || [ -z $3 ] then { echo >&2 "Required parameters missing "; exit 1; } fi echo "Success" 该脚本需要3个必需的参数。但我还需要确保$1不包含。而$2和$3不包含。和/和 如何实现这一点?首先,使用参数扩展的${name?:msg}形式验证您是否具有非空值: : ${1?:Missing par

我有bash脚本:

#!/bin/bash

if [ -z $1 ] || [ -z $2 ] || [ -z $3 ]
then
{ echo >&2 "Required parameters missing "; exit 1; }
fi

echo "Success"
该脚本需要3个必需的参数。但我还需要确保$1不包含。而$2和$3不包含。和/和


如何实现这一点?

首先,使用参数扩展的
${name?:msg}
形式验证您是否具有非空值:

: ${1?:Missing parameter 1}
: ${2?:Missing parameter 2}
: ${3?:Missing parameter 3}
然后,使用
[…]
命令执行模式匹配

if [[ $1 = *.* ]]; then
  echo >&2 "Invalid parameter 1 "
  exit 1
fi

if [[ $2 = *[./\\]* ]]; then
  echo >&2 "Invalid parameter 2 "
  exit 1
fi

if [[ $3 = *[./\\]* ]]; then
  echo >&2 "Invalid parameter 3 "
  exit 1
fi
如果需要坚持POSIX构造,请使用
case
语句而不是
[…]

case $1 in
  *.*) echo >&2 "Invalid parameter 1"; exit 1;;
esac

case $2 in
  *[./\\]*) echo >&2 "Invalid parameter 2"; exit 1;;
esac

case $3 in
  *[./\\]*) echo >&2 "Invalid parameter 3"; exit 1;;
esac

切普纳:谢谢你的详细回答。正斜杠工作正常,但反斜杠测试失败。包含反斜杠\的参数应作为无效参数返回。posix和[[]]都有这个问题:您如何测试反斜杠?如enter./test.sh param1 par\am2 param3,测试通过,但第二个参数shud失败shell正在处理
par\am2
to
param2
,然后您的函数才能看到它。您需要转义反斜杠,例如,
/test.sh param1“par\am2”param3