0
点赞
收藏
分享

微信扫一扫

shell编程循环语句、函数、数组

自由情感小屋 2022-05-03 阅读 104
linux

目录

一、for循环语句

 二、while循环语句结构

三、until 循环语句结构

四、函数

4.1函数的作用

4.2 函数的基本格式

4.3函数注意事项

4.4函数调用的方法

​​

4.5函数的返回值

4.6函数的传参

4.7在外部调用函数

4.8函数变量的作用范围

4.9函数的递归

五、数组

5.1shell数组的定义

5.2定义属组的方法

5.3数组的数据类型

5.4获取数组的数据列表

5.5元素切片:​

5.6 替换​

5.7 删除​​

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


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


 

举报

相关推荐

0 条评论