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

posted @ 2026-03-09 22:46  乔的港口  阅读(0)  评论(0)    收藏  举报