• 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

    效果和上面的一样的

  • 相关阅读:
    K8S知识点(五)
    Python程序设计——厄拉多塞素数筛选法的应用
    MySQL实战基础知识入门(13):数据类型
    DIN EN ISO 4589-2塑料 用氧指数法测定燃烧行为 第2 部分:室温试验
    好用的跨平台同步笔记工具,手机和电脑可同步的笔记工具
    「地埋式积水监测站」智慧防汛,科技先行
    [安网杯 2021] REV WP
    考研结束大半年,研0这些时间普通人的一些感触(附开学flag)
    Java基础
    构建网站遇到的一些问题(浏览器缓存问题)
  • 原文地址:https://blog.csdn.net/yy8623977/article/details/125935634