- 论坛徽章:
- 0
|
本帖最后由 dickgz1z 于 2010-06-22 12:05 编辑
- #!/bin/sh
- for i in 1 2 3 4 5; do
- a=0
- b=10
- c=20
- while [ $i -gt 3 ]
- do
- a=`expr $a + 1`
- b=`expr $b - 1`
- c=`expr $c + 1`
- done
- echo "the value of a :${a}\nthe value of b :${b}\nthe value of c :${c}"
- done
复制代码 bash下经过while循环的变量值在循环结束后会丢失,这里我通过上面这个比较简单的例子说下,输出结果是:- the value of a :0
- the value of b :10
- the value of c :20
- the value of a :0
- the value of b :10
- the value of c :20
- the value of a :0
- the value of b :10
- the value of c :20
复制代码 变量a,b,c的值并未改变。请问大家有遇到这样的问题吗?是怎样解决的?
P.S.:
QUOTE:试试这个应该对了
值初始化的位置有问题。按原while的写法,可以这样写,但是看上去怪怪的:
zenith518 发表于 2010-06-22 08:15
其实不是值初始化的位置有问题,而是有时必须在每一次for循环里初始化变量值,例如把一个目录的所有文件放入for循环,以变量作为计数器计算每个文件的行数。至于把while换成if的做法虽然在此例可行,但换了其他情况if还是不能做读文件操作:- for FILE in test/*.txt; do
- line_count=0
- while read line
- do
- line_count=`expr $line_count + 1`
- done<$FILE
- echo "$FILE has $line_count lines."
- done
复制代码 像上面这段代码,line_count是可以获得test目录下每个文件的行数的,但如果换成cat $FILE|while read line ,line_count的值每一次都将是0。上例就是必须在每一次for循环开始时初始化变量的情况,幸亏用输入重定向的办法可以解决问题。 |
|