python数组循环语句_shell脚本--循环语句、函数和数组(概念及实例)

shell脚本–循环语句、函数和数组

一、循环语句

1.1for语句的结构

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

●for循环:指定次数循环;遍历:把集合中的每个元素挨个读取一遍

结构一:遍历集合

for 变量名 in 取值列表

do

命令序列

done

结构二:指定次数

for ((i=1;i<=5;i++))

do

命令序列

done

1.2for语句应用实例

实例1:

批量添加用户

用户名存放在user.txt文件中,每行一个

初始密码均设为123456

实例2:

根据IP地址检查主机状态

IP地址存放在ipadds.txt文件中,每行一个

使用ping命令检测各主机的连通性

1.3for语句中使用(( ))

使用以下符号需要先加let或者两个小括号((sum+=$i))

符号后面可以跟整数,也可以跟调用的变量

++ 自身变量加1 – 自身变量减1

+=5自身变量加5-=5 自身变量减5

*=5 自身变量乘5 /=5 自身变量除5

%=5 自身变量取余5

实例1:

在屏幕上输出1-10(三种方式)

实例2:

在屏幕上输出1-10;且输出循环结束后的数字

实例3:

将1-100中的奇数进行求和(四种语法)

注意:sum=0必须放在循环语句的上面(放在do下面每次sum都是从0开始)

1.4while语句的结构

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

注意:

if条件成立只执行一次,而while成立了会反复执行,直到不成立

for可以先定义一个集合,再通过临时变量进行遍历

实例1:

批量创建5个用户:

用户名以stu开头,按数字进行编号,即stu1、stu2……

初始密码均为123123

实例2:

输出1-100不能被3整除的数

1.5双重循环

外层循环控制行;内层循环控制列

外层循环执行一次,内层循环执行一遍

打印一个直角三角形

echo -n ##不换行输出

echo -e ##支持加反斜线转义的字符(例如 \t 是水平制表符)

实例:

直角三角形

九九乘法口诀表

打印等腰三角形

1.6until语句

重复测试某个条件,只要条件不成立则反复执行;条件成立则退出循环

until 条件测试操作

do

命令序列

done

实例:

为指定用户发送在线消息

若用户不在线,则每6秒试一次,直至用户登录系统后再发送消息

用户名与消息通过位置参数传递给脚本

需求分析:

1.位置参数个数大于1;2.姓名是否属于系统用户

3.用户是否在线 until who 4.发送消息 echo “消息” | write 用户名

二、shell函数

2.1函数的定义

●将命令序列按格式写在一起

●可方便重复使用命令序列

●shell函数定义

[ function ] 函数名(){

命令序列

[return x] ##使用return或exit可以显式地结束函数

}

return:可以返回状态码或者数据(echo输出)

exit:只返回状态码

函数体外调用状态码或者值时:

return返回的是状态码,需要使用$?调用

echo 返回的是值,使用变量调用

传参:指位置变量

实例:

两个数字求和

通过sum(){ }定义函数

使用read命令交互输入两个数并求和

函数写好了要调用它才起作用!!

●调用函数的方法

函数名 [参数1] [参数2]

参数的表示方法:$ 1 $ 2 $ 3 ……$ {10} ${11}

2.2函数的作用范围

●函数在shell脚本中仅在当前shell环境中有效

●shell脚本中变量默认全局有效

●将变量限定在函数内部使用local命令

一旦在函数内通过local来定义变量,只能在函数体内识别

示例:

函数内部变量通过local实现

local定义的函数体内的变量,可以通过函数体外先将函数赋值给一个变量,

再输出这个变量来引用local变量的值

2.3递归函数

●调用自己本身的函数

实例:

递归遍历目录/var/log

通过定义递归函数list_files来实现

第一次循环:

$1 /var/log

$2 一个空格

第二次循环:

$1=$1/ $m /var/log/anaconda

$2=一个空格+$2 即两个空格

三、shell数组

3.1数组概述

数组:相同数据类型的集合 (例如整型、浮点型、字符串)

在内存中开辟了连续的空间

配合循环使用

举例:数组arr=(11 22 33 44)

数组名称:arr

数组元素:11,22,33,44

数组长度:4

数组下标:0 1 2 3(从0开始,例如33元素的下标值是2)

如何调用数组?

下面两种写法支持调用数组中所有或者单个元素

下面这种写法只支持调用数组中的所有元素,不支持单个元素

3.2数组定义方法

方法一:arr=(11 22 33 44)

方法二:arr=([0]=11 [1]=22 [2]=33 [3]=44)

方法三:list="11 22 33 44"

arr=($list)

方法四:arr[0]=11

arr[1]=22

arr[2]=33

方法四可用来替换掉数组中的某一个元素

数组包括的数据类型:

●数值类型

●字符类型

使用“”或‘’定义

3.3创建数组实例

需求:创建一个1-100的数组

需求:创建一个存放(1-100)中奇数的数组

需求:创建可以自由添加自己想要的元素的数组

3.4常见数组操作

●获取数组长度:

${#数组名[*]}

●读取某下标赋值:

${数组名[下标]}

●数组遍历:

for v in ${arr[@]}

do

echo "$v"

done

需求1:将班级中分数不满60分的加到60分

需求2:将最低分输出

需求2:将数组内的数字从小到大排序

使用冒泡排序

首先得了解a和b两个变量如何对调变量值:

a=10

b=20

方法(借助一个容器):

tmp=$ a

a=$ b

b=$tmp

●数组切片

${数组名[@]:起始位置:长度} 中间冒号隔开!!

●数组的替换 重点!!替换元素后再赋值给自己

${数组名[*]/查找字符/替换字符}

●数组删除

unset

注意!!

删除单个元素时,下标不会变,但是数组长度会减一

需求:删除数组中小于60的元素,将剩下的元素输出

四、shell脚本调试

●echo命令 ##常用

●bash命令

命令语法

sh [-nvx] 脚本名

●set命令

set -x:开启调节模式

set +x:关闭调节模式

检测结果如下,可以看到脚本执行的详细过程

[root@localhost ~]# sh -vx 60.sh

#!/bin/bash

arr=(45 85 65 25 78 52)

+ arr=(45 85 65 25 78 52)

i=0

+ i=0

set -x

+ set -x

for v in ${arr[*]}

do

if [ $v -lt 60 ];then

unset arr[$i]

fi

let i++

done

+ for v in '${arr[*]}'

+ '[' 45 -lt 60 ']'

+ unset 'arr[0]'

+ let i++

+ for v in '${arr[*]}'

+ '[' 85 -lt 60 ']'

+ let i++

+ for v in '${arr[*]}'

+ '[' 65 -lt 60 ']'

+ let i++

+ for v in '${arr[*]}'

+ '[' 25 -lt 60 ']'

+ unset 'arr[3]'

+ let i++

+ for v in '${arr[*]}'

+ '[' 78 -lt 60 ']'

+ let i++

+ for v in '${arr[*]}'

+ '[' 52 -lt 60 ']'

+ unset 'arr[5]'

+ let i++

set +x

+ set +x

echo ${arr[@]}

85 65 78

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值