bash for循环 while循环
for循环 while循环
Chenxin
20181031 update
循环用法
for((i=1;i<=10;i++));do echo $(expr $i * 4);done
for i in ls
在shell中常用的是 for i in $(seq 10)
使用seq 100
如 for i in seq 100
或 for i in seq 1 1000000
;do
for i in {1..10000000};do #这个方法是非常慢的
for i in ${arr[@]}
for i in $* ; do
for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo $File
done
for i in f1 f2 f3 ;do
echo $i
done
使用while循环
i=1
while(($i<100));do
echo $i
i=expr $i + 1
done
另外, i=expr $i + 1
还可以改为i=$(($i+1))加快运算速度(看shell支持与否)
最慢的方法
echo $i
done
单行for循环
1.单行for循环使用{}的方式:for i in /bin/ls
;do { echo test "$i" ;} done
注意2个分号不能少,否则语法错误;
eg: 打印所有可以登录系统用户的cron配置信息
for i in cat /etc/passwd|grep bash |cut -f 1 -d :
;do { crontab -u "$i" -l;echo "-----------";echo;echo ;} done
2.第二种格式
for i in /bin/ls
; do echo test "$i"; done
注意2个分号的位置;
3.也可以使用如下方式:
for i in /bin/ls
;do { echo test "$i";echo $i;} done
for i in /bin/ls
;do echo test "$i";echo $i; done
for i in /bin/ls
;do echo test "$i"echo $i;done #两个echo之间没有分号的话,第二个echo会被当成第一个echo的输出执行;
for i in /bin/ls
;do echo test"$i";echo $i;done
综上,for第一行需要作为独立的执行;do那行也作为独立的执行,do的所有语句可以放在do的同行;在done之前必须有个分号,或者是换行,作为for循环的第三部分,也就是作为结束本轮循环的标志;
for XXX;do XXX;done
也就是在shell遇到for字符时候,进行条件判断;遇到do字符,则执行之后的所有循环操作,知道遇到done为止;在do和done之前,如果是单行的for循环,则需要分号分隔,如果是多行,可以用换行来替代分号;
{}符合可加可不加,如果想看着舒服的话,建议采用C编程风格,这样更容易看些,但作为shell自身而言,不建议加大括号,因为会增加一些语法的解释;
大括号{}
大括号执行命令的方式如下:
{ ls -al; } 注意那个分号,没有分号无法执行;
shell 按行读取 for和while区别
20140609 Chenxin
说明:
for逐行读和while逐行读是有区别的,如:
$ cat file
1111
2222
3333 4444 5555 #for会将次行作为3个变量处理,而while会作为单个变量处理
$ cat file | while read line; do echo $line; done
1111
2222
3333 4444 5555
$ for line in $(<file); do echo $line; done
1111
2222
3333
4444
5555