0

我有一个包含以下内容的配置文件:

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 (只是为了看看它是否有效)时,它给了我空白。

4

3 回答 3

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 的非常有趣的方法,您可以使用以下命令填充数组:

mylist=( $(awk '{print $1}' test.conf) )

它将像这样存储数据:

mylist=(ip1 ip2 ip3 ...)
于 2013-10-11T14:28:04.750 回答
1

要将文件读入变量,您甚至不需要跳出 bash 进入 awk

while read -r v_ip _ v_test_location; do
  printf "%s %s\n" "$v_ip" "$v_test_location";
done < test.conf
于 2013-10-11T14:58:01.223 回答
0

Your assignment is executed in the inner shell of the while loop, so it has no effect on the ip variable outside it. Consider doing this instead:

ip=$(awk '/IMPORTANT_LINE_REGEXP/ {print $1}' test.conf)
于 2013-10-11T14:05:52.407 回答