Bash 如何检查字符串是否不包含某些字符?
我有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
#!/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
toparam2
,然后您的函数才能看到它。您需要转义反斜杠,例如,/test.sh param1“par\am2”param3
。