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

posted @ 2020-04-20 15:35  ChanixChen  阅读(402)  评论(0编辑  收藏  举报