您当前的位置: 首页 >  centos

Bulut0907

暂无认证

  • 1浏览

    0关注

    346博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Bulut0907 发布时间:2022-08-04 14:24:05 ,浏览量:1

目录
  • 1. 函数
    • 1.1 函数的命令替换
    • 1.2 系统函数
      • 1.2.1 basename
      • 1.2.2 dirname
    • 1.3 自定义函数
  • 2. 消息的发送与接收
    • 2.1 mesg
    • 2.2 write

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 系统函数 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.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.3 自定义函数

基本语法:

[ function ] funcname[()]
{
    Action
    [return int] 
}

注意:

  • 必须在调用函数地方之前,先声明函数
  • 函数使用$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 ~]#
2. 消息的发送与接收

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

2.1 mesg

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

[root@bigdata001 ~]# mesg
is y
[root@bigdata001 ~]# 

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

[root@bigdata001 ~]# mesg n
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 ~]#

查看接收到的消息

[root@bigdata001 ~]# 
Message from root@bigdata001 on pts/0 at 22:41 ...
hello world
china v5
EOF

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

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

效果和上面的一样的

关注
打赏
1664501120
查看更多评论
立即登录/注册

微信扫码登录

0.0396s