Shell编程循环语句与函数详解和数组

本文详细介绍了Shell编程中的循环语句,包括for、while和until循环的使用,以及Shell函数的定义、返回值、参数传递、变量作用域和递归。此外,还讲解了数组的定义、操作方法,如获取数据列表、长度、下标值以及数组的切片、替换、删除和追加等。文章以实例展示了循环和数组的应用,如打印形状、九九乘法表、冒泡排序等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

shell循环语句

for循环语句

while循环语句结构(迭代)

until 循环语句结构

Shell函数

Shell函数定义

函数的返回值

函数的传参数

函数变量的作用范围

函数的递归

数组

shell数组的定义

定义属组的方法

数组的数据类型

获取数组的数据列表

获取数组长度

获取数组下标对应的值

数组切片(数组下标从0开始,不包括后面的下标数)

数组的替换(根据下标来操作)

数组删除和指定下标的值删除

数组追加元素

冒泡排序


shell循环语句

echo命令

选项:

-e  表示输出反斜杠转义符

-n 表示不换行输出

\n 输出换行

\t 横向制表符

\b 表示退格不显示前一个字符

\c 抑制更多的输出或不换行

例:

分区 

循环的含义

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

循环次数事先已知

循环次数事先未知

常见的循环的命令:for, while, until

for循环语句

用法:

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

for循环经常使用在已经知道要进行多少次循环的场景

格式:

for  变量名  in  取值列表
do
    命令序列
done

例:

用for循环打印三角形

用for循环打印矩形

用for循环打印九九乘法表

用for循环求和

用for批量创建用户

用for循环测试主机在不在线

while循环语句结构(迭代)

用法:

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

常在不知道范围的时候成立

格式:

while 条件测试操作
do
    命令序列
done

 例:猜商品价格

例:

 批量创建用户并修改密码

until 循环语句结构

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

格式:

until 条件测试操作
do
 命令序列
done

例:

0-100的奇数和

0-100的偶数和

Shell函数

将一些会经常使用的脚本定义成函数

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

可方便重复使用命令序列

Shell函数定义

[function] 函数名(){

命令序列

[return x]

}

函数名() {

}

例:

函数和调用函数

函数的返回值

获取函数的返回值2种

1.return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码

退出码必须是0-255,超出的值将为除以256取余

2.在函数体中用echo输出,并在函数体外使用变量赋值后,可再进一步对函数的返回值操作

函数的传参数

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

函数变量的作用范围

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

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

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

例 1

例 2

函数的递归

fact函数调用函数自己本身

格式:

fact (){

}

fact

例:

数组

shell数组的定义

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)

数组元素的下标由 0 开始。

Shell 数组用括号来表示,元素用"空格"符号分割开

在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}

定义属组的方法

方法一:数组名=(value1 value2 valuen3...)

方法二:数组名=([0]=value0 [1]=value0 [2]=value0 ...)

方法三:

数组名[0]="value"

数组名[1]="value"

数组名[2]="value

数组的数据类型

数值类型

字符类型:使用" "或’ '定义

"a b c d"                #字符串

"a" "b" "c" "d"        #列表

("a" "b" "c" "d")      #数组

获取数组的数据列表

echo ${数组名[*]}
echo ${数组名[@]}

例:

获取数组长度

echo ${#数组名[*]} 
echo ${#数组名[@]} 

例:

获取数组下标对应的值

数组名=(元素0  元素1  元素2  ……)                    定义数组
echo ${数组名[索引值]}                            输出数组索引值对应的元素,索引值为从0开始

例:

数组切片(数组下标从0开始,不包括后面的下标数)

数组的替换(根据下标来操作)

${数组名[0]/旧字符/新字符}         

#会替换所有元素上能匹配到的字符,但是这是临时替换不会影响原有数组,可通过重新赋值实现替换原有数组

数组删除和指定下标的值删除

unset数组名[n]                                     #删除某一个元素
unset数组名[*]或unset数组名[@]           #删除整个数组

数组追加元素

数组名+=(变量1 变量2 ...)

使用下标追加元素:数组名【下标】=变量

数组名[数组长度]=元素值

冒泡排序

#/bin/bash
score=(55 23 45 32)
for((i=1;i<{$#score[*]};i++))

#${#score[*]}为数组的元素的个数
do
  for((j=0;j<${#score[*]}-$i;j++))  

#${#score[*]}为数组的元素的个数
  do
    if[ ${score[$j]} -gt ${score[((j-1))]} ]
    then
     temp=${score[j+1]}
      scorel[((j+1))]=${score[$j]}
      score[$j]=$temp
    fi
  done
done
echo ${score[*]}
[root@localhost opt]# sh maopao.sh
23 32 45 55

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值