for循环有两个变量Shell

时间:2016-05-04 19:10:47

标签: shell unix for-loop

我想将两个变量rkps和rrtt与固定值进行比较,如果满足两个条件,则将计数器增加1。我已经编写了下面的shell for loop,这是正确的方法吗?

另外,无论如何要在一个for循环中初始化两个变量

count=0
for rkps in 1 2 3 4
do
for rrtt in 2 3 4 1

do
    echo "rkps = $rkps"
    echo "rrtt =$rrtt"
        if [[ "$rkps" -ge 1 && "$rrtt" -ge 2 ]]; then
        echo "Read Kb/s value greater than 1Mbps and RRTT greater than 2 msec"
        count=$(($count +1))
        fi
done
done

 if [ $count -gt 1 ]; then
 echo " issue exists"
 fi

注意:我想比较rkps中的第一个值> 1&& rrtt -ge 2中的第一个值,然后是第二个,第三个值等。 -Thanks

2 个答案:

答案 0 :(得分:3)

使用arrays

arr_rkps=(1 2 3 4)
arr_rrtt=(2 3 4 1)

for i in 0 1 2 3
do
   echo "rkps=${arr_rkps[i]}, rrtt=${arr_rrtt[i]}"
done

如果要遍历整个数组,可以使用

arr_rkps=(1 2 3 4)
arr_rrtt=(2 3 4 1)

for i in ${!arr_rkps[@]}
do
   echo "rkps=${arr_rkps[i]}, rrtt=${arr_rrtt[i]}"
done

答案 1 :(得分:1)

以下脚本是@ walter-a&#39解决方案的扩展。他值得所有的信任。我们初始化了两个阵列&计算最小长度。 最后,循环遍历数组中的每个值(0到minLen)并执行检查&递增反击。

count=0
rkps_arr=(1 2 3 4)
rrtt_arr=(2 3 4 1)
minLen=$(( (${#rkps_arr[@]} < ${#rrtt_arr[@]}) ? ${#rkps_arr[@]} : ${#rrtt_arr[@]} ))

echo "MinLen:${minLen}"
for((i=0; i< minLen; i++))
do
    rkps=${rkps_arr[i]}
    rrtt=${rrtt_arr[i]}
    echo "rkps=${rkps}"
    echo "rrtt=${rrtt}"
    if [[ "$rkps" -ge 1 && "$rrtt" -ge 2 ]]; then
     echo "Read Kb/s value greater than 1Mbps and RRTT greater than 2 msec"
     ((count++))
    fi
done

echo "Overall status"
if [ $count -gt 1 ]; then
 echo " issue exists"
fi