我有一个配置文件,其中包含以下内容:
ip address file_location
ip address file_location
.
.
.
.
我希望我的脚本test.sh从这个文件中读取ip地址和文件位置:这是我的代码:
while read line ; do
ip=`echo $line| awk '{print $1}'`
done <test.conf
现在,当我输入echo $ ip(只是为了查看它是否有效)时,它给了我空白。
答案 0 :(得分:2)
这可以是创建bash数组的方法:
$ declare -A mylist
$ i=1
$ while read line; do mylist[$i]=$(echo $line | awk '{print $1}'); ((i++)); done < test.conf
然后您可以使用以下方式访问值:
$ for i in "${mylist[@]}"; do echo "$i"; done
ip1
ip2
ip3
或者,使用Jonathan Leffer's very interesting approach,您可以使用以下命令填充数组:
mylist=( $(awk '{print $1}' test.conf) )
它将存储如下数据:
mylist=(ip1 ip2 ip3 ...)
答案 1 :(得分:1)
要将文件读入变量,您甚至不需要将bash跳出到awk
while read -r v_ip _ v_test_location; do
printf "%s %s\n" "$v_ip" "$v_test_location";
done < test.conf
答案 2 :(得分:0)
您的赋值在while
循环的内壳中执行,因此它对它外面的ip
变量没有影响。考虑这样做:
ip=$(awk '/IMPORTANT_LINE_REGEXP/ {print $1}' test.conf)