当前位置:网站首页>shell脚本------函数的格式,传参,变量,递归,数组
shell脚本------函数的格式,传参,变量,递归,数组
2022-08-09 11:42:00 【AKA|布鲁克林欧神仙】
目录
一,shell函数定义
- 将命令序列按格式写在一起,可方便重复使用命令序列
二,格式
1,格式一:
function 函数名 {
命令序列
}
2,格式二:
函数名 () {
命令序列
}
三,函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值。
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0-255.超出时值将为除以256取余
四,函数传参
五,函数变量的作用范围
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
六,递归
七,数组
一,数组的定义
数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
二、数组的分类
普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
三、数组的定义方式
第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开 num=(11 22 33 44)
第二种:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续 num=([0]=55 [1]=66 [2]=77 [4]=88)
第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组 list=“11 12 13 14” num=($list)
第四种:可以把命令的结果用小括号括起来添加到数组,那么数组会以空格或者制表符区分每一个元素 num=(cat /etc/passwd)
[[email protected] ~]# echo ${#num[*]}
111
3.1、数组格式
如:arr=(11 22 33 44)
数组名称:arr
数组元素:11,12,12,14,数组元素默认是以空格分隔的
数组长度:4,有4个元素
数组下标:每个数组元素都有一个下标索引,一般从0开始,33是数组第三个元素,但是它的下标索引是2
3.3、元素删除
元素删除
[[email protected] ~]# unset fruit[0]
[[email protected] ~]#
[[email protected] ~]# declare -a | grep fruit
declare -a fruit='([1]="banana" [2]="orange")'
3.4、数组遍历
#!/bin/bash
arr=(1 2 3 4 5 6)
for i in ${arr[*]} 或for i in ${arr[@]}
do
echo $i
done
3.5、冒泡排序
#!/bin/bash
read -p "请输入数组:" a
num=($a)
echo "你输入的数组为:${num[*]}"
for ((i=0;i<${#num[*]};i++))
do
for ((j=i+1;j<${#num[*]};j++))
do
if [ ${num[i]} -gt ${num[j]} ]
then
temp=${num[i]}
num[i]=${num[j]}
num[j]=$temp
fi
done
done
echo "排序后的数组为:${num[*]}"
边栏推荐
- PAT1009
- TIC2000调用API函数Flash擦除片上FLASH失败
- 【DB运营管理/开发解决方案】上海道宁为您提供提高工作便利性的集成开发工具——Orange
- 索引index
- Chinese valentine's day?Programmers don't exist
- Semaphore SIGCHLD use, how to make the parent that the child performs over, how to make the distinction between multiple child processes. The end
- redis内存的淘汰机制
- 父类的main方法可以被继承么?有什么特殊?
- C2000在线升级主程序下载kernel完成后跳转到kernel运行的过程记录
- electron 应用开发优秀实践
猜你喜欢
ICML 2022 | Out-of-Distribution Detection with Deep Nearest Neighbors
链表基本操作(详解)
fork creates multiple child processes
[Essence] Analysis of the special case of C language structure: structure pointer / basic data type pointer, pointing to other structures
wpf实现简易画板功能(带截取画板,签名截图等等)
【Adobe Premiere Pro 2020】pr2020安装和基本操作【PR安装、新建项目流程、导入及管理素材项目文件、添加标记、创建出入点剪辑视频、快速剪接及自动音乐卡点的方法
proto3-2语法
ECCV 2022 Oral | CCPL: 一种通用的关联性保留损失函数实现通用风格迁移
排序--快排(图解)
结构体变量的首地址获取注意事项
随机推荐
推荐一个免费50时长的AI算力平台
信息系统项目管理师必背核心考点(六十三)项目组合管理的主要过程&DIPP分析
防止数据冒用的方法
Oracle Database Architecture
【C language】typedef的使用:结构体、基本数据类型、数组
实现strcat函数
BeanFacroty和FactoryBean到底是什么?AppliacationContext它又是什么?
PAT1001
_main C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/lib/rts2800_fpu32.lib<ar在线升级跳转疑问
proto3-2语法
修改VOT2018.json文件,去掉图片路径中的color
BISS绝对值编码器_TI方案_线路延迟补偿
mysql + redis + flask + flask-sqlalchemy + flask-session 配置及项目打包移植部署
【概率论】一元概率分布的平均化
父类的main方法可以被继承么?有什么特殊?
Summary of learning stages (knapsack problem)
mysql参数学习----max_allowed_packet
PAT1002
拍频造成的轻微震荡
Modify the VOT2018.json file and remove the color in the image path