2014-06-30 65 views
0

我想檢查輸入是否只包含字母數字字符和/斜線。BASH檢查字母數字和斜線

我的代碼:

if [ ! -z `echo $2 | tr -d "[\/:alnum:]"` ]; then 
    echo "Error: input contains non-alphanumeric characters." 
    exit 1 
fi 

如果鍵入.script.sh /example/test/引發錯誤。爲什麼?

+0

'if! [[「$ 2」=〜^ [0-9 /] + $]];然後回顯「錯誤:輸入包含非字母數字字符。」;出口1; fi' – anishsane

+0

&錯誤被顯示的原因可能是因爲你的$ 2包含一些特殊字符,這是''''''''''' – anishsane

+0

特別對待問題是關於如何使用'tr'檢查我的答案 – Tiago

回答

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 
... 
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 
+0

你不也需要'=〜''樣式正則表達式。 '! [[$ 2!= * [^ [:alnum:]] *]]' – kojiro

+0

其實沒有。 Glob不提供等價的正則表達式錨''''和'$'。即使'[[「1 @」== * [/ [:alnum:]] *]]'也會返回true。 – anubhava

+0

你不需要這個用例的錨點。如果*'$ 2'不包含任何非字母數字*的字符,那麼'$ 2'只包含字母數字的字符。 (除非'$ 2'是空的,但是這是一個容易的邊緣情況來測試。) – kojiro

0

,因爲它只要失敗你找到一個[^ 0-9 /]或$ 2是EMPTY ,你可以採取以下幾點:

if [[ -z "$2" || "$2" =~ [^0-9/] ]]; then 
    echo "Error: input contains non-alphanumeric characters." 
    exit 1 
fi 
相關問題