Chinaunix

标题: 嵌套read出现的问题,麻烦高手帮忙解释一下 [打印本页]

作者: beingshadow    时间: 2010-05-31 16:12
标题: 嵌套read出现的问题,麻烦高手帮忙解释一下
  1. $cat Iplogs.txt
  2. 180607 093423        123.12.23.122 133
  3. 180607 121234        125.25.45.221 153
  4. 190607 084849   202.178.23.4 44
  5. 190607 084859   164.78.22.64 12
  6. 200607 012312        202.188.3.2 13
  7. 210607 084849   202.178.23.4 34
  8. 210607 121435        202.178.23.4 32
  9. 210607 132423        202.188.3.2 167
复制代码
  1. $ cat doubleRead.sh
  2. #!/bin/bash

  3. cat Iplogs.txt | while read LINE
  4. do
  5.   echo $LINE
  6.   echo "Need to modify?"
  7.   echo -n "Enter yes or no: " #                       -n表示不换行
  8.      read x
  9.   case "$x" in
  10.   y | yes ) echo "return 0";;
  11.   n | no ) echo "return 1";;
  12.   * ) echo "Answer yes or no"  #                  给输入错误用while提供足够机会
  13. esac
  14. done
复制代码
$ ./doubleRead.sh
180607 093423 123.12.23.122 133
Need to modify?
Enter yes or no: Answer yes or no
190607 084849 202.178.23.4 44
Need to modify?
Enter yes or no: Answer yes or no
200607 012312 202.188.3.2 13
Need to modify?
Enter yes or no: Answer yes or no
210607 121435 202.178.23.4 32
Need to modify?
Enter yes or no: Answer yes or no

======
问题:
1、第二个read命令,怎么没有给我输入参数的机会呢?
2、Iplogs.txt里面有8行,怎么读出来4行?
3、难道第一个read的作为第二个read的输入了?

麻烦高手解惑。
作者: ly5066113    时间: 2010-05-31 16:17
老问题了。

关于while read只执行一次的问题
Q:下面的代码为何只执行了一次就退出了?
seq 10 >file

while read a

do

echo $a

dd &>/dev/null

done <file
复制代码

A:因为重定向是针对整个while循环块的,而不只是read命令
请参看下面的链接
http://bbs.chinaunix.net/viewthread.php?tid=769040
作者: beingshadow    时间: 2010-05-31 17:11
回复 2# ly5066113


    谢谢帮忙解释

刚才试验了一把,发现你的解释是正确的。我把Iplogs.txt里面的第二行改为yes,发现果然是cat的第一个参数(文件的第一行)被第一个read“取走了”,cat的第二个参数被第二个read取走了,结果就是没让我输入他就自己从cat的管道读了,对不?

这样的话,我要给while里面的第二个read手动输入参数,还很麻烦呢
作者: ly5066113    时间: 2010-06-01 10:06
回复 3# beingshadow


IO重定向

read x < /dev/tty
作者: beingshadow    时间: 2010-06-02 19:49
回复 4# ly5066113


    谢谢,谢谢

我昨天也搞定了!对亏你的解释,过了一个快乐的节日,挖哈哈~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2