Shell之函数与数组 (超详细的函数与数组例子)

文章目录
一:shell函数1.1:函数定义的简化写法1.2:函数的作用范围1.3:递归函数
二:shell数组2.1:应用场景包括2.2:数组的描述2.3:数组定义方法2.3.1:到100数组2.3.2:创建1到100奇数组2.3.3:创建任意数字及长度,根据客户需求加入元素2.4.1:获取数组长度和下标赋值2.4.2:下面一组值,不满80加到1002.4.3:求数组的最大值

一:shell函数

  Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。
  Shell 中的函数和C++、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。
Shell 函数定义的语法格式如下:

function name() {      #function是shell中的关键字,专门用来定义函数  name是函数名
statements #statements是函数要执行的代码,也就是一组语句;
[return value] #return value表示函数的返回值,其中return是shell关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。
} #由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。

1.1:函数定义的简化写法

如果你嫌麻烦,函数定义时也可以不写 function 关键字:

name() {
statements
[return value]
}

如果写了 function 关键字,也可以省略函数名后面的小括号:

function name {
statements
[return value]
}

我建议使用标准的写法,这样无论是谁写这个脚本,都可以看就懂。

[root@localhost opt]#vim jia.sh
#!/bin/bash
sum () {
s=`expr 5 + 3`
echo $s
}
sum
[root@server1 ~]# sh a.sh
8

sum () {
s=`expr $1 + $2`
echo $s
}
sum 5 6
[root@server1 ~]# sh a.sh
11

在这里插入代码片 

sum () {
return $(($1 + $2))
}
sum 3 4
echo $?
[root@server1 ~]# sh a.sh
7

function sum(){
#命令序列
read -p "请输入第一个整数: " num1
read -p "请输入第一个整数: " num2
SUM=$[$num1+$num2]
echo "和:$SUM"
}
sum
[root@server1 ~]# sh a.sh
请输入第一个整数: 5
请输入第一个整数: 4
和:9

function sum(){
#命令序列
read -p "请输入第一个整数: " num1
read -p "请输入第一个整数: " num2
SUM=$[$num1+$num2]
echo $SUM
}
tom=`sum 4 2`
let tom+=1
echo $tom
[root@server1 ~]# sh a.sh
请输入第一个整数: 6
请输入第一个整数: 3
10

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

示例

函数内部变量通过local来实现

通过定义myfun函数,在其内部设置局部变量i

函数内部和外部分别赋值,进行结果验证

function sh(){
#命令序列
read -p "请输入第一个整数: " num1
read -p "请输入第一个整数: " num2
s=$[$num1+$num2]
jerry=20
echo 函数内$jerry
echo 和:$s
}
sh
echo 函数外$jerry
[root@server1 ~]# sh a.sh
请输入第一个整数: 2
请输入第一个整数: 3
函数内20
和:5
函数外20

local定义全局变量

function sh(){
#命令序列
read -p "请输入第一个整数: " num1
read -p "请输入第一个整数: " num2
s=$[$num1+$num2]
local jerry=20 #local定义全局变量
echo 函数内$jerry
echo 和:$s
}
sh
echo 函数外$jerry
[root@server1 ~]# sh a.sh
请输入第一个整数: 2
请输入第一个整数: 4
函数内20
和:6
函数外

1.3:递归函数

调用自己本身的函数
示例
递归遍历目录
通过定义递归函数list_files来实现

#!/bin/bash
function list_files(){
for s in `ls $1`
do
if [ -d "$1/$s" ]
then
echo "$2$s"
list_files "$1/$s" "$2"
else
echo "$2$s"
fi
done
}
list_files "/var/log"
#$1表示/var/log
#$s表示/var/log下一个目录
#$2表示指定格式 子目录一定要做一个首行缩进
[root@server1 ~]# sh bianli.sh
amanda
anaconda
anaconda.log
ifcfg.log
journal.log
ks-script-j10KNj.log
ks-script-mW8ioG.log
packaging.log
program.log
……

二:shell数组
2.1:应用场景包括

    应用场景包长度获取数组长度获取元素长度遍历元素元素切片元素替换元素删除…

2.2:数组的描述

