shell管道及并串行

# 管道"|"

管道用法: command1 | command2 | command3 等等

[root@hadoop-master shell-test]# ps -ef|grep java
root       5304   2878  0 05:58 pts/1    00:00:00 grep --color=auto java
1
2

简单理解就是把前一个命令的输出结果当为下一个命令的数据入参,用管道比较形象,数据像水流一样从一个水管流到下一个水管。 再举个例子:

[root@hadoop-master shell-asy]# ls -s|sort -nr
4 test3.sh
4 test2.sh
4 test1.sh
4 start-syn.sh
4 start-asy.sh
总用量 20
1
2
3
4
5
6
7

-s是file size,-n是numeric-sort,-r是reverse,反转 这个命令就是将文件按照数据文件的大小按照从大到小进行排序并输出。

# 并行执行"&"

shell 通过“&”来并行执行shell脚本,相当于每一个脚本都是单独的进程。

脚本1

[root@hadoop-master shell-asy]# cat test1.sh 
#!/bin/bash
echo "脚本1开始执行 "`date +"%Y%m%d %H:%M:%S"`
sleep 5
echo "脚本1执行结束 "`date +"%Y%m%d %H:%M:%S"`
1
2
3
4
5

脚本2

[root@hadoop-master shell-asy]# cat test2.sh 
#!/bin/bash
echo "脚本2开始执行 "`date +"%Y%m%d %H:%M:%S"`
sleep 3
echo "脚本2执行结束 "`date +"%Y%m%d %H:%M:%S"`
1
2
3
4
5

脚本3

[root@hadoop-master shell-asy]# cat test3.sh 
#!/bin/bash
echo "脚本3开始执行 "`date +"%Y%m%d %H:%M:%S"`
sleep 5
echo "脚本3执行结束 "`date +"%Y%m%d %H:%M:%S"`
1
2
3
4
5

异步运行脚本start-asy.sh

[root@hadoop-master shell-asy]# cat start-asy.sh 
#!/bin/bash
echo "并行执行"
sh ./test1.sh &
sh ./test2.sh &
sh ./test3.sh &

wait
echo "主线程执行结束"
1
2
3
4
5
6
7
8
9

执行结果如下:

[root@hadoop-master shell-asy]# sh start-asy.sh 
并行执行
脚本1开始执行 20200917 07:21:00
脚本2开始执行 20200917 07:21:00
脚本3开始执行 20200917 07:21:00
脚本2执行结束 20200917 07:21:03
脚本1执行结束 20200917 07:21:05
脚本3执行结束 20200917 07:21:05
主线程执行结束
1
2
3
4
5
6
7
8
9

# 串行执行"&&"

shell中默认的就是串行执行脚本,如果将两条命令合并成一条执行可以加&&作为连接; 例如:执行脚本并输出执行时间

[root@hadoop-master shell-asy]# cat start-syn.sh 
#!/bin/bash
echo "串行执行"
sh ./test1.sh
sh ./test2.sh
sh ./test3.sh
1
2
3
4
5
6

下面是顺序执行脚本并输出执行时间

[root@hadoop-master shell-asy]# sh start-syn.sh && date +"%Y-%m-%d %T" 
串行执行
脚本1开始执行 20200917 07:26:52
脚本1执行结束 20200917 07:26:57
脚本2开始执行 20200917 07:26:57
脚本2执行结束 20200917 07:27:00
脚本3开始执行 20200917 07:27:00
脚本3执行结束 20200917 07:27:05
2020-09-17 07:27:05
1
2
3
4
5
6
7
8
9

# 参考链接

https://blog.csdn.net/u011047968/article/details/108636325

上次更新: 2022/04/15, 05:41:30
×