shell脚本
# 主要介绍shell函数,test测试语句
shell脚本进阶
1、条件判断语句(test语句)
在shell中需要进行流程的控制,可以通过test语句来进行条件判断
- test进行条件判断时,如果表达式成立则返回值为0,如果表达式不成立则返回值为非0
1、test 条件表达式
# 表示10大于20,返回值为非0的
[root@node0 ~]# test 10 -gt 20
[root@node0 ~]# echo $?
1
2、[ 条件表达式 ]
-
使用中括号
-
里面可以是使用符号,但是不能使用 && ||,下面在[[]] 里面可以使用
# -o 连接2个表达式
[root@node0 ~]# [ 10 -gt 20 -o 20 -le 30 ]
[root@node0 ~]# echo $?
0
3、[[ 条件表达式 ]]
# && 连接表达式
[root@node0 ~]# [[ 10 -gt 20 && 50 -le 30 ]]
[root@node0 ~]# echo $?
1
4、(( 算术表达式 ))
- 扩展的条件表达式,通常用于数值计算
5、test测试语句类别
-
数值的比较
-
字符串的比较
-
文件比较
-
逻辑判断
-
逻辑组合条件
-
&& 逻辑与 a && b 当2个同时成立的时候,结果为真,返回值为0
-
逻辑或 || 只有有一个为真,结果就为真
-
逻辑非 ! 对表达式取反,表达式为真,则返回值为假
-
-
6、综合案例
- test和if配合使用
[root@node0 mnt]# cat useradd.sh
# 用户不存在的话,就创建用户
# 存在的话,就显示该用户存在
# 判断是否输入一个参数
if [ -z "$1" ];then
echo "usage $0 input username "
exit 10
fi
# 用户不存在,也就是以为空
if [ -z $(cut -d : -f 1 /etc/passwd | grep -o $1) ];then
useradd $1
if [ $? -eq 0 ];then
echo "$1 is create"
fi
else
echo "$1 is created"
fi
- test和while配置使用
2、shell函数
-
对重复的指令进行简化,提高运行的效率
-
shell的函数还支持传参
1、三种函数定义
1、function 函数名()
function 函数名() {
# 函数体
}
# 调用函数
函数名
2、函数名()
- 这个是最常用的
函数名(){
# 函数体
}
# 调用函数
函数名
3、function
function 函数名 {
# 函数体
}
# 调用函数
函数名
2、函数变量和操作
1、常见的指令
# 查看系统中已经生效的函数
[root@node0 mnt]# declare -f
unset 取消变量 也可以取消函数
2、全局变量
-
在脚本中一直生效
-
不建议这样定义,因为后面的其他函数可能会有冲突的
[root@node0 mnt]# cat 1.sh
demo (){
p=123 # 直接在函数里面定义变量,就是全局变量,在这个脚本中都生效
}
demo
echo "$p"
3、局部变量
-
函数调用完,就销毁
-
local 变量=变量值
[root@node0 mnt]# cat 1.sh
demo (){
local p=123
echo "$p"
}
demo # 调用完后,这个变量p就被销毁了
echo "#############"
echo "$p"
echo "#############"
# 输出结果
[root@node0 mnt]# bash 1.sh
123
#############
#############
4、位置参数
- $1 就是函数后的第一个参数
5、函数在外部文件调用
- 就是一个函数写在一个文件中,没有调用,然后在另一个文件中加载即可
[root@node0 mnt]# cat 1.sh
demo (){
echo "1"
}
[root@node0 mnt]# cat 2.sh
source 1.sh
demo
5、函数返回值
- return 作为函数的返回值
[root@node0 mnt]# cat 1.sh
demo (){
echo "1"
return 100
}
demo
echo $?
[root@node0 mnt]# bash 1.sh
1
100

浙公网安备 33010602011771号