Linux-centos6.5-(第十一篇)shell循环=》while 循环| shell until 循环||shell for 循环|| Shell select in循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LaoYang_110/article/details/89389028

目录

 

while 循环

shell until 循环

shell  for 循环

for ((exp1; exp2; exp3)) 风格

for in 风格

Shell select in循环


shell脚本部分参照:Linux Shell脚本学习指南http://c.biancheng.net/shell/

进行学习,过程中对脚本进行编写运行,部分脚本粘贴出执行结果。

while 循环

while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。

 

Shell while 循环的用法如下:

while condition

do

    statements

done

 

condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),do和done都是 Shell 中的关键字。

 

while 循环的执行流程为:

先对 condition 进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。

每一次执行到 done 的时候都会重新判断 condition 是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。

如果一开始 condition 就不成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

 

注意,在 while 循环体中必须有相应的语句使得 condition 越来越趋近于“不成立”,只有这样才能最终退出循环,否则 while 就成了死循环,会一直执行下去,永无休止。

案例:

#!/bin/bash

#dev by yjh

#while 的使用

printf "请输入极小值"

read m

printf "输入极大值"

read n

sum=0

while ((m<n))

do

         ((sum += m))

        ((m++))

done

echo "the sum is : $sum"

案例:累加器
#!/bin/bash

#dev by yjh

#while 的使用 "

echo "输入需要累加的数据,直累加到按Ctrl+D退出"

sum=0

while read n

do

         ((sum += n))

      

done

echo "the sum is : $sum"

shell until 循环

当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。

 

until 的使用场景很少,一般使用 while 即可。

 

Shell until 循环的用法如下:

until condition

do

    statements

done

 

condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),do和done都是 Shell 中的关键字。

 

until 循环的执行流程为:

先对 condition 进行判断,如果该条件不成立,就进入循环,执行 until 循环体中的语句(do 和 done 之间的语句),这样就完成了一次循环。

每一次执行到 done 的时候都会重新判断 condition 是否成立,如果不成立,就进入下一次循环,继续执行循环体中的语句,如果成立,就结束整个 until 循环,执行 done 后面的其它 Shell 代码。

如果一开始 condition 就成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

 

注意,在 until 循环体中必须有相应的语句使得 condition 越来越趋近于“成立”,只有这样才能最终退出循环,否则 until 就成了死循环,会一直执行下去,永无休止。

案例:

#!/bin/bash

#dev by yjh

#desc:until循环使用方式:先执行,再执行,在判断,再执行的过程。

echo "输入累积数据极小值"

read min

echo "输入累积数据的极大值"

read max

csum=1

until ((min > max)) #执行do done间的命令,直到满足该条件才退出

do

   # echo "求积过程中${min}" 为了调试,显示执行过程用

    ((csum = csum *  min ))

    ((min++))

done

echo "csum = ${csum}"

shell  for 循环

for ((exp1; exp2; exp3)) 风格

for((exp1; exp2; exp3))
do
    statements
done

几点说明:

exp1、exp2、exp3 是三个表达式,其中 exp2 是判断条件,for 循环根据 exp2 的结果来决定是否继续下一次循环;

statements 是循环体语句,可以有一条,也可以有多条;

do 和 done 是 Shell 中的关键字。


它的运行过程为:
1) 先执行 exp1。

2) 再执行 exp2,如果它的判断结果是成立的,则执行循环体中的语句,否则结束整个 for 循环。

3) 执行完循环体后再执行 exp3。

4) 重复执行步骤 2) 和 3),直到 exp2 的判断结果不成立,就结束循环。

上面的步骤中,2) 和 3) 合并在一起算作一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。

exp1 仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。exp2 一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。exp3 很多情况下是一个带有自增或自减运算的表达式,以使循环条件逐渐变得“不成立”。

for 循环的执行过程可用下图表示:
 

案例:

#!/bin/bash

#dev by yjh

# 测试shell脚本的for循环

echo  "请输入for循环执行次数"

read times

sum=0

for ((i=0; i<${times}; i++))

do

 echo "执行第${i}次"

 ((sum+=${i}))

done

echo "总求和为${sum}"

exit 0

for in 风格

for in 循环的用法如下:

for variable in value_list

do

    statements

done

variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字。

每次循环都会从 value_list 中取出一个值赋给变量 variable,然后进入循环体(do 和 done 之间的部分),执行循环体中的 statements。直到取完 value_list 中的所有值,循环就结束了。

  1. 对 value_list 的说明

1) 直接给出具体的值

可以在 in 关键字后面直接给出具体的值,多个值之间以空格分隔,比如1 2 3 4 5、"abc" "390" "tom"等。

2) 给出一个取值范围

给出一个取值范围的具体格式为:

{start..end}

start 表示起始值,end 表示终止值;注意中间用两个点号相连,而不是三个点号。这种形式只支持数字和字母

例如,计算从 1 加到 100 的和:

#!/bin/bash

#dev by yjh

#for in 应用值范围方式{start..end}

echo “求1到100的和”

sum=0

for i in {1..100}

do

 ((sum+=i))

done

echo “1到100的和为${sum}”

 

3) 使用命令的执行结果

使用反引号``或者$()都可以取得命令的执行结果,我们在《Shell变量》一节中已经进行了详细讲解,并对比了两者的优缺点。本节我们使用$()这种形式,因为它不容易产生混淆。

案例:

#!/bin/bash

#dev by yjh

#for in 应用命令结果$(exp)

echo "当前文件夹中shell脚本有"

for fileName in $(ls *.sh)

do

 echo "${fileName}"

done

exit 0

 

4) 使用 Shell 通配符

Shell 通配符可以认为是一种精简化的正则表达式,通常用来匹配目录或者文件。

案例:

#!/bin/bash

#dev by yjh

#for in 通配符

echo "当前文件夹中shell脚本有"

for fileName in  *.sh

do

 echo "${fileName}"

done

exit 0

5) 使用特殊变量

Shell 中有多个特殊的变量,例如 $#、$*、$@、$?、$$ 等

案例:

#!/bin/bash

#dev by yjh

#for in 通配符

for var in  $*

do

 echo "${var}"

done

exit 0

Shell select in循环

Shell select in 循环的用法如下:

select variable in value_list

do

    statements

done

案例:

#!/bin/bash

#dev by yjh

#select 的使用方法

echo "选择操作系统"

select os in "linux" "windows" "mac"

do

   echo "操作系统为${os}"

done

exit 0

#ctrl+d 退出

案例2:

#!/bin/bash

#dev by yjh

#select 的使用方法

echo "选择操作系统"

select os in "linux" "windows" "mac"

do

  case ${os} in

  linux)

   echo "操作系统为${os}"

   break

   ;;

  windows)

    echo "操作系统是${os}"

   break

   ;;

   mac)

    echo "操作系统为¥{os}"

    break

   ;;

   *)

    echo "不在选项内${os}"

   ;;

   esac

done

exit 0

 

猜你喜欢

转载自blog.csdn.net/LaoYang_110/article/details/89389028
今日推荐