19.10

20.10 for循环

shell脚本可以算是一种简易的编程语言了,脚本中的循环也是不能缺少的。常用到的循环有for循环和while循环。

for循环

语法:for 变量名 in 循环的条件; do

 command

done 


案例1

计算1到100所有数字的和。


1 编写脚本

先把1-100的数字循环打印出来

[root@AliKvn shell]# vim sh-for1.sh
#!/bin/bash
for i in `seq 1 100 `
do
 echo $i
done

[root@AliKvn shell]# sh sh-for1.sh 
1
2
3
.
.
.
.
98
99
100


有了数字之后,后续再做条件:加法运算(sum值)

继续编写脚本

 #!/bin/bash

sum=0

for i in `seq 1 100`

do

    sum=$[$sum+$i]

done

echo $sum


解释:

 #!/bin/bash                 

sum=0                        sum值等于0  

for i in `seq 1 100`         1循环到100

do                           

    sum=$[$sum+$i]         加法运算,sum的值等于变量$sum+变量$i(循环的数值),循环相加      

done                     结束for循环

echo $sum             输出总和结果


执行结果

[root@AliKvn shell]# sh sh-for1.sh

5050

执行过程

[root@AliKvn shell]# sh -x sh-for1.sh 

+ sum=0                        sum=0

++ seq 1 100                   开始1-100循环        

+ for i in '`seq 1 100 `'      第一次循环 i=1,根据条件sum=$[$sum+$i],所以sum=0+1=1 

+ sum=1                        输出sum=1 

+ for i in '`seq 1 100 `'      第二次循环 i=2, 根据条件sum=$[$sum+$i],所以sum=1+2=3     

+ sum=3                        输出sum=3   

+ for i in '`seq 1 100 `'                           

+ sum=6                           

+ for i in '`seq 1 100 `'                           

+ sum=10       

.

.

.

+ for i in '`seq 1 100 `'

+ sum=4950                  

+ for i in '`seq 1 100 `'      第100次循环,i=100,根据条件sum=$[$sum+$i],所以sum=4950+100=5050

+ sum=5050                     输出sum=5050


这样写可以更直观些

[root@AliKvn shell]# !vim
vim sh-for1.sh 
#!/bin/bash
sum=0
for i in `seq 1 100 `
do
        echo "$sum+$i"
        sum=$[$sum+$i]
        echo $sum
done
        echo $sum
        
[root@AliKvn shell]# sh  sh-for1.sh 
0+1
1
1+2
3
3+3
6
.
.
.
4753+98
4851
4851+99
4950
4950+100
5050
5050



for循环案例2

 文件列表循环

编写脚本


 #!/bin/bash
cd /etc/
for a in `ls /etc/`
do
    if [ -d $a ]
    then
       ls -d $a
    fi
done

循环条件还可以引用系统的执行结果,例如ls命令

1 编写脚本

[root@AliKvn shell]# !vim
vim sh-for-ls.sh
#!/bin/bash
cd /root/shell
for f in `ls`
do
  echo $f
done


2 执行过程

[root@AliKvn shell]# sh -x  sh-for-ls.sh
+ cd /root/shell
++ ls
+ for f in '`ls`'
+ echo 01.sh
01.sh
+ for f in '`ls`'
+ echo file-d.sh
file-d.sh
+ for f in '`ls`'
+ echo file-f.sh
file-f.sh
+ for f in '`ls`'
+ echo if1.sh
if1.sh
+ for f in '`ls`'
+ echo if2.sh
if2.sh
+ for f in '`ls`'
+ echo if3.sh
if3.sh
+ for f in '`ls`'
+ echo sh-case-test.sh
sh-case-test.sh
+ for f in '`ls`'
+ echo shell20-7.sh
shell20-7.sh
+ for f in '`ls`'
+ echo sh-for1.sh
sh-for1.sh
+ for f in '`ls`'
+ echo sh-for-ls.sh
sh-for-ls.sh


3 执行结果

[root@AliKvn shell]# sh sh-for-ls.sh
01.sh
file-d.sh
file-f.sh
if1.sh
if2.sh
if3.sh
sh-case-test.sh
shell20-7.sh
sh-for1.sh
sh-for-ls.sh


小知识点,其实他们的输出都一样,只是遍历的过程不同

[root@AliKvn shell]# for i in `seq 1 3`; do echo $i; done
1
2
3
[root@AliKvn shell]# seq 1 3
1
2
3
[root@AliKvn shell]# for i in 1 2 3 ; do echo $i ; done
1
2
3


猜你喜欢

转载自blog.51cto.com/13578154/2122457