一、函数
1、函数的作用
在编写脚本时,有些脚本可以反复使用,可以调用函数来解决
语句块定义成函数约等于别名
函数使用方法:
1. 定义函数
2. 再引用函数
基本格式有三种如下:
1.
function 函数名{
命令序列
}
2.
函数名()
命令序列
}
3.
function func_name () {
...函数体...
}
注意事项
1. 直接写 函数中调用函数 直接写函数名
2. 同名函数 后一个生效
3. 调用函数一定要先定义
4. 只要先定义了调用的 其他函数定义顺序无关
2、查看函数
[root@localhost ~]# declare -F
#函数列表
declare -f __HOSTNAME
declare -f __SIZE
declare -f __SLAVEURL
[root@localhost ~]# declare -f
#函数具体的定义
例一:判断操作系统版本
[root@localhost ~]#cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
3、删除函数
4、函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
2. 退出码必须是0-255,超出的值将为除以256取余
#!/bin/bash
test1 () {
read -p "请输入一个数字:" num
return $[$num*2]
}
test1
echo $?
怎么解决超过 255
#!/bin/bash
test1 () {
read -p "请输入一个数字:" num
echo $[$num*2]
}
result=`test1`
echo $result
return的用法
user () {
if [ $USER = root ]
then
echo "这是管理员用户"
else
echo "这不是管理员用户"
return 1
fi
}
5、函数的传参数
sum1 (){
sum=$[$1 +$2]
echo $sum
}
read -p "请输入第一个参数:" num1
read -p "请输入第一个参数:" num2
sum1 $num1 $num2
sum1 () {
sum=$[$1 + $2]
echo $sum
}
sum1 10 20
函数变量的作用范围:
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中函数的变量默认全局有效
将变量限定在函数内部使用local命令
6、使用函数文件
我们可以新建一个专门存放函数的文件
7、函数的作用范围
8、函数递归
函数调用自己本身的函数
#阶乘
5! 1* 2 * 3 * 4 * 5
二、数组
1、基础
定义数组格式:
1. 数组名=(value0 value1 value2 value3 ......)
2. 数组名=([0]=value [1]=value1 [2]=value2 ....)
3. 列表名="value0 value1 value2 value3 ...... "
数组名=($列表名)
4. 数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
数组的包括数据类型
- 数值型
- 字符型
- 混合型数值加字符
使用" "或' '定义单引号或双引号括起来
例一成绩测试脚本
set -x
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then echo "$GRADE 分!优秀"
set +x
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格"
else
echo "$GRADE 分?不合格"
fi