文章目录
Shell函数
一、 函数的定义
-
将命令序列按格式写在一起
-
可方便重复使用命令序列
-
shell函数定义
[ function ] 函数名(){ 命令序列 [return x] ##使用return或exit可以显式地结束函数 }
return:可以返回状态码或者数据(echo输出)
exit:只返回状态码
函数体外调用状态码或者值时:
return返回的是状态码,需要使用$?调用
echo 返回的是值,使用变量调用
-
调用函数的方法
函数名 [参数名1] [参数名2]
实例:
两个数字求和:

自定义函数:
编写登录系统后便可使用的用户自定义函数
- 编辑用户自定义函数文件/root/function
- 在当前Shell中加载可执行的函数文件/root/function
- 在~/.bashrc文件中添加source /rootfunction命令

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

三、函数的参数
3.1 参数的用法
函数名称 参数1 参数2 参数3…….
3.2 参数的表示方法
$1 $2 $3… ${10} ${11}...

四、递归函数
调用自己本身的函数
实例:
递归遍历目录/var/log
通过定义递归函数list_files来实现

Shell数组
应用场景包括
- 获取数组长度
- 获取元素长度
- 遍历元素
- 元素切片
- 元素替换
- 元素删除
一、数组定义方法
方法一
数组名=(value0 value1 value2)
例如:arr=(11 22 33 44)
方法二
数组名=([0]=value [1]=value [2]=value)
例如:arr=([0]=11 [1]=22 [2]=33 [3]=44)
方法三
列表名=“value0 value1 value2...”
数组名=($列表名)
例如:list="11 22 33 44"
arr=($list)
方法四
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
例如:arr[0]=11
arr[1]=22
arr[2]=33
方法四可用来替换掉数组中的某一个元素
二、数组包括的数据类型
- 数据类型
- 字符类型
- 使用“或”定义
三、Shell数组操作
常见数组操作
获取数组长度:
${#数组名[@/*]}

获取数组元素值:
${数组名[@/*]}

读取某下标赋值:
${数组名[下标]}

数组遍历:

数组切片
${数组名[@]:起始位置:长度} //中间冒号隔开!!

数组的替换 重点!!替换元素后再赋值给自己
${数组名[*]/查找字符/替换字符}

数组删除
unset

四、Shell脚本调试
echo 命令
bash 命令
命令语法
sh [-nvx] 脚本名
常用选项
| 选项 | 作用 |
|---|---|
| -n | 不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会提示报错。 |
| -v | 在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也会给出错误提示。 |
| -x | 将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。 |

set命令
set -x:开启调节模式
set +x:关闭调节模式
五、Shell给定值的比较
冒泡排序

键盘输入数组值
#!/bin/bash
k=0
while true
do
read -p "是否需要输入数值[yes/no]:" do
if [ $do == "no" ] #输入no,即可退出,输入其他继续循环
then break
fi
read -p "请输入第$(($k+1))个元素:" key
score[$k]=$key
let k++
done
for ((i=1;i<${#score[*]};i++))
do
for ((j=0;j<${#score[*]}-$i;j++))
do
if [ ${score[$j]} -gt ${score[((j+1))]} ]
then
temp=${score[j+1]}
score[((j+1))]=${score[$j]}
score[$j]=$temp
fi
done
done
echo ${score[*]}
[root@localhost ~]# chmod +x maopao1.sh
[root@localhost ~]# ./maopao1.sh
是否需要输入数值[yes/no]:yes
请输入第1个元素:30
是否需要输入数值[yes/no]:yes
请输入第2个元素:40
是否需要输入数值[yes/no]:yes
请输入第3个元素:50
是否需要输入数值[yes/no]:no
30 40 50
本文介绍Shell函数与数组的基础知识及应用技巧,涵盖函数定义、参数传递、递归函数及数组操作等内容,帮助读者掌握Shell编程的基本技能。

被折叠的 条评论
为什么被折叠?



