目录
1. 函数
1.1 函数的命令替换
- 1. 函数
- 1.1 函数的命令替换
- 1.2 系统函数
- 1.2.1 basename
- 1.2.2 dirname
- 1.3 自定义函数
- 2. 消息的发送与接收
- 2.1 mesg
- 2.2 write
例如在字符串中进行函数的执行命令替换,如下所示:
[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
效果和上面的一样的