我想检查输入是否只包含字母数字字符和/
斜杠。
我的代码:
if [ ! -z `echo $2 | tr -d "[\/:alnum:]"` ]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi
如果我输入.script.sh /example/test/
,则会抛出错误。为什么呢?
答案 0 :(得分:1)
您可以将tr
用作tr -d '[:alnum:]\/'
示例:
str="123.abc?/123#"; tr -d '[:alnum:]\/' <<<$str
.?#
您可以在上面的示例中看到任何不是字母数字和/
的内容。
在if
内使用:
str="abc123/"; if [ -n "$(tr -d '[:alnum:]\/' <<<$str)" ];then echo invalid; else echo valid; fi
valid
str="abc123/."; if [ -n "$(tr -d '[:alnum:]\/' <<<$str)" ];then echo invalid; else echo valid; fi
invalid
所以你的代码应该是这样的:
if [ -n "$(tr -d '[:alnum:]\/' <<<$2)" ]; then
...
答案 1 :(得分:0)
您不需要tr
,可以在纯BASH中完成:
if [[ ! "$2" != *[^[:alnum:]/]* ]]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi
编辑:感谢@kojiro这个解决方案不需要正则表达式:
if [[ ! "$2" != *[^[:alnum:]/]* ]]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi
答案 2 :(得分:0)
因为只要你找到一个[^ 0-9 /]或$ 2是EMPTY就会失败,你可以采取以下措施:
if [[ -z "$2" || "$2" =~ [^0-9/] ]]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi