Shell编程之循环语句与函数

目录

引言:

一、for循环

1.1 for语句结构

1.2 for循环语法

1.3 for语句案例

1.3.1显示打印输出1-5

1.3.2调用显示i的值

​1.3.3输出0到20之间的偶数和奇数

1.3.4不带列表循环执行时由用户指定参数和参数的个数决定的

1.3.5 批量创建用户

1.3.6根据ip地址列表检查主机状态

1.3.7判断密码输入是否正确!

1.3.8 幸运会员抽奖

​ 1.4类C风格循环

1.4.1 显示输出1-5

1.4.2 嵌套循环星星的格式

1.4.3  九九乘法表

1.4.4 随机生成密码(要求复杂性)

二.while语句

2.1语法结构

2.2while循环案例

2.2.1 打印1-5

2.2.2 输出1到100能被3整除的数字

​2.2.3 开启apache服务

2.2.4 猜数字

2.2.5 break 和 continue的区别

2.2.6 猜商品价格

2.2.7 监控系统资源中的内存和硬盘空间

2.2.8 商店购物

三. until 循环语句结构 

3.1  计算0-50的和

四、函数

1.shell函数定义

2.函数基本格式

3.函数返回值

4.函数应用示例

4.1函数调用

4.2函数调用yum本地仓库

4.3 return的用法

5.传参

5.1简单传参

5.2 列出目录文件列表,目录用颜色表示(蓝色),文件显示层级关系

5.3 阶乘 

​5.4求和

五、数组的使用方法 

1.定义

2.数组的分类

3.数组的定义方式

4.冒泡排序

六、总结 

引言:

脚本执行任务的时候总会遇到需要重复执行的时候,为了节省资源,除了计划任务,我们还可以使用脚本来完成,接下来就是Shell脚本中的三种循环。除此之外,函数也会经常用到,可以更加简洁的编写脚本。

一、for循环

for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的。

1.1 for语句结构

读取不同的变量值,用来逐个执行同一组命令

for 变量名 in 取值列表
do                   
   命令序列
done

1.2 for循环语法

语法结构

(1)列表循环

(2)不带列表循环

(3)类C风格的for循环

1.3 for语句案例

for 变量名 in {list}

do
    command
done

for i in {a..c}
do
        echo $i
done 

for i in {1..5}    //{}里面不识别变量
do
        echo $i
done

1.3.1显示打印输出1-5

for i in `seq 5`   //seq 5=1、2、3、4、5序列
do      
        echo $i
done

 

a=10
for i in `seq $a`    //seq可以引用变量
do
        echo $i
done

1.3.2调用显示i的值

1.3.3输出0到20之间的偶数和奇数

花括号{}和seq在for循环的应用:
for i in {1…50…2} 1-50的奇数
for i in {2…50…2} 1-50的偶数
for i in {10…1} 1-10倒序排列
for i in $(seq 10) 1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长
for i in $(seq 0 2 10) 1-10的偶数,中间为步长

 

1.3.4不带列表循环执行时由用户指定参数和参数的个数决定的

for 变量名 
do
    command
done

[root@local ~]# . /c.sh   //没有给脚本传参所以执行了没有结果

[root@local ~]# . /c.sh a   //把a赋值给变量i,i有值了它就开始执行do..done了

hello

1.3.5 批量创建用户

 1.3.6根据ip地址列表检查主机状态

1.3.7判断密码输入是否正确!

1.3.8 幸运会员抽奖

 1.4类C风格循环

for ((expr1;expr2;expr3))
do
       command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

1.4.1 显示输出1-5

1.4.2 嵌套循环星星的格式

1.4.3  九九乘法表

 倒三角

1.4.4 随机生成密码(要求复杂性)

二.while语句

2.1语法结构

while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
先定义一个变量
while 表达式(条件)
do
    循环语句命令
done

2.2while循环案例

2.2.1 打印1-5

 2.2.2 输出1到100能被3整除的数字

 2.2.3 开启apache服务

 2.2.4 猜数字

2.2.5 break 和 continue的区别

continue 语句和 break 语句的区别是,continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立,并执行当前循环之后的语句。而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用。

continue

break

 

2.2.6 猜商品价格

 2.2.7 监控系统资源中的内存和硬盘空间

