This should be simple and I've done it in a script somewhere before, I can't find my example (or an equivalent), and today this problem is driving me toward insanity. (Even tho I've not included the rest of script this is for use inside a script, not interactive.)
cat testfile | grep -e eth0
Returns:
eth0 123.45.67.8/23 u/u Internet - Cable WAN
The end result is I need variables set for each element. i.e. as if I had done this manually instead:
INTF = "etho"
IPADDR = "123.45.67.8/23"
STS = "u/u"
DESC = "Internet - Cable WAN"
I thought I could do something like:
cat testfile | grep -e eth0 | awk '{print $2}' | xargs read IPADDR
or
cat testfile | grep -e eth0 | cut -d " " -n2 | read IPADDR
but nothing I've tried has brought joy.... What is my roadblock (headblock)?
EDIT to add— the script is more complicated than just grabbing one IP, as my example is leading people to conclude. It’s a cron based script that runs once per minute, it runs a loop thru 8 interfaces and sends a message in certain alarm conditions. The rest of the script works when I run it with hard coded variables, I just cut asked about the part that is stumping me.
Since you want to set 4 variables, instead of doing cut
4 times, you can use read
like this:
#!/bin/bash
#
read INTF IPADDR STS DESC <<< $(cat testfile | grep -e eth0)
echo $INTF
echo $IPADDR
echo $STS
echo $DESC
This will "cut" on any white space, using the default $IFS
.
If you wanted to cut values from: "aaa,bbb,ccc,ddd",
you can change the IFS value before the read
.
Ex:
IFS="," read INTF IPADDR STS DESC <<< $(cat testfile | grep -e eth0)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With