[英]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.