目录
一、for循环语句
用法:
读取不同的变量值,用来逐个执行同一组命令
格式:
for 变量名 in 取值列表
do
命令序列
done

示例1: 循环出0到10之间的整数
法一:

法二:

示例2:for i in *;do echo $i;done查看当前目录下所有内容

示例3:求1..10奇数和


示例4:批量创建相同用户


示例5:批量创建不同用户


批量删除用户

示例6:查看主机是否运行



示例7:输入三次密码,三次错误后提示输入有误


示例8:随机抽取



循环嵌套:
示例1:


示例2:三角形显示


示例3: 九九乘法表
法一:


法二:


法三:


倒三角:九九乘法表
法一:

二、while循环语句结构
用法:
重复测试某个条件,只要条件成立则反复执行
常在不知道范围的时候成立
格式:
while 条件测试操作
do
命令序列
done

示例1:
打印1-5


循环终止是因为i=6不满足条件,得出最后值为6
示例2:100以内不能被3整除

示例3: 猜数字

或

例4 创建测试用户20个

示例5 猜价格,商品价格1000以内
例6 监控系统资源中的内存和硬盘空间
#!/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
fi
done
例7 continue 终止每次循环中的命令,但是不会完成终止命令


例7 5家店铺挑选商品购物,并算出总价


三、until 循环语句结构
用法: 重复测试某个条件,只要条件不成立则反复执行
只要while后面的命令退出状态为0,while循环就一直执行下去,until命令与while命令相似,唯一的区别在于,只要until后面的命令退出不为0,until循环就一直执行下去,也就是说,使用until语句重复执行一段代码直到条件为真为止,与while类似
语法结构示意图

例1 1-50的和为

四、函数
4.1函数的作用
语句块定义成函数约等于别名,定义函数,再引用函数
封装的可重复利用的具有特定功能的代码
4.2 函数的基本格式
[function] 函数名(){
命令序列
[return x] #使用return或exit可以显示的结束函数
}
或者
#也可以省略掉[function],它表示该函数的功能
函数名() { #函数名后面()是没有内容的
命令序列 #我们执行的命令内容放在{}里面
}
函数定义完之后并不会自动执行,需要调用才行
好处在于可以写一段功能代码作为函数,有需要就直接调用定义的时候哪怕出现语法错误也没关系,不调用就不会报错
当然我们写函数最终目的还是为了调用,为了实现某个功能块。
4.3函数注意事项
1.直接写函数中调用
2函数直接写函数名同名函数后一个生效
3.调用函数一定要先定义
4.只要先定义了调用的其他函数定义顺序无关
4.4函数调用的方法
示例1:与顺序无关,只有函数调用才能执行
示例2 :遇到重名时只执行最后一个,函数调用从上往下执行


return 用法


两数相加





4.5函数的返回值
1、return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
2、函数的使用原则
(1)函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
(2)退出状态码必须是0~255,超出时值将为除以256取余。
示例:



4.6函数的传参
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。
示例1:

示例2:


4.7在外部调用函数
在外部调用命令需要先source一下。然后调用函数,再调用函数中的变量
示例1:

示例2:在脚本中调用

4.8函数变量的作用范围
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
示例1:
示例2:

4.9函数的递归
函数调用自己本身的函数
示例:求任意数的阶乘

五、数组
5.1shell数组的定义
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用"空格"符号分割开
在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
5.2定义属组的方法
法一:
数组名=(value1 value2 ... valuen)
[root@localhost ~]#a=(1 2 3 4 5)
[root@localhost ~]#echo ${a[@]}
1 2 3 4 5
法二:
数组名=([0]=value0 [1]=value0 [2]=value0 ...)
[root@localhost ~]#b=([0]=1 [1]=2 [2]=3 [3]=4 [4]=5)
[root@localhost ~]#echo ${b[@]}
1 2 3 4 5
法三:
数组名[0]="value"
数组名[1]="value"
数组名[2]="value
[root@localhost ~]#c[0]=1
[root@localhost ~]#c[1]=2
[root@localhost ~]#c[3]=3
[root@localhost ~]#c[4]=4
[root@localhost ~]#echo ${c[@]}
1 2 3 4
5.3数组的数据类型
数值类型
字符类型:使用" "或’ '定义
示例:
#数组可以是数值型
[root@localhost ~]#a=(1 2 3 4 5);echo ${a[@]}
1 2 3 4 5
#数组可以是混合型
[root@localhost ~]#a=(a 1 2 apple);echo ${a[@]}
a 1 2 apple
5.4获取数组的数据列表
echo ${数组名[*]}
echo ${数组名[@]}

5.5元素切片:
5.6 替换
5.7 删除

5.8 数组排序算法:冒泡排序














