目录结构
一、Shell数组的定义&使用
1. 定义数组
2. 读取数组元素
3. 获取数组的长度
4. 案例:定义数组,以不同方式获取数组元素
二、Shell函数的定义、调用
1. Shell函数的定义
2. Shell函数的调用
三、函数参数
一、Shell数组的定义&使用
Bash Shell只支持一维数组,不支持多维数组。数组中可存放多个值,初始化时不需要定义数组大小,数组元素的下标从0开始。
1. 定义数组
语法格式:
方式1
array_name=(值1 值2 值3 ... 值n)
方式2
array_name[0]=值1
array_name[1]=值2
array_name[2]=值3
...
array_name[n-1]=值n
PS:Shell数组用小括号()
表示,每个元素之间以空格" "
进行分割
2. 读取数组元素
语法格式:
${array_name[index]}
使用@
或*
可获取数组中的所有元素:
${array_name[*]}
${array_name[@]}
3. 获取数组的长度
${#array_name[*]}
${#array_name[@]}
4. 案例:定义数组,以不同方式获取数组元素
vim func-005.sh
#!/bin/bash
# 定义数组
array_test=(A "B" C)
# 输出数组的所有元素
echo "【方式1】数组的元素为:${array_test[*]}"
echo "【方式2】数组的元素为:${array_test[@]}"
echo -e "【方式3】输出数组的所有元素:\n元素1:${array_test[0]}, 元素2:${array_test[1]}, 元素3:${array_test[2]}"
echo "【方式4】列出数组的所有元素:"
# 循环输出数组所有元素
for((i=0;i<=${#array_test[*]-1};i=i+1))
do
echo "${array_test[i]}"
done
执行结果:
二、Shell函数的定义、调用
1. Shell函数的定义
Linux Shell 可以用户定义函数,然后在Shell脚本中根据需要调用函数
Shell函数的定义格式:
[ function ] funname [()]
{
action;
[return int;]
}
PS:
① 可以带function定义:function fun()
,也可不带任何参数直接定义:fun()
② 参数返回,非必须。若写返回值,则以最后一条命令运行结果作为返回值;return后跟数值n(0-255)
2. Shell函数的调用
案例1:在Shell脚本中定义一个函数,并进行调用(不写return返回)
vim func-001.sh
#!/bin/bash
# 定义函数 hiFunc()
hiFunc(){
echo "Hi, Linux Shell!"
}
# 调用以上函数(直接写函数名称)
hiFunc
赋权:chmod 755 func-001.sh
执行:./func-001.sh
执行结果:
案例2:定义一个写有return返回的函数,实现调用用户的输入数字进行运算
vim func-002.sh
#!/bin/bash
# 定义函数addFunc()
addFunc(){
read -p "请输入第1个整数:" num1
read -p "请输入第2个整数:" num2
result1=$(($num1+$num2))
result2=$(($num1*$num2))
echo "输入的2个整数之和为:$result1"
# 编写返回值(返回值需要满足0-255之间的整数)
return $result2
}
# 调用函数addFunc
addFunc
# 调用以上函数后,通过 $?获取函数返回值,即 $result2
echo "输入2个数之乘积为:$?"
执行结果:
PS:
① 函数调用,仅需要用函数名称即可
② 在调用函数之后通过$?
可获取对应函数的返回值
③ 在Shell脚本中需要先定义函数,再进行调用(即函数位于脚本最前面位置)
④ return返回的语法:return [n]
,n需要为0-255直接的数字。若为非数字or负数,则会提示语法错误;若n>255,则会根据周期性返回0-255之间的值(如:n=255,返回255;n=256,返回0;n=257,返回1)
三、函数参数
在Shell中调用函数时可向其传递参数。在函数体内部通过 $n 的形式来获取参数的值,如:$1表示第1个参数,$2表示第2个参数...;当n>=10时,表示为 ${n},如:${10}、${11}
位置参数变量:是预定义变量中的一类变量
位置参数变量 | 作用 |
---|---|
$n | 利用参数向程序中传递需要调用的值 n为数字,n≤9直接用数字,n≥10都需要用{}包含: $0表示命令本身 $1-$9表示第1-9个参数 ${10}表示第10个参数 |
$* | 表示命令行中所有的参数,所有参数看作一个整体 |
$@ | 表示命令行中的所有参数,每个参数区分对待 |
$# | 表示命令行中所有参数的个数(不统计$0) |
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令所返回的状态: 若变量值为0,说明上一个命令正确执行 若变量值为非0,说明上一个命令执行不正确 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
案例1:定义函数,实现在指定目录下,查找出以"if-"开头的所有.sh脚本名称,然后循环将这些名称输出
vim func-003.sh
#!/bin/bash
# 定义函数paraOutput
paraOutput(){
echo "---输出以'if-'开头的.sh脚本名称---"
for i in $(ls if-*.sh)
do
echo "$i"
done
}
# 调用函数
paraOutput
执行结果:
案例2:利用位置参数变量输出指定位置的脚本名称
vim func-004.sh
#!/bin/bash
# 定义函数paraOutput
paraOutput(){
echo "当前目录下总共有.sh文件有$#个:"
echo "第1个.sh文件为:$1"
echo "第2个.sh文件为:$2"
echo "第10个.sh文件为:${10}"
}
# 调用函数,向脚本传递查询获取的参数值
paraOutput $(ls *.sh)
参考资料:Shell 函数
网友评论