#!/bin/bash
disk_size=$( df / |awk '/\//{print $4 }') #硬盘的可用空间
Mem_size=$(free | awk '/Mem/{print $4}')  #分区的可用空间
while
do
  if [ $disk_size -le 2560000 -a $Mem_size -le 102400 ];then
       mail -s Warning root <<EOF
       内存和硬盘空间不足请尽快处理!
EOF

#EOF是免交互模式,直接把东西传给邮箱进行警告#注意EOF必须要顶格写才能成功
  fi
done

 2.2.8 商店购物

三. until 循环语句结构 

用法: 重复测试某个条件,只要条件不成立则反复执行

只要while后面的命令退出状态为0,while循环就一直执行下去,until命令与while命令相似,唯一的区别在于,只要until后面的命令退出不为0,until循环就一直执行下去,也就是说,使用until语句重复执行一段代码直到条件为真为止,与while类似

格式:
until 条件测试操作
do
 命令序列
done

3.1  计算0-50的和

四、函数

1.shell函数定义

  • 将命令序列按格式写在一起
  • 可方便重复使用命令序列

2.函数基本格式

[function] 函数名(){
  命令序列
[return x]                           #使用return或exit可以显示的结束函数 
}


或者

                                     #也可以省略掉[function],它表示该函数的功能

函数名() {                            #函数名后面()是没有内容的
  命令序列                            #我们执行的命令内容放在{}里面
}
  • 函数定义完之后并不会自动执行,需要调用才行
  • 好处在于可以写一段功能代码作为函数,有需要就直接调用定义的时候哪怕出现语法错误也没关系,不调用就不会报错
  • 当然我们写函数最终目的还是为了调用,为了实现某个功能块。

3.函数返回值

return表示退出函数并返回一个退出值,脚本中可以用$? 变量显示该值使用原则

  • 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
  • 退出状态码必须是0~255,超出时值将为256取余

4.函数应用示例

4.1函数调用

 

4.2函数调用yum本地仓库

4.3 return的用法

 return可以定义非零$?也表示正确

 return返回值测试条件语句的正确性

5.传参

参数的用法

函数名称、参数1、参数2、参数3 ..........

参数的表示方法

●$! $2 $3 ......${10} ${11} .....

5.1简单传参

 

5.2 列出目录文件列表,目录用颜色表示(蓝色),文件显示层级关系

5.3 阶乘 

方法一:

 方法二:(递归方式)

 5.4求和

五、数组的使用方法 

1.定义

数组的存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用

2.数组的分类

普通数组:不需要声明直接定义,下标索引只能是整数

关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串

3.数组的定义方式

(30 20 10 60 50 40)

    0    1   2   3  4    5

第一种:直接把要加入数组的元素用小括号括起来,中间空格分开

num=(11 22 33 44)

${#num}显示字符串长度

数组名=(value0 value1 value2)

第二种:直接把要加入数组的元素用小括号括起来,中间用空格分开

num=([0]=55 [1]=66 [2]=77 [4]=88)

数组名=([0]=value [1]=value [2]=value [4]=value...)

第三种:先把要记入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组

list=“11 12 13 14”

num=($list)

 

4.冒泡排序

数组排序算法:冒泡排序
类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

基本思想:
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。

score=(77 13 91 56 88)
------------第一轮------------
77 13 91 56 88 第一次对比 数组长度-1 第一轮比较往后值, 最好以为最大值91 
13 77 91 56 88 第二次对比 
13 77 91 56 88 第三次对比 
13 77 56 91 88 第四次对比 
13 77 56 88 91
------------第二轮------------
13 77 56 88 91 第一次对比 数组长度-1第二轮比较往后,第二大的数字88 
13 77 56 88 91 第二次对比 
13 56 77 88 91 第三次对比 
13 56 77 88 91
------------第三轮-----------
13 56 77 88 91 第一次对比 数组长度-1第三轮比较往后,第三大的数字77 
13 56 77 88 91 第二次对比 
13 56 77 88 91
------------第四轮-----------
13 56 77 88 91 第一次对比 数组长度-1第四轮比较往后,第四大的数字56 
13 56 77 88 91

 案例:

六、总结 

1.for语句的结构

2.while语句的结构

3.until语句的结构

4.Shell函数定义方法

5.数组使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值