- 论坛徽章:
- 0
|
回复 2# waker - 1 #!/bin/bash
- 2
- 3 if [ -z "$1" ]
- 4 then
- 5 Filename=names.data # 如果没有指定文件名就使用默认值.
- 6 else
- 7 Filename=$1
- 8 fi
- 9
- 10 line_count=`wc $Filename | awk '{ print $1 }'`
- 11 # 目标文件的行数.
- 12 #
- 13 # 此处的代码太过做作, 并且写得很难看,
- 14 #+ 但至少展示了"for"循环的stdin可以重定向...
- 15 #+ 当然, 你得足够聪明, 才能看得出来.
- 16 #
- 17 # 更简洁的写法是 line_count=$(wc -l < "$Filename")
- 18
- 19
- 20 for name in `seq $line_count` # "seq"打印出数字序列.
- 21 # while [ "$name" != Smith ] -- 比"while"循环更复杂 --
- 22 do
- 23 read name # 从$Filename中, 而非从stdin中读取.
- 24 echo $name
- 25 if [ "$name" = Smith ] # 因为用for循环, 所以需要这个多余测试.
- 26 then
- 27 break
- 28 fi
- 29 done <"$Filename" # 重定向stdin到文件$Filename.
- 30 # ^^^^^^^^^^^^
- 31
- 32 exit 0
复制代码 13行说"此处的代码太过做作",但展示for可以重定向,可是上面的第10行并没有用for啊?难道隐藏什么调用? |
|