簡體   English   中英

bash腳本中的數組

[英]array in bash script

我有以下腳本:

for (( i=0; i <= ( ${#arr1[@]} - 1); i++ )); do
  if [[ ${arr1[i]} > 100 ]]; then 
    echo "=> x"
    iptables -A INPUT -s 192.168.162.1 -j DROP
    exit
  else
    echo "=> y"
  fi
done

在我的數組中,沒有元素> 100,所有輸出必須為“ => y”。 arr1[i]=1 ,就可以了。 輸出:“ => y”但是當arr1[i]=5或任何不arr1[i]=5 1時,它有問題,輸出“ => x”

我認為, if [[ ${arr1[i]} > 100 ]]我的問題就在這里if [[ ${arr1[i]} > 100 ]]但我不知道如何進行編輯。 :(

幫我糾正一下。 請 。 非常感謝

您想要:

if (( ${arr1[$i]} > 100 )); then

或對於不支持(()) POSIX shell,可以使用:

if [[ ${arr1[$i]} -gt 100 ]]; then

這是其他比較運算符的好清單

您所做的事情有兩個問題:

  1. 您需要說if [[ ${arr1[$i]} > 100 ]]; then if [[ ${arr1[$i]} > 100 ]]; then (請注意,它應該是$i而不是i )。

  2. if [[ ${arr1[$i]} > 100 ]]; 錯誤的 這執行了詞典的比較,並沒有達到預期的目的。 要么說:

    if [[ ${arr1[$i]} -gt 100 ]]; then

    要么

    if (( ${arr1[$i]} > 100 )); then

您應該使用-gt ,大於

由於除了將數組下標之外,您不使用i進行其他操作,因此直接迭代數組的會更簡單:

for value in "${arr1[@]}"; do
    if (( value > 100 )); then
        echo "=> x"
        iptables -A INPUT -s 192.168.162.1 -j DROP
        exit
    else
        echo "=> y"
    fi
done

這包括另一個用於正確比較兩個整數值的選項((...))命令,該命令提供了一個上下文,其中>可以用於數字比較而不是字符串比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM