当前位置: 首页 > news >正文

[Linux] shell脚本的函数和数组

一、函数

1.1 函数的定义

函数是脚本的别名

作用:函数可以避免代码重复,可读性强,可以简化脚本。

格式:函数名(){脚本}

1.2  如何使用函数

1.定义

2.调用

函数一定要先定义再使用

例子:

错误示例

正确示例 

1.3 函数文件

专门存放函数的文件
要使用的时候
. 或者绝对路径的文件名 放在脚本的最前面 

 1.4 函数变量的作用范围

用法:加local 关键字(加locao只会在函数内部生效,不影响外界环境)

 1.5 函数的返回值

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

使用原则:

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

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

 

例子

 

 1.6 函数的传递参数

1.7 函数的递归

实际应用就是阶乘

实验:

#!/bin/bash
fact () {
if [ $1 -eq 1 ]
then
echo 1
else
echo $[ $1 * `fact $[$1-1]` ] //如果输入的数不是1那么就用这个数乘以他本身减去一,如此循环,直到1
fi}
fact $1

 二、数组

2.1 数组的类别

数组分为普通数组和关联数组

普通数组:下标是数字关联数组:下标是与含义的字符串

declare -a 数组名
#普通数组可以不事先声明,直接使用
declare -A 数组名 
#关联数组必须先声明,再使用

2.2 声明数组

1.数组名=(数组值,中间用空格隔开)

2.数组名[下表1]=数值1

例子:

普通数组

关联数组

 2.3 删除数组

普通数组

关联数组

 2.4 数组切片

格式
${数组名[@]:跳过个数:要取个数}

 2.5 进阶:冒泡排序

提出问题:假如我有一个随机数的数组我想让他从小到大排列,该怎么做

#!/bin/bash
for i in {0..9}
do
a[$i]=$RANDOM
done
echo "原始数组为: ${a[*]}"
#随机生成一个数组
l=${#a[*]}
#定义l的长度为数组a 10
for ((i=1;i<$l;i++))
#比较的轮数
dofor ((j=0;j<$l-$i;j++))
#两个相邻的数需要比较的轮数dofirst=${a[$j]}
#数组的第一个数k=$[$j+1]
#计算下一个数的角标second=${a[$k]}
#数组的第二个数if [ $first -gt $second ]thentemp=$firsta[$j]=$seconda[$k]=$tempfidone
done
echo "排序后的数组为: ${a[@]}"

总结:

1. 注意在函数内传递参数与通过位置变量在函数外传递参数的区别(函数传递由脚本变量的位置决定)。

2. 注意函数中局部变量和全局变量的区别。

3.在接收位置变量的值时,建议给出一个新定义的变量,以增加代码的可读性。

4.对递归函数的理解是对函数的深入运用和挖掘,尤其是递归方面的运用。

5.注意需要保持函数的脚本形式也可以在文件中构建函数库,另外调用文件的第一条语句要调用源代码或". "。

6. 如何构建数组(我们可以将其视为包含多个独立元素的变量集合)。

 

http://www.lryc.cn/news/241244.html

相关文章:

  • 万宾科技智能井盖的效果怎么样?
  • nvm切换版本之后npm用不了
  • 【elementui】el-popover在列表里循环使用,取消的doClose无效解决办法
  • 【php】解决加载速度慢导出超时问题记录
  • postgresql安装fdw扩展
  • 反爬虫机制与反爬虫技术(二)
  • Grails 启动
  • 2023年亚太地区数学建模大赛 问题A
  • 基于springboot实现校园在线拍卖系统项目【项目源码】
  • 详解ES6的Promise
  • 多语言快速排序算法
  • opencv-图像梯度
  • linux centos7 安装nginx
  • Xilinx Zynq-7000系列FPGA实现视频拼接显示,提供两套工程源码和技术支持
  • DAOS低时延与高性能RDMA网络
  • 城市管理实景三维:打造智慧城市的新引擎
  • Python3.11+Pyside6开发电影下载程序
  • HCIP-七、IS-IS 综合实验
  • 广西桂林钢结构钣金折弯件3d扫描全尺寸偏差检测-CASAIM中科广电
  • 飞翔的小鸟游戏
  • 计算机网络之运输层
  • 2023软件应用类下载系统平台源码/手机软件应用、新闻资讯下载站/软件库网站源码
  • SkyWalking配置报警推送到企业微信
  • educoder中Hive -- 索引和动态分区调整
  • http与https有什么区别,https攻击要如何防护
  • nginx+keepalived
  • Re51:读论文 Language Models as Knowledge Bases?
  • .NET 使用配置文件
  • vue 通过ref调用router-view子组件的方法
  • 在全球碳市场中崭露头角的中碳CCNG