📜  在 Linux 中演示等待命令的 Shell 脚本(1)

📅  最后修改于: 2023-12-03 15:37:24.067000             🧑  作者: Mango

在 Linux 中演示等待命令的 Shell 脚本

在 Linux 中,我们可以通过编写 Shell 脚本来自动化一些任务。其中一个常见的任务是等待某个命令完成后再继续执行下一个命令。在本文中,我们将演示如何编写 Shell 脚本来等待命令。

等待命令的方法

在 Shell 中,我们可以通过以下两种方法来等待命令:

1. 使用等待命令

等待命令是一个内置的 Shell 命令,它的语法如下:

wait [n ...]

其中,n 表示子进程的 pid,如果没有指定 pid,wait 命令将会等待所有子进程结束。

我们可以在 Shell 脚本中使用该命令来等待某个命令的结束。下面是一个使用等待命令等待 ping 命令结束的示例脚本:

#!/bin/bash

ping -c 5 www.google.com
wait $!
echo "Ping completed"

在上述脚本中,$! 表示前台命令的进程id。在执行 ping 命令时,Shell 将启动一个子进程,并将其放在后台运行。当 ping 命令执行完后,我们使用 wait $! 命令等待子进程结束。当子进程结束后,Shell 将执行 echo "Ping completed" 命令。

2. 使用管道命令

另一个等待命令的方法是使用管道命令(|)。当我们将两个命令通过管道连接起来时,管道命令会在第一个命令完成后等待第二个命令执行完毕。

下面是一个使用管道命令等待 ping 命令结束的示例脚本:

#!/bin/bash

ping -c 5 www.google.com | {
    while read pong; do
        echo $pong
    done
    echo "Ping completed"
}

在上述脚本中,我们将 ping 命令通过管道连接到了 while read 循环中。我们通过管道命令建立了一个子 Shell,该子 Shell 将会等待 ping 命令结束后才会执行后续命令。当 ping 命令结束后,while read 循环中的代码将从 ping 命令的输出中读取 pong 行,并打印出来。当循环结束后,我们将会执行 echo "Ping completed" 命令。

总结

在本文中,我们学习了两种在 Shell 脚本中等待命令的方法:等待命令和管道命令。这些方法都可以用来等待某个命令的结束,从而在 Shell 脚本中实现一些自动化的任务。

例子
#!/bin/bash

# 定义两个后台进程
( sleep 10 && echo "Task 1 Completed" ) &
( sleep 5 && echo "Task 2 Completed" ) &

# 等待两个后台进程结束
wait

# 输出成功信息
echo "All tasks completed"

这个脚本会定义两个后台进程,在后台分别执行 sleep 命令,等待 5 秒和 10 秒,并分别打印出"Task 1 Completed"和 "Task 2 Completed"。在最后,我们使用 wait 命令等待两个后台进程结束,当两个后台进程结束后,我们将会打印出 "All tasks completed"。