大家好呀!今天简单聊一聊Shell中的case语句与函数。在多选择情况下使用case语句将非常方便,同时,函数的学习和使用对于学好一门编程语言也是非常重要的。

一、case语句

case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,则执行相匹配的命令。

1)语法结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case var in             定义变量;var代表是变量名
pattern 1) 模式1;用 | 分割多个模式,相当于or
command1 需要执行的语句
;; 两个分号代表命令结束
pattern 2)
command2
;;
pattern 3)
command3
;;
*) default,不满足以上模式,默认执行*)下面的语句
command4
;;
esac esac表示case语句结束

2)eg

eg1:当给程序传入start、stop、reload三个不同参数时分别执行相应命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
read -p "请输入你要的动作:" action
case $action in
start|S)
echo "service is running...."
;;
stop|T)
echo "service is stoped..."
;;
reload|R)
echo "service is restart..."
;;
*)
echo "请输入你要的动作"
;;
esac

$1:脚本后面的第一个参数。

二、函数

shell中允许将一组命令集合语句形成一段可用代码,这些代码块称为shell函数。

2.1 函数定义

1)基本语法

1
2
3
4
5
6
7
8
9
10
# 方式1
函数名()
{
函数体(一堆命令的集合,来实现某个功能)
}
# 方式2
function 函数名()
{
函数体(一堆命令的集合,来实现某个功能)
}

2)eg

创建一个fun1.sh的脚本

1
vim fun1.sh

在其中定义fun1和fun2两个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
fun1(){
echo hello world
hostname
}
function fun2(){
A=hello
# -z判断字符串是否为空
if [ -z "$A" ];then
echo "变量为空"
else
echo $A
fi

2.2 函数调用

主要有如下3种函数调用方式

1)在当前终端调用

当前命令行调用,只对当前用户生效

1
2
3
4
5
# 先source一下函数的文件
source fun1.sh
# 再调用(直接写函数名)
fun1
fun2


2)在脚本中调用

在脚本中调用,只对当前脚本生效。

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
menu(){
cat <<-END
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
END
}
menu //调用函数
1
2
#打印菜单
source ./fun1.sh

source:非标准执行方法

3)定义到用户环境变量中

在任何地方都生效(对所有用户生效)

1
2
3
# /etc/profile	/etc/bashrc		~/.bash_profile	  ~/.bashrc
# 在该文件中定义函数
vim /etc/bashrc

2.3 return作用

1)return可以结束一个函数,类似于循环控制语句break(结束当前循环,执行循环体后的代码)
2)return默认返回函数中最后一个命令的退出状态,也可以给定参数值,该参数值的范围是0-256之间
3)如果没有return命令,函数将返回最后一个Shell的退出值