On 23/07/2020 15:46, Jerry Geis wrote:
Hi Jerry,
See below, inline, for some comments.
I have a simple script: #!/bin/bash # index=0 total=0 names=() ip=() while read -r LINE do NODENAME=` echo $LINE | cut -f 1 -d ','`
NODENAME=$(cut -d, -f1 <<< $LINE)
Notes: use $( instead of backticks. There's no need to quote the comma. Write less and write concisely.
IP=` echo $LINE | cut -f 2 -d ','`
IP=$(cut -d, -f2 <<< $LINE)
names[index]="$NODENAME" ip[index]="$IP"
ip[$((index++))]="$IP"
This allows you to use the variable index, and then increment it by one for the next cycle of the loop.
index=`expr index+1`
Not needed because of the post-increment (++) above.
total=`expr total+1`
((total++))
done <<< $(cat list.txt)
done < list.txt
The "<<<" operator does all manner of expansion of the input and supplies it as a single line. That not what you want. Just redirect stdin from the file instead.
simple file: more list.txt name1,ip1 name2,ip2 name3,ip3
output when running: sh -x ./test_bash.sh
- index=0
- total=0
- names=()
- ip=()
++ cat list.txt
- read -r LINE
++ echo name1,ip1 name2,ip2 name3,ip3
This is happening because of the <<< operator.
++ cut -f 1 -d ,
- NODENAME=name1
++ echo name1,ip1 name2,ip2 name3,ip3 ++ cut -f 2 -d ,
- IP='ip1 name2'
- names[index]=name1
- ip[index]='ip1 name2'
++ expr index+1
- index=index+1
++ expr total+1
- total=total+1
- read -r LINE
- echo name1
name1
Question is why is it not reading one line at a time ? All I get is the first one. I'm just trying to build the array of the items in the file and then list them at this point.