shell之函数
一、shell函数概述
将命令序列按格式写在一起,可方便重复使用命令序列
1、Shell函数格式
2、函数返回值
return表示退出函数并返回一个退出值,脚本中可以用 $ ? 变量显示该值
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255,超出时值将为除以256取余
#!/bin/bash
user () {
if [ $USER = root ]
then echo “这是管理员用户”
else
echo “这不是管理员”
return 1
fi
}
user
3、函数的传参
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。
1.第一种方法
sum1() {
sum=$[$1 + $2]
echo $s
}
read -p “输入第一个数” first
read -p “输入第二个数” second
sum1 $first $second2.第二种方法
sum() {
s=$[$1 + $2] ///$1 $2 传递位置参数
echo $s
}
sum $1 $2 ///$1 $2 代表执行脚本函数时命令后面跟的两个参数位置参数
4、函数变量的作用范围
- 函数在Shell脚本中仅在当前Shell环境中有效
- Shell脚本中变量默认全局有效
- 将变量限定在函数内部使用local命令。
5、函数的递归
函数调用自己本身的函数
示例:求任意数的阶乘
#!/bin/bash
fact () {
#判断传入的参数,如果是0,则直接输出1
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
#如果传入的参数不是1,则函数调用函数自身,传入参数计算
echo $[$1* $(fact $[$1-1])]
fi
}
fact $1
二、数组
Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便。
1、数组的定义
-
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
-
数组元素的下标由 0 开始。
-
Shell 数组用括号来表示,元素用"空格"符号分割开
-
在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
-
使用${array_name[@]} 或者 ${array_name[*]} 都可以全部显示数组中的元素
-
同样道理${#array_name[@]} 或者 ${#array_name[*]}都可以用来求数组的长度
-
求数组中元素的长度方法有很多,相当于求字符串的长度
2、数组的类型
1、数值类型
2、字符类型
3、数组的遍历
-
可以使用标准的for循环,这种类C语言的方式来遍历数组中的元素
-
for 元素 in 元素集(数组) 这种类Python的方式来遍历数组
-
从代码可读性与执行速度来看,推荐使用第二种方式
4、数组的替换和删除
替换:
-
${array[@]/x/y} 最小匹配替换,每个元素只替换一次
-
${array[@]//x/y} 最大匹配替换,每个元素可替换多次
-
${array[@]/x/} 最小匹配删除,只删除一个符合规定的元素
-
${array[@]//x/} 最大匹配删除,可删除多个符合规定的元素
-
${array[@]/#x/y} 从左往右匹配替换,只替换每个元素最左边的字符
-
${array[@]/%x/y} 从右往左匹配替换,只替换每个元素最右边的字符
删除: