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命令的语法:
  1. while read LINE
  2. do
  3.     ADDR=`echo ${LINE} | awk '{print $1}'`
  4.     echo "$ADDR"
  5. 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# 昭襄王
  1. while read LINE
  2. do
  3.     echo ${LINE}
  4.     awk '{print "awk eat this line: " $0}'
  5. 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