Linux Shell 010-函数

发布时间:2023年12月27日

Linux Shell 010-函数

本节关键字:Linux、Bash Shell、函数、信号、文件包含
相关指令:echo、exit、trap、read、source

函数的介绍

shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数,给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能。

函数的定义

函数定义方法1

函数名()
{
  函数体(一堆命令的集合,来实现某个功能)   
}

函数定义方法2

function 函数名()
{
   函数体(一堆命令的集合,来实现某个功能)
   echo hello
   echo world
}

函数中return的说明

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

函数的调用

当前命令行调用

$ 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
文章来源:https://blog.csdn.net/qq_45157350/article/details/135167824
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。