本节关键字:Linux、Bash Shell、函数、信号、文件包含
相关指令:echo、exit、trap、read、source
shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数,给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能。
函数名()
{
函数体(一堆命令的集合,来实现某个功能)
}
function 函数名()
{
函数体(一堆命令的集合,来实现某个功能)
echo hello
echo world
}
$ cat fun1.sh
#!/bin/bash
hello(){
echo "hello lilei $1"
hostname
}
menu(){
cat <<-EOF
1. mysql
2. web
3. app
4. exit
EOF
}
$ source fun1.sh
$ . fun1.sh
$ hello 888
hello lilei 888
$ menu
1. mysql
2. web
3. app
4. exit
$ vim ~/.bashrc
# 文件中增加如下内容:
hello(){
echo "hello lilei $1"
hostname
}
menu(){
cat <<-EOF
1. mysql
2. web
3. app
4. exit
EOF
}
注意:
当用户打开bash的时候会读取该文件
#!/bin/bash
#打印菜单
source ./fun1.sh
menu(){
cat <<-END
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
END
}
$ menu # 调用函数
信号 | 说明 |
---|---|
SIGHUP | 重新加载配置 |
SIGINT | 键盘中断^C |
SIGQUIT | 键盘退出 |
SIGKILL | 强制终止 |
SIGTERM | 终止(正常结束),缺省信号 |
SIGCONT | 继续 |
SIGSTOP | 停止 |
SIGTSTP | 暂停^Z |
题目:现有的跳板机虽然实现了统一入口来访问生产服务器,yunwei用户权限太大可以操作跳板机上的所有目录文件,存在数据被误删的安全隐患,所以希望你做一些安全策略来保证跳板机的正常使用:只允许yunwei用户通过跳板机远程连接后台的应用服务器做一些维护操作;公司运维人员远程通过yunwei用户连接跳板机时,跳出以下菜单供选择:
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
h. help
q. exit
当用户选择相应主机后,直接免密登录成功,如果用户不输入一直提示用户输入,直到用户选择退出。
#!/bin/bash
# jumper-server
# 定义菜单打印功能的函数
menu()
{
cat <<-EOF
欢迎使用Jumper-server,请选择你要操作的主机:
1. DB1-Master
2. DB2-Slave
3. Web1
4. Web2
h. help
q. exit
EOF
}
# 屏蔽以下信号
trap '' 1 2 3 19
# 调用函数来打印菜单
menu
#循环等待用户选择
while true
do
# 菜单选择,case...esac语句
read -p "请选择你要访问的主机:" host
case $host in
1)
ssh root@10.1.1.1
;;
2)
ssh root@10.1.1.2
;;
3)
ssh root@10.1.1.3
;;
h)
clear;menu
;;
q)
exit
;;
esac
done
# 将脚本放到yunwei用户家目录里的.bashrc里执行:
bash ~/jumper-server.sh
exit
. filename
# 或
source filename
# 在脚本test2.sh中包含脚本test1.sh
#!/bin/bash
. ./test1.sh
# 或者
source ./test1.sh