shell脚本 函数

一,Shell 函数定义
1.格式

[function ]  函数名 (){
加功能就行了。
}
  1. 函数调用格式
    调用 Shell 函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可:
name

如果传递参数,那么多个参数之间以空格分隔:

name zhangsan1 zhangsan2 zhangsan3

Shell 函数定义的语法格式如下:

function name() {
    statements
    [return value]
}

解释

function是 Shell 中的关键字,专门用来定义函数;
name是函数名;
statements是函数要执行的代码,也就是一组语句;
return value表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。

案例

[root@youxi1 ~]# vim a.sh
#!/bin/bash
function fun1 {
    echo "hello world"
}
 
fun2() {
    echo $[$1+$2]
}
 
fun1
fun2 1 2
[root@youxi1 ~]# sh a.sh
hello world
3

如果存在相同名称的函数,以最后一个为准

[root@youxi1 ~]# vim b.sh
#!/bin/bash
function fun1 {
    echo "hello world"
}
 
fun1() {
    echo "This is rewrite"
}
 
fun1
[root@youxi1 ~]# sh b.sh
This is rewrite

return返回值

使用return命令来退出函数并返回特定的退出码($?)

[root@youxi1 ~]# vim c.sh
#!/bin/bash
fun1() {
  echo "return 3"
  return 3
  echo "why?"
}
 
fun1
[root@youxi1 ~]# sh c.sh
return 3
[root@youxi1 ~]# echo $?
3  

二,数组

1、数组定义

[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo $a

一2、数组读取与赋值

1)得到长度:

[root@bastion-IDC ~]# echo ${#a[@]}
8
[root@bastion-IDC ~]# echo ${#a[*]}
8对括号表示是数组,数组元素用“空格”符号分割开
2、数组读取与赋值
1)得到长度:

[root@bastion-IDC ~]# echo ${#a[@]}
8
[root@bastion-IDC ~]# echo ${#a[*]}
8${#数组名[@或*]} 可以得到数组长度

2)读取:

[root@bastion-IDC ~]# echo ${a[4]}
5
[root@bastion-IDC ~]# echo ${a[*]}
1 2 3 4 5 6 7 8${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容

3)赋值:

[root@bastion-IDC ~]# a[1]=100
[root@bastion-IDC ~]# echo ${a[*]} 
1 100 3 4 5 6 7 8
[root@bastion-IDC ~]# a[5]=140
[root@bastion-IDC ~]# echo ${a[*]} 
1 100 3 4 5 140 7 8
直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素
4)删除

复制代码
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# unset a
[root@bastion-IDC ~]# echo ${a[*]}

[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# unset a[1]
[root@bastion-IDC ~]# echo ${a[*]}
1 3 4 5 6 7 8
[root@bastion-IDC ~]# echo ${#a[*]}
7
直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据

3、特殊使用

1)分片:

复制代码
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo ${a[@]:0:3}
1 2 3
[root@bastion-IDC ~]# echo ${a[@]:1:4}
2 3 4 5
[root@bastion-IDC ~]# c=(${a[@]:1:4})
[root@bastion-IDC ~]# echo ${#c[@]}
4
[root@bastion-IDC ~]# echo ${c[*]} 
2 3 4 5
复制代码
直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

2)替换:

复制代码
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo ${a[@]/3/100}
1 2 100 4 5 6 7 8
[root@bastion-IDC ~]# echo ${a[@]}
1 2 3 4 5 6 7 8
[root@bastion-IDC ~]# a=(${a[@]/3/100})
[root@bastion-IDC ~]# echo ${a[@]}
1 2 100 4 5 6 7 8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值