• Centos7 Shell编程之函数、消息的发送与接收


    1. 函数

    1.1 函数的命令替换

    例如在字符串中进行函数的执行命令替换,如下所示:

    [root@bigdata001 ~]# cat test.sh 
    #!/usr/bin/sh
    
    filename="$1"_test_$(date +%s)
    
    echo $filename
    
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# sh test.sh bulut
    bulut_test_1658480227
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    1.2 系统函数

    1.2.1 basename

    基本语法:basename [pathname] [suffix]
    功能描述:basename去掉最后一个/字符及其前面的所有字符,然后返回剩余的字符。如果指定了suffix,则会将剩余字符的后缀去掉

    示例

    [root@bigdata001 ~]# basename ./test.sh
    test.sh
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# basename /root/test.sh .sh
    test
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.2.2 dirname

    基本语法:dirname 文件路径
    功能描述:dirname去掉最后一个/字符及其后面的所有字符,然后返回剩余的字符

    示例:

    [root@bigdata001 ~]# dirname ./test.sh
    .
    [root@bigdata001 ~]# dirname /root/test.sh
    /root
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# cat test.sh
    #!/usr/bin/sh
    
    # 获取执行脚本的绝对路径
    dir=$(cd $(dirname $0); pwd)
    echo $dir
    
    [root@bigdata001 ~]# sh ./test.sh
    /root
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1.3 自定义函数

    基本语法

    [ function ] funcname[()]
    {
        Action
        [return int] 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:

    • 必须在调用函数地方之前,先声明函数
    • 函数使用$1获取第一个形参,$2获取第二个形参
    • 可以不进行return返回,则函数返回结果为函数体内最后一条命令的运行结果
    • 函数返回值只能是数值(0-255)
    • 函数返回值只能通过$?系统变量获取。可以使用echo返回非数值的函数结果,然后使用函数的命令替换进行函数返回值获取

    示例:

    [root@bigdata001 ~]# cat test.sh
    #!/usr/bin/sh
    
    function sum(){
    
        add_result=$[$1+$2]
        echo $add_result
        
    }
    
    add_result=$(sum 40 60)
    echo $add_result
    
    exit
    
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# sh test.sh
    100
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2. 消息的发送与接收

    可以利用Linux自带的mesg和write命令,向其它用户的一个终端发送消息

    2.1 mesg

    查看当前用户是否开启消息功能

    [root@bigdata001 ~]# mesg
    is y
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3

    消息功能的关闭(n)和开启(y)

    [root@bigdata001 ~]# mesg n
    
    • 1

    2.2 write

    向指定用户终端发送消息。发送消息的是root用户的pts/0终端,接收消息的是root用户的pts/1终端

    [root@bigdata001 ~]# who -T
    root     + pts/0        2022-07-23 22:31 (222.244.144.85)
    root     + pts/1        2022-07-23 22:38 (222.244.144.85)
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# write root pts/1
    hello world
    china v5
    ^C[root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看接收到的消息

    [root@bigdata001 ~]# 
    Message from root@bigdata001 on pts/0 at 22:41 ...
    hello world
    china v5
    EOF
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    也可以直接用管道符发送消息

    [root@bigdata001 ~]# echo -e "hello world\nchina v5" | write root pts/1
    
    • 1

    效果和上面的一样的

  • 相关阅读:
    “金山-讯飞”杯2024年武汉理工大学程序设计竞赛 A. Mobiusp败走***(思维题-点双连通分量、连通性)
    XSS初级漏洞靶场
    vscode 更新仓库新建的分支
    PFSK151 3BSE018876R1/3BSC980006R358 有源滤波器和无源滤波器的区别
    2023人机交互期末复习
    C语言课程回顾:十、C语言之 指针
    提高Qt开发软件运算性能提升
    大型集团企业数据集成研究
    Spring Boot Maven Plugin -- repackage目标;spring-boot-maven-plugin的executable配置
    Linux ARM平台开发系列讲解(PCIE) 2.13.1 从软件的角度去理解PCIE
  • 原文地址:https://blog.csdn.net/yy8623977/article/details/125935634