Iptables
檢查 iptables 是否正在執行的腳本不起作用
我有以下簡單的腳本來檢查 iptables 是否正在執行。為什麼無論狀態如何,它總是返回“OK”?
#!/bin/bash #IPT='iptables' SERV='/sbin/service iptables status' EXPR='Firewall is stopped.' if [ "$SERV" = "$EXPR" ] then echo 'Firewall is not Running' exit 2 else echo 'OK' exit 0 fi
iptables 的初始化腳本永遠不會返回該字元串;它總會有其他東西,而且還有一些與該字元串完全不匹配的故障條件。
相反,您應該檢查腳本的退出程式碼,因為它(在 EL 和 Fedora 上)如果防火牆未啟動則返回非零值,如果它處於活動狀態則返回零。
/sbin/service iptables status >/dev/null 2>&1 if [ $? = 0 ]; then echo "All systems go." else echo "Houston, we have a problem." fi
您設置
$SERV
為等於文字字元串值“/sbin/service iptables status
”,您需要它來執行命令並儲存結果。您可以通過回顯來驗證這一點$SERV
。如所寫,它將始終評估為不相等。
SERV=$(/sbin/service iptables status)
此外,請確保輸出符合預期。我的版本返回
iptables: Firewall is not running.
(當然您的版本可能會有所不同。)在Advanced Bash-Scripting Guide中閱讀有關子shell 的更多資訊。