一、循环语句
1、for循环语句
(1)格式
for 变量名 in 取值列表
do
命令序列
done
(2)for循环流程图
(3)示例
示例1:使用for循环编写简单的脚本显示出30以内的2的倍数
示例2:使用for循环编写简单的脚本实现可以批量创建用户的功能
进阶版:从文档中调用用户的名称创建用户
(1)先创建一个文档输入员工的姓名
编写脚本
示例3、使用for循环实现根据IP地址列表检查主机的状态
创建文件添加ip地址
脚本
示例4、使用for循环实现一个用户输错5次密码提示有误并退出登录的简单脚本
示例5:使用for循环实现一个抽奖的简单shell脚本
创建一个文本
脚本
示例六:for循环显示简单显示脚本
2、while循环
(1)while语句结构
while 条件测试操作
do
命令序列
done
列
while 未猜中正确价格
do
反复猜测商品价格
done
(2)while语句运行流程图
(3)示例
示例1:实现简单的while循环脚本
示例2:用while语句实现过滤出4的倍数并显示其他的数
示例3:用while语句实现循环监控Apache的运行状态
示例4:用while语句实现猜数字小游戏脚本
示例5:用while语句实现批量创建用户并设置初始密码![](https://img-blog.csdnimg.cn/446bdface37940f3a676146602b22f30.png)
示例6:用while语句实现监控系统资源并邮件警告(具体设置关联QQ邮件看前面博客)
示例7:用while语句实现简单的军火商店购物
3、until语句
(1)重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
(2)until循环流程图
(3)示例
示例1:用until语句计算1-101的和值
二、Shell函数
将命令序列按格式写在一起
可方便重复使用命令序列
1、函数基本格式
[function] 函数名(){
命令序列
[return x] #使用return或exit可以显示的结束函数
}
或者
#也可以省略掉[function],它表示该函数的功能
函数名() { #函数名后面()是没有内容的
命令序列 #我们执行的命令内容放在{}里面
}
- 函数定义完之后并不会自动执行,需要调用才行
- 好处在于可以写一段功能代码作为函数,有需要就直接调用定义的时候哪怕出现语法错误也没关系,不调用就不会报错
- 当然我们写函数最终目的还是为了调用,为了实现某个功能块。
2、函数返回值
return表示推出函数返回一个退出值,脚本中可以用$?变量显示该值使用原则
函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
退出状态码必须是0-255,超出时将为256取余
3、函数的作用函数
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
4、函数的参数
参数的用法
函数名称 参数1 参数2 参数3.......
参数的表示方法
$1 $2 $3 $4....${10}${11}
5、函数应用示例
(1)示例1简单函数调用
(2)示例2用函数实现一键安装yum源仓库的shell脚本
#!/bin/bash
function backuprepo {
cd /etc/yum.repos.d
mkdir repo.bak
mv *.repo repo.bak
mount /dev/sr0 /mnt > /dev/null
}
makelocalrepo(){
echo '[local]
name = local
baseurl=file:///mnt
enabled=1
gpgcheck=0' > local.repo
}
uselocalrepo (){
yum clean all > /dev/null
yum makecache > /dev/null
yum install -y httpd > /dev/null
}
#==========mian============
backuprepo
makelocalrepo
uselocalrepo
(3)示例3用函数实现计算两数之和的脚本
(4)示例4 local的用法
函数内部变量通过local来实现
通过定义myfun函数,在其内部设置局部变量
函数内部和外部分别赋值,进行结果验证
(5)示例5 调用函数实现删除文件操作
(6)示例6 调用函数实现判断文档是否为文件
6、递归函数
递归函数就是调用自己本身的函数
(1)示例1:用递归函数实现能计算阶乘的脚本
三、数组的运用
1、数组的定义
数组时存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
2、数组的分类
普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
3、数组的定义方式
(30 20 10 888 992 12)
0 1 2 3 4 5 #为数组的索引只能是整数
第一种定义方式:直接把要加入数组的元素用小括号括起来,中间用空格分开
num=( 1 2 3 4 )
$(#num) 显示字符串长度
数组名=(value0 value1 value2)
第二种定义方式:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续
num=([0]=55 [1]=34 [2]=38 [3]=29)
数组名=([0]=value [1] =value [2] =value...)
第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组
list="11 22 33 44"
num=($list)
列表名="value0 value1 value2..."
数组名=($列表名)
第四种:根据下标定义
数组名[0]="11"
数组名[0]="22"
数组名[0]="33"
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
4、示例
(1)显示字符串长度
(2)套用数组中的指定数组
(3)脚本简单的数组写法
(4)示例4:冒泡排序
代码