目录
背景:
函数和数组在shell高级脚本中是经常使用到,使用函数可以优化shell执行所消耗的资源,同时可以提高shell脚本执行的效率,数组可以使用在有很多变量的时候,需要对每一个变量进行处理时使用到,提高了shell的执行的效率。
1、函数
格式:
func() {
command
}
Shell 函数很简单,函数名后跟双括号,再跟双大括号。
通过函数名直接调用,不用函数名称加小括号的形式存在的。
示例1:
#!/bin/bash
func() {
echo "This is a function."
}
#函数条用
func
执行效果:
# sh test.sh
This is a function.
示例2:
#!/bin/bash
func() {
VAR=$((1+1))
return $VAR
echo "This is a function."
}
#函数调用
func
#打印返回值
echo $?
执行效果:
# sh test.sh
2
return 在函数中的作用是定义状态返回值,返回并终止函数,但返回的只能是 0-255 的数字,类似于 exit 数值。
示例3:
#!/bin/bash
func() {
echo "Hello $1"
}
#函数调用,并输入参数
func world
执行效果:
# sh test.sh
Hello world
通过Shell 位置参数给函数传参。 函数也支持递归调用,也就是自己调用自己。
示例3:
#!/bin/bash
test() {
echo $1
sleep 1
test hello
}
#函数调用
test
如上的脚本思路是执行会一直在调用本身打印 hello,这就形成了闭环。
2、数组
数组是相同类型的元素按一定顺序排列的集合,也叫做集合
格式:
array=(元素 1 元素 2 元素 3 ...)
用小括号初始化数组,元素之间用空格分隔。
1:初始化数组
array=(a b c)
2:新建数组并添加元素
array[下标]=元素
3:将命令输出作为数组元素
array=($(command))
数组常规操作:
#!/bin/bash
#初始化数组
array=(a b c)
#获取所有元素:
echo ${array[*]}
# *和@ 都是代表所有元素
#获取元素下标:
echo ${!array[@]}
#获取数组长度:
echo ${#array[*]}
#获取第一个元素:
echo ${array[0]}
#获取第二个元素:
echo ${array[1]}
#获取第三个元素:
echo ${array[2]}
#添加元素:
array[3]=d
echo ${array[*]}
#添加多个元素:
array+=(e f g)
echo ${array[*]}
#删除第一个元素:
unset array[0]
# 删除会保留元素下标
echo ${array[*]}
#删除数组:
unset array
执行效果:
[root@~ test]# sh test.sh
a b c
0 1 2
3
a
b
c
a b c d
a b c d e f g
b c d e f g
注:数组下标从 0 开始。
示例1:
#!/bin/bash
for i in $(seq 1 10)
do
array[a]=$i
let a++
done
echo ${array[*]}
将 seq 生成的数字序列循环放到数组里面
执行效果:
[root@~ test]# sh test.sh
1 2 3 4 5 6 7 8 9 10
示例2:
遍历数组元素的功能是在使用数组的shell脚本中经常常见的使用,一般遍历数组的元素利用到循环语句的,用的最多的是for语句
#!/bin/bash
IP=(192.168.1.1 192.168.1.2 192.168.1.3)
for ((i=0;i<${#IP[*]};i++))
do
echo ${IP[$i]}
done
#或者
IP=(192.168.1.1 192.168.1.2 192.168.1.3)
for IP in ${IP[*]}
do
echo $IP
done
执行效果:
[root@~ test]# sh test.sh
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.1
192.168.1.2
192.168.1.3
总结:
以上就是shell脚本语言中常使用到的数组和函数,一般都是在比较复杂的场景使用到数组和函数的,数组和函数的结合使用也是存在的,这样shell脚本的逻辑会更加的复杂,大家可以参考博主的shell实践文章!! 感谢大家的支持,请多多点赞加关注