2016-07-24 68 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