函数与数组

如何使用函数

  1. 定义
  2. 调用

你准备一个只存函数的文件

函数一定要先定义在使用

函数变量的作用范围

加local关键字可以让变量只在函数中生效,不会影响外界环境。

函数的返回值

如果使用函数那么$?使用就会受限

我们可以使用return 自定义$?的返回值来判断函数中的命令是否成功

函数的传递参数

需要注意

脚本的$1 $2

函数的$1 $2

是没有关系的

函数的$1 $2是指跟在函数后面的值

eval

函数的格式

方法一:
[function] 函数名 (){
	命令序列
	[return x]         #使用return或者exit可以显式的结束函数
}
 
 
方法二:
函数名(){
	命令序列
}

数组

普通数组:下标是数字

关联数组:下标是有含义的字符串

变量:存储单个元素的内存空间

数组:存储多个元素的连续的内存空间,相当于多个变量的数据集合  1对多

数组名和索引  对应下标

索引的编号从0开始 属于数组索引

索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持

使用数组时要先声明:

declare -a 普通数组 (不需要手动声明,系统帮你声明)

declare -A 数组名   (关联数组要手动声明) 不声明 值会存不进去

定义数组

  1. 数组名=数组值 中间用空格隔开(1 2 3 4 5 6)
  2. 数组名[下标1]=值1

数组名[下标2]=值2

………………………

数组名[下标n]=值n

例子:

a=(10 20 30 40 50)

调用数组

echo ${a[0]} 调用第一个值

echo ${a[1]} 调用第二个值

…………………………

echo ${a[n]} 调用第n个值

全部调用

echo ${a[@]}

echo ${a[*]}

显示数组的值的个数

echo ${#a[@]}

显示所有下标

echo ${!a[@]}

删除数组

unset 数组名 将整个数组删除

unset a[0]   只删除数组的第一个值

示例脚本:

查看当前的操作系统:

#!/bin/bash
if grep -iq centos /etc/os-release
then  echo "该系统是centos"
elif grep -iq ubuntu /etc/os-release
then echo "该系统是ubuntu"
else
echo "该系统既不是centos 也不是ubuntu"
fi

传参

 

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

使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为除以256取余 

【函数变量的作用范围:】
函数在Shell脚本中仅在当前Shell环境中有效
Shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令

local

【#阶乘】
阶乘是基斯顿·卡曼于 1808 年发明的运算符号,是数学术语
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0和1的阶乘为1,自然数n的
阶乘写作n!
n!=1×2×3×...×n
阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n
n!=n(n-1)(n-2)...1
n(n-1)! = n(n-1)(n-2)!

数组

变量:存储单个元素的内存空间
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
-索引的编号从0开始,属于数值索引
-索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
-bash的数组支持稀疏格式(索引不连续)

数组中可以存放多个值,bash shell只支

持一堆数组不支持多组数组,初始化时不需要定义数组的大小

与大部分编程语言类似,数组元素的下标由0开始

shell数组用括号来表示,元素用空格符号隔开

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

数组的语法格式

方法一(一次赋值全部元素):
数组名=(value0 value1 value2 ...)
a=(10 20 30 40 50)
方法二(只赋值特定元素):
数组名=([0]=value [1]=value [2]=value ...)
b=([0]=10 [1]=20 [2]=30)
方法三:
列表名="value0 value1 value2 ..."
数组名=($列表名)
[root@localhost data]#b="1 2 3 4 5 6"
[root@localhost data]#c=$b
[root@localhost data]#echo ${c[*]}
1 2 3 4 5 6

 

方法四(一次只赋值一个元素):
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"

方法五:交互式

数组包括的数据类型
●数值类型
●字符类型:
使用" "或' '定义 

 获取数组的长度

a=(1 2 3 4 5)
echo ${#a[*]}  
echo ${#a[@]}  
【获取数据列表】
echo ${a[*]}
echo ${a[@]}
【读取某下标赋值】
arr_index2=${a[2]}
【读取下标个数】
[root@localhost ~]# a=(1 2 3 4 5)
echo ${!a[*]}

【数组遍历】

【数组切片】
arr=(1 2 3 4 5)
echo ${arr[@]}			#输出整个数组

echo ${arr[@]:0:2}		#获取 ${数组名[@或*]:起始位置:长度} 的值

echo ${arr1[*]:1:3}

echo ${arr[@]:2:3}
【数组替换】
arr=(1 2 3 4 5)

echo ${arr[@]/4/66} 	#${数组名[@或*]/查找字符/替换字符}
echo ${arr[@]}			#并不会替换数组原有内容

arr=(${arr[@]/4/66})	#要实现改变原有数组,可通过重新赋值实现
echo ${arr[@]}

【数组删除】
arr=(1 2 3 4 5)
unset arr				#删除数组
echo ${arr[*]}

arr=(1 2 3 4 5)
unset arr[2]			#删除第三个元素
echo ${arr[*]}

取数组的最大值

#!/bin/bash
a=( 10 20 50 40 100 )
max=${a[0]}
l=${#a[*]}

for ((i=0;i<$l;i++))
do
if [[ $max -lt ${a[$i+1]} ]]
then
max=${a[$i+1]}
fi
done

echo $max

取数组的最小值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值