簡體   English   中英

不確定如何正確使用變量並在 bash 腳本的 if 語句中使用它們

[英]Not sure how to properly use variables and use them in if statements in bash scripting

我正在努力思考如何在 bash 腳本中正確聲明變量以及如何在我的程序中進一步使用它們。 我希望完成的是將被阻止 IP 的 IP 地址存儲在一個變量中。 我希望使用 iptables -S INPUT [line number] 來做到這一點。 此外,我希望檢查這個 IP 地址是否與另一個 IP 地址相同,然后繼續將 iptables 策略更改為 ACCEPT,如果它確實是相同的地址。

我遇到的問題是我對 bash 腳本編寫的經驗太少了,我完全不確定為什么我的腳本不起作用,或者我可以改變什么來使它工作。

希望那里有任何經驗豐富的 shell 腳本編寫者可以幫助我:)


#!/bin/bash

# Getting an IP address from a saved database
IP_ADDRESS=$(echo "${line%%,*}")

# Defining the line number for iptables -L INPUT --line-numbers while reading list
LINE_NUMBER=$(echo "$iptables_line" | cut -d " " -f1)

IPSTATUS_LINE_NUMBER=$(echo "$LINE_NUMBER")

# Wanting to store the IP address from iptables -S INPUT here to use for later
LINE_FROM_IPSTATUS=$(echo "iptables -S INPUT $IPSTATUS_LINE_NUMBER" | grep "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+")   ############### Error is here
                
echo "IP imported from iptables -S => $LINE_FROM_IPSTATUS"

# Check if the IP address is on the iptables -S line
    if [ "$LINE_FROM_IPSTATUS" = "$IP_ADDRESS" ]; then ### Potential second error here

        echo "IP: $IP_ADDRESS was located on line nr. $LINE_NUMBER"
        
        # Changing the rule in INPUT Chain to ACCEPT
        iptables -R INPUT "$LINE_NUMBER" -s "$IP_ADDRESS" -j ACCEPT
    else
        # Echo if something went wrong
        echo "Oops. Something went wrong"
    fi


您的語法總體上看起來不錯,但是您是否不需要為每個變量賦值使用$(echo ... ) 例如,這些足以分配 IP_ADDRESS 和 IPSTATUS_LINE_NUMBER,

IP_ADDRESS="${line%%,*}"

IPSTATUS_LINE_NUMBER="$LINE_NUMBER"

在發生錯誤的那一行,嘗試在命令替換中調用iptables ,而不是回顯命令和 args,

LINE_FROM_IPSTATUS=$(iptables -S INPUT $IPSTATUS_LINE_NUMBER | grep "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+")

暫無
暫無

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

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