数组:放着相同类型的数据集合
应用场景比较多:列如班级人的成绩跟名字
[11,22,33,44] 在内存中开辟了连续的空间
​ 配合循环使用
数组名称arr arr=(44,33,22,11)
数组元素: 44 33 22 11 都是
数组的长度: arr有4 个元素
数组下标:33元素的下面是1 (比如11下标是3 22下标是2)
for 临时标量 in 数组
do
done

2.3:数组定义方法

方法一

数组名=(shuai0 shuai1 shuai2...) 

方法二

数组名=([0]=shuai [1]=shuai [3]=shuai...)
[root@server1 test]# num=([0]=44 [1]=33 [2]=22 [3]=11)
[root@server1 test]# echo ${num[*]}
44 33 22 11

方法三

列表名="shuai0 shuai1 shuai2.."
数组名= ($列表名)
[root@server1 test]# tom=" 1 2 3 4 "
[root@server1 test]# num=($tom)
[root@server1 test]# echo ${num[*]}
1 2 3 4

#!/bin/bash
list=`cat test.txt`
echo $list
[root@server1 test]# sh test.sh
5 6 7 8
#!/bin/bash
list=`cat test.txt`
f=($list)
echo ${f[*]}
[root@server1 test]# sh test.sh
5 6 7 8

方法三
往往做的是替换 替换某一个元素

数组名[0]="shuai"
数组名[1]="shuai"
数组名[2]="shuai"

[root@server1 test]# num=([0]=2 [1]=5 [2]=6 [3]=8)
[root@server1 test]# echo ${num[*]}
2 5 6 8
[root@server1 test]# num[2]=10
[root@server1 test]# echo ${num[*]}
2 5 10 8

2.3.1:到100数组

#!/bin/bash
for ((i=0;i<99;i++))
do
tom[$i]=$[$i+1]
done
echo ${tom[*]}
[root@server1 test]# sh 1_100.sh
1 2 3 4 5 6 7 8 9 ……

2.3.2:创建1到100奇数组

#!/bin/bash
for ((i=0;i<99;i+=2))
do
tom[$i]=$[$i+1]
done
echo ${tom[*]}
[root@server1 test]# sh 1_100.sh
1 3 5 7 9 11 13 15 ……

方法二

#!/bin/bash
k=0
j=1
for ((i=0;i<=100;i++));do
k=$[ $i + $j ]
let j++
if [ $k -le 100 ];then
tom[$i]=$k
fi
done
echo ${tom[@]}
[root@server1 test]# sh 1_100.sh
1 3 5 7 9 11 13 ……

2.3.3:创建任意数字及长度,根据客户需求加入元素

#!/bin/bash
i=0
while true
do
read -p "是否输入元素(yes/no):" e
if [ $e == "no" ];then
break
fi
read -p "请输入第$[$i+1]个元素:" f
tom[$i]=$f
let i++
done
echo ${tom[@]}
[root@server1 test]# sh 1_100.sh
是否输入元素(yes/no):yes
请输入第1个元素:10
是否输入元素(yes/no):yes
请输入第2个元素:20
是否输入元素(yes/no):yes
请输入第3个元素:30
是否输入元素(yes/no):no
10 20 30

2.4.1:获取数组长度和下标赋值

[root@server1 test]# tom=(66 77 88)
[root@server1 test]# echo ${tom[@]}
66 77 88
[root@server1 test]# echo ${tom[1]}
77

2.4.2:下面一组值,不满80加到100

#!/bin/bash
num=(56 79 63 32 88)
#遍历数组
for ((i=0;i<${#num[*]};i++))
do
if [ ${num[$i]} -lt 80 ];then
new[$i]=100
else
new[$i]=${num[$i]}
fi
done
echo ${new[*]}
[root@server1 ~]# sh shell.sh
100 100 100 100 88

2.4.3:求数组的最大值

#!/bin/bash
num=(12 63 43 52)
tom=0
for ((i=0;i<${#num[*]};i++))
do
if [ ${num[$i]} -gt $tom ];then
tom=${num[$i]}
fi
done
echo $tom
[root@server1 ~]# sh max.sh
63

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

Shell之函数与数组 (超详细的函数与数组例子)

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » Shell之函数与数组 (超详细的函数与数组例子)
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