目录
一、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 数组排序算法:冒泡排序

