不知道如何正确使用变量并在 bash 脚本的 if 语句中使用它们

问题描述 投票:0回答:1

我正在努力思考如何在 bash 脚本中正确声明变量以及如何在我的程序中进一步使用它们。我希望完成的是将被阻止的 IP 地址存储在变量中。我希望使用 iptables -S INPUT [行号] 来执行此操作。此外,我想检查这个 IP 地址是否与另一个 IP 地址相同,然后如果确实是相同的地址,则继续将 iptables 策略更改为接受。

我遇到的问题是,我对 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


bash shell ssh iptables fail2ban
1个回答
0
投票

您的语法总体上看起来不错,但您不需要对每个变量赋值都使用

$(echo ... )
。例如,这些足以分配 IP_ADDRESS 和 IPSTATUS_LINE_NUMBER,

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

IPSTATUS_LINE_NUMBER="$LINE_NUMBER"

在发生错误的行上,尝试在命令替换中调用

iptables
,而不是回显命令和参数,

LINE_FROM_IPSTATUS=$(iptables -S INPUT $IPSTATUS_LINE_NUMBER | grep "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+")
© www.soinside.com 2019 - 2024. All rights reserved.