Chinaunix
标题:
shell 程序请教
[打印本页]
作者:
虎出山
时间:
2011-01-07 13:40
标题:
shell 程序请教
我的abc.txt 文件里面的内容是
192.168.2.4
192.168.2.3
192.168.2.2
]~# vim 9.sh 下面这是我的程序
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
cat /root/abc.txt |while read LINE
do
ADDR=`awk '{print $1}'`
echo "$ADDR"
done
为什么我运行程序后变量ADDR的结果只是
192.168.2.3
192.168.2.2 怎么没有192.168.2.4
作者:
yinyuemi
时间:
2011-01-07 13:50
这样行么?
for i in `awk '{print $1}' abc.txt`
do
echo $i
done
作者:
ly5066113
时间:
2011-01-07 13:53
没看明白要干啥。
awk '{print $1}' /root/abc.txt
不就完了
作者:
ly5066113
时间:
2011-01-07 13:54
192.168.2.4 被 read 到 LINE 里了
作者:
Shell_HAT
时间:
2011-01-07 13:57
如果楼主是为了学习while命令的语法:
while read LINE
do
ADDR=`echo ${LINE} | awk '{print $1}'`
echo "$ADDR"
done < urfile
复制代码
作者:
虎出山
时间:
2011-01-07 14:26
# vim 9.sh 下面这是我的程序
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
cat /root/abc.txt |while read LINE
do
echo "$LINE"
done
这样直接echo $LINE 就没有问题,都可以出来,为什么循环中加了 ADDR=`awk '{print $1}'` echo "$ADDR" 就把第一个192.168.2.4没了呢?
作者:
ly5066113
时间:
2011-01-07 14:29
回复
6#
虎出山
看最后一个问题:
http://bbs3.chinaunix.net/thread-674903-1-1.html
作者:
昭襄王
时间:
2011-01-07 14:29
我怎么觉得楼主的写法应该什么都不输出?
作者:
cjaizss
时间:
2011-01-07 14:31
被你read到LINE里去了
作者:
昭襄王
时间:
2011-01-07 14:39
谁能给说说为什么会有输出?
作者:
虎出山
时间:
2011-01-07 14:42
回复
8#
昭襄王
我在机器上测试的能出来啊,我写的这个也是仿照的 linux与unix shell 编程指南书上面第27章的第一个例子来写的
作者:
ly5066113
时间:
2011-01-07 14:43
回复
10#
昭襄王
我给的连接你没看吧。
read 读走了第一行,其他行都被awk 读去了。
本质上就是连接里的那句话:
"因为重定向是针对整个while循环块的,而不只是read命令"
作者:
虎出山
时间:
2011-01-07 14:46
回复
12#
ly5066113
谢谢ly5066113,刚才有事在忙还没有来的及看呢 ,我现在就看{:2_172:}
作者:
Shell_HAT
时间:
2011-01-07 14:48
回复
10#
昭襄王
while read LINE
do
echo ${LINE}
awk '{print "awk eat this line: " $0}'
done < urfile
复制代码
作者:
昭襄王
时间:
2011-01-07 14:50
回复 昭襄王
我给的连接你没看吧。
read 读走了第一行,其他行都被awk 读去了。
本质上就是连接里 ...
ly5066113 发表于 2011-01-07 14:43
原来这样,还能这样!
有些情境下这岂不是很方便?
多谢tim兄
作者:
昭襄王
时间:
2011-01-07 14:54
回复
14#
Shell_HAT
这意思,while其实只循环了一次是吧?
作者:
昭襄王
时间:
2011-01-07 14:57
确实只循环了一次
i=1;while read LINE; do echo $i;let i=i+1; echo ${LINE}; awk '{print "awk eat this line: " $0}'; done < lines2
1
1:aaa:be:c
awk eat this line: 2:bbbb:cf:d
awk eat this line: 3:cc:de:e
作者:
xiaopan3322
时间:
2011-01-07 14:59
回复
12#
ly5066113
学习
作者:
yxlhit2010
时间:
2011-01-07 18:36
回复 昭襄王
我给的连接你没看吧。
read 读走了第一行,其他行都被awk 读去了。
本质上就是连接里 ...
ly5066113 发表于 2011-01-07 14:43
学习了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2