您的位置:首页 > 运维架构 > Shell

shell学习二十九天----循环

2015-06-27 15:28 453 查看
循环

bash shell中主要提供了三种循环:for,while,until

for循环

for循环的运作方式是将串行的元素取出,依次放入指定的变量中,然后重复执行在do和done之间的命令,知道所有元素取尽为止.

其中,串行是一些字符串的组合,彼此使用$IFS所定义的分隔符(如空格符)隔开,这些字符串成为为字段.

语法:

for 变量 in 串行
//将串行中的字段迭代放入变量中

do

执行命令 //重复执行,知道串行中的每一个字段处理过为止.

done

案例: 用for循环在tmp目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录

#!/bin/bash

mkdir hahaha

for k in $(seq 1 10)

do

mkdir /tmp/hahaha/aaa${k}

cd /tmp/hahaha/aaa${k}

for j in $(seq 1 10)

do

mkdir bbb${j}

cd /tmp/hahaha/aaa${k}

done

cd ..

done

说明:

行3,seq 用于产生从某个数到另外一个数之间的所有整数。

行5,在tmp目录下创建文件夹。

行7,在使用一个for循环创建文件夹



案例二: 列出var目录下各子目录占用磁盘空间的大小。

#!/bin/bash

dir="/var"

cd $dir

for k in $(ls $dir)

do

if [ -d $k ]

then

du -sh $k

fi

done



说明:

行4,对/var目录中每一个文件,进行for循环处理。

行6,如果/var下的文件是目录,则使用du -sh计算该目录占用磁盘空间的大小。



while循环

语法:

while 条件测试

do

执行命令

done

说明:

行1 ,首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环

行3,执行命令区域,这些命令中,应该要有改变天剑测试的命令,这样,才有机会在有限步骤后结束之星while循环.

行4,回到行1,执行while命令.

案例:求1到100的和

#!/bin/bash

sum=0

i=1

while [ "$i" -le "100" ]

do

sum=$(( $sum+$i ))

i=$(( $i+1 ))

done

echo "sum(1-100):" $sum



until循环

语法:

until条件测试

do

执行命令

done

说明:

行1,如果条件测试结果为假(传回值不为0),则进入循环

行3,执行命令区域.这些命令中,应该有改变条件测试的内容,这样才不会出现死循环.

行4,会到行1,执行until命令

案例:计算1-100的和

#!/bin/bash

sum=0

i=1

until ((i>100))

do

sum=$(( $sum+$i ))

i=$(( $i+1 ))

done

echo $sum



分析:只要条件测试未超过100,就进入循环,

其他的和while类似.



其实for循环还有一种方式:

for((初始值; 条件; 执行步长))

do 程序段

done

注意细节:for((初始值; 条件; 执行步长))里面的预压和c语言一样了,但是一点不同双括号。



for循环案例:列出指定目录下的所有文件

#!bin/bash

read -p "Please enter the dir name:" dirname

for file in $(ls $dirname)

do

echo $file

done

复习一下seq命令

seq 选项 参数

主要选项:

-s 指定分隔符,默认是换行

-w 等位补全,就是宽度相等,不足的前面补 0

-f 格式化输出,就是指定打印的格式

案例:

使用命令:seq 2

输出:

1

2

使用seq -s “--” 2

输出 :1--2

案例:

[root@localhost tmp]# seq -f %05g 1 10

00001

00002

00003

00004

00005

00006

00007

00008

00009

00010
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: