Another BASH Scripting question

Madison Kelly linux-5ZoueyuiTZhBDgjK7y7TUQ at public.gmane.org
Mon Feb 9 18:35:52 UTC 2004


Thank you very much for replying but I can't seem to implement properly 
your advice... With all three methods the output is the same; the 
variable name instead of the variable data...

Here is the modified script and the output:


  -= Your first suggestion:
# How many servers do we have?
SRV_NAME="SRV1 SRV2"

# Rules for server <server>
SRV1_SNAT_IP="192.168.2.10:111.222.333.44
SRV1_IB_TCP="22 25 53 80 110"
SRV1_IB_UDP="22 25 53 80 110"
SRV1_LAN_TCP="22>192.168.1.12"
SRV1_LAN_TCP="22>192.168.1.12"

# Rules for server <server>
SRV2_SNAT_IP="192.168.2.11:111.222.333.45
SRV2_IB_TCP="22 80"
SRV2_IB_UDP="22 80"
SRV2_LAN_TCP="22>192.168.1.16"
SRV2_LAN_TCP="22>192.168.1.16"


echo -n "Checking to see if we have servers: "
if [ "${SRV_NAME}" != "" ] ; then
     echo "we do!"
     echo "Setting up rules for each public server: "
     for server in ${SRV_NAME} ; do
         echo "Processing: "${server}
         eval var=${server}_SNAT_IP
             echo $var | {
	        IFS=':' read pubip inetip
                 echo "Internal IP: ${pubip}"
                 echo "Internet IP: ${inetip}"
             }
         }
     done
fi

The output is:

Checking to see if we have servers: we do!
Setting up rules for each server:
Processing: SRV1
Internal IP: SRV1_SNAT_IP
Internet IP:
Processing: SRV2
Internal IP: SRV2_SNAT_IP
Internet IP:


  -= Second suggestion
<variables snipped>
echo -n "Checking to see if we have servers: "
if [ "${SRV_NAME}" != "" ] ; then
     echo "we do!"
     echo "Setting up rules for each public server: "
     for server in ${SRV_NAME} ; do
         echo "Processing: "${server}
         eval var=${server}_SNAT_IP
         IFS=:
         set $var
         echo "Internal IP: ${1}"
         echo "Internet IP: ${2}"
         }
     done
fi

The output is the same:

Checking to see if we have servers: we do!
Setting up rules for each server:
Processing: SRV1
Internal IP: SRV1_SNAT_IP
Internet IP:
Processing: SRV2
Internal IP: SRV2_SNAT_IP
Internet IP:

  -= Third suggestiong
<variables snipped>
echo -n "Checking to see if we have servers: "
if [ "${SRV_NAME}" != "" ] ; then
     echo "we do!"
     echo "Setting up rules for each public server: "
     for server in ${SRV_NAME} ; do
         echo "Processing: "${server}
         eval var=${server}_SNAT_IP
         echo "Internal IP: ${var%:*}"
         echo "Internet IP: ${var#*:}"
         }
     done
fi

The output is slightly different:

Checking to see if we have servers: we do!
Setting up rules for each server:
Processing: SRV1
Internal IP: SRV1_SNAT_IP
Internet IP: SRV1_SNAT_IP
Processing: SRV2
Internal IP: SRV2_SNAT_IP
Internet IP: SRV2_SNAT_IP


   Can you see what I have done wrong?? Thanks again!

Madison



Chris F.A. Johnson wrote:
> On Mon, 9 Feb 2004, Madison Kelly wrote:
> 
> 
>>Hi all,
>>
>>   Sorry for asking so many questions! I am on quite the learning curve
>>at the moment! :)
>>
>>   I am on the last portion of my firewall script and I need something
>>like an array (though judging from what I have read on array's, not
>>exactly one).
>>
>>   Here is what I am trying to do: I have rules for multiple servers.
>>Later on we will add more servers. I already will have to copy/paste the
>>variables and update the data for the servers but I don't want to have
>>to edit the actual script. To do this, I want to have the script read
>>the value from a variable but have part of that variable name itself be
>>dynamic. This is what is stumping me...
> 
> [snip]
> 
> 
>># Here is where things break!
>>
>>		echo "${server}_SNAT_IP" | {
>>			IFS=':' read pubip inetip
>>			echo "Internal IP: "${pubip}
>>			echo "Internet IP: "${inetip}
>>		}
>>	done
>>fi
> 
> 
>     Use eval:
> 
> eval var=${server}_SNAT_IP
> echo "$var | { .......
> 
>    Once you have the value, you could use set to break down the
>    variable, instead of piping to read:
> 
> eval var=${server}_SNAT_IP
> IFS=:
> set $var
> echo "Internal IP: ${1}"
> echo "Internet IP: ${2}"
> 
>    Or use parameter expansion:
> 
> eval var=${server}_SNAT_IP
> echo "Internal IP: ${var%:*}"
> echo "Internet IP: ${var#*:}"
> 
> 


--
The Toronto Linux Users Group.      Meetings: http://tlug.ss.org
TLUG requests: Linux topics, No HTML, wrap text below 80 columns
How to UNSUBSCRIBE: http://tlug.ss.org/subscribe.shtml





More information about the Legacy mailing list