shell——函数与数组
文章目录
- 前言
- 一、函数
- 1.1 函数的定义
- 1.2 函数的简单使用
- 1.2 函数的参数
- 1.2.1 带参数的函数
- 1.2.2 接收两个数据并计算两个数之和
- 1.3 函数的返回值
- 1.3.1 有返回的函数
- 1.3.2 编写有返回值的函数计算两个数的和
- 二、数组
- 2.1 定义与赋值
- 2.2 读取数组元素
- 2.2 获取数组所有元素及数组长度
- 2.3 遍历数组
- 三、加载外部文件
- 3.1 示例
- 3.2 打印当前用户相关信息
- 3.2.1 创建 shuju.sh
- 总结:
前言
shell函数是shell脚本中封装的一组命令,用于执行特定任务。它们类似于其他编程语言中的函数,可以接收参数、返回结果,并避免代码重复。shell函数在脚本中定义后,通过函数名调用。
一、函数
函数:可以理解为是一个功能。
例如: print()
函数用于输出内容
-
优点:当有了解决某个问题的函数(功能)时,程序员就可以直接调用这
个函数直接解决问题。 -
函数的两种类型:
- 1、内置函数:编程语言自带的函数- shell语言的内置函数- AWK语言中print函数- 2、自定义函数:程序员自己写的函数- 函数的定义:如何编写函数- 函数的调用:如何使用已编写的函数
1.1 函数的定义
在 Shell中所有函数在使用前必须定义。这意味着必须将函数放在脚本开始
部分,直至 shell解释器首次发现它时,才可以使用。 调用函数仅使用其函
数名即可。
记住:
先把函数制作好, 才能正确调用
Shell中的函数书写在前面 (书写在调用函数的代码之前)
function 函数名字 ()
{程序段;[return int;]
}1、可以带 function fun() 定义,也可以直接 fun() 定义, 不带任何参数。
2、参数返回,可以显式加 return ,如果不加,将以最后一条命令运行结果,作为返回值。
1.2 函数的简单使用
#!/bin/bash
### 演示函数的简单使用
##注意:函数书写在shell脚本的开始位置
##定义函数,函数名为:print
function print()
{echo "hello"echo "你好"
}
##调用print函数
print
1.2 函数的参数
在 Shell 中,调用函数时可以向其传递参数。在函数体内部, 通过 $n 的形式来获取参数的值,例如, $1 表示第一个参数, $2 表示第二个参数…
注意, 当 n>=10 时,需要使用${n} 来获取参数。
1.2.1 带参数的函数
#!/bin/bash
### 演示带参数的函数
##定义函数
funWithParam()
{echo "第一个参数为 $1"echo "第二个参数为 $2"echo "第十个参数为 $10"echo "第十个参数为 ${10}"echo "第十一个参数为 ${11}"echo "参数总数有 $# 个"echo "作为一个字符串输出所有参数 $*"
}
##调用函数,并传递参数
funWithParam 1 2 3 4 5 6 7 8 9 34 73
1.2.2 接收两个数据并计算两个数之和
#!/bin/bash
num1=$(($1+1))
num2=$(($2+1))# 定义函数 : 接收两个数据
function sum(){# 计算两个数字之和sum=$[$1+$2] # 这里的$1和$2指的是调用函数时的位置参数echo ${sum}
}# 调用函数
sum $num1 $num2
1.3 函数的返回值
函数的返回值:函数内部在处理完所有问题后,需要有一个结果返回给调用者。
function 函数名(){......函数体中的代码......return 数据 ## 返回的数据只能有一个值
}
1.3.1 有返回的函数
#!/bin/bash
###演示带返回值的参数
function getMax()
{if [ $1 -lt $2 ]; thenreturn $2 #使用return来返回一个数据值 (return后面的返回值只能书写一个)elsereturn $1;fi
}
echo "Shell程序中传递的两个参数是:$1 , $2"
##调用函数
getMax $1 $2echo "最大值::$?" # $?表示返回值
取最大值:
取最小值:
1.3.2 编写有返回值的函数计算两个数的和
#!/bin/bash
sum()
{read -p "请输入第一个数:" num1read -p "请输入第二个数:" num2SUM=$((num1 + num2))return $SUM
}sum
echo "两个数的和:$?" # $?表示返回值
二、数组
- 数组可以理解为是一个用来存放多个值的容器。
- 数组中存储的数据,通常可以称为:元素。
- 当数组中存储了多个元素后,就会给每一个元素添加一个编号(索引),从0开始。
2.1 定义与赋值
- Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
- Shell 数组用括号来表示,元素用"空格"符号分割开,
- 语法格式如下:
array_name=(value1 value2 value3 ... valueN)
示例:
#!/bin/bash
my_array=(A B "C" D)
也可以使用索引来定义数组:
# 数组名[索引]=元素值
array_name[0]=value0
array_name[1]=value1
2.2 读取数组元素
读取数组元素值的一般格式是: ${array_name[index]}
index 是指数组的索引,从0开始
示例:
#!/bin/bash
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
2.2 获取数组所有元素及数组长度
2.3 遍历数组
把数组中存储的元素依次取出
方式一:
#!/bin/bash
# 定义数组
my_arr=(AA BB CC)
# 利用for循环 遍历数组
for var in ${my_arr[@]}
doecho $var
done
方式二:
#!/bin/bash
# 定义数组
my_arr=(AA BB CC)
# 利用for循环 遍历数组
for var in ${my_arr[@]}
doecho $var
done
三、加载外部文件
在一个Shell程序中可以指定包含外部的其他Shell脚本程序。这样可以很方便的封装一些公用的代码作为一个独立的文件。
好处:
- 实现数据源与业务逻辑的分离
- 提升代码复用性和可扩展性优化后的表达
3.1 示例
定义两个shell文件分别为: test1.sh、test2.sh
- 在test1中定义一个变量 arr=(linux hadoop shell)
- 在test2中对arr进行循环打印输出
第一步:test1.sh
#!/bin/bash
my_array=(AA BB CC)
第二步:test2.sh
#!/bin/bash
source /opt/shelldemo/test1.sh
for var in ${my_array[@]}
doecho $var
done
3.2 打印当前用户相关信息
3.2.1 创建 shuju.sh
总结:
通过合理使用函数、数组和模块化加载,Shell 脚本能显著提升效率与可维护性,适用于自动化任务和复杂流程管理。