我想檢查輸入是否只包含字母數字字符和/
斜線。BASH檢查字母數字和斜線
我的代碼:
if [ ! -z `echo $2 | tr -d "[\/:alnum:]"` ]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi
如果鍵入.script.sh /example/test/
引發錯誤。爲什麼?
我想檢查輸入是否只包含字母數字字符和/
斜線。BASH檢查字母數字和斜線
我的代碼:
if [ ! -z `echo $2 | tr -d "[\/:alnum:]"` ]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi
如果鍵入.script.sh /example/test/
引發錯誤。爲什麼?
你可以使用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
...
你不需要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
,因爲它只要失敗你找到一個[^ 0-9 /]或$ 2是EMPTY ,你可以採取以下幾點:
if [[ -z "$2" || "$2" =~ [^0-9/] ]]; then
echo "Error: input contains non-alphanumeric characters."
exit 1
fi
'if! [[「$ 2」=〜^ [0-9 /] + $]];然後回顯「錯誤:輸入包含非字母數字字符。」;出口1; fi' – anishsane
&錯誤被顯示的原因可能是因爲你的$ 2包含一些特殊字符,這是''''''''''' – anishsane
特別對待問題是關於如何使用'tr'檢查我的答案 – Tiago