2016-07-24 27 views
1

我需要檢查,如果用戶輸入(第一個參數)的範圍是什麼我得到的是這種如何檢查數組的範圍?

#!/bin/bash 
count=$1 
if ! ((${#count[@]} == 8 || ${#count[@]} == 9 || ${#count[@]} == 10 || ${#count[@]} == 11 || ${#count[@]} == 12 || ${#count[@]} == 13 || ${#count[@]} == 14 || ${#count[@]} == 15 || ${#count[@]} == 16));then 
echo "Error - not in range [8-16] symbols" 
else 
echo "good" 
fi 

我使用該陣列8和16之間 ,但它不工作。我用「if語句」嘗試了不同的語法,但仍然沒有任何結果。有沒有其他的方法來檢查第一個參數的範圍,因爲我的方式看起來很愚蠢?

回答

1

獲取參數的長度使用${#1}然後用bash算術比較操作(()),在你的情況下,檢查一個整數的範圍無論是在8和16之間:

((count>=8 && count<=16)) 

所以你腳本可以被改寫爲:

#!/bin/bash 
count=${#1} 
if ! ((count>=8 && count<=16)); then 
    echo "Error - not in range [8-16] symbols" 
else 
    echo "good" 
fi 
+0

它給我的只有最後的結果 檢查AB 好 檢查 好 檢查safsaffa 好 等 – Josh

+0

@Josh檢查我的編輯.. – heemayl

+0

現在,它給了我「錯誤 - 不在範圍內[ 8-16]符號「我輸入的任意數量的字符 – Josh

0

您還可以使用正則表達式來檢查輸入的長度:

if [[ $1 =~ .{8,16} ]]; then 
    echo "good" 
else 
    echo "Error - not in range [8-16] symbols" 
fi