shell之函数

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 $second

2.第二种方法
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} 从右往左匹配替换,只替换每个元素最右边的字符

删除:

  • 每个元素,从左向右进行最短匹配

  • ##每个元素,从左向右进行最长匹配
  • % 每个元素,从右向左进行最短匹配
  • %% 每个元素,从右向左进行最长匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值