如何使用Linux睡眠命令暂停Bash脚本

睡眠命令使您的Linux计算机什么也不做。也许这与直觉不符,但有时需要一段时间的不活动。本文将向您展示如何有效地使用此Bash shell命令。

使用睡眠很简单。在命令行中键入睡眠、空格、数字,然后按Enter键。

sleep 5

光标将消失五秒钟,然后返回。发生了什么?在命令行上使用睡眠指示Bash在您提供的持续时间内暂停处理。在我们的示例中,这是5秒。

我们可以按天数、小时数和分钟数传递睡眠持续时间,也可以以秒为单位传递睡眠持续时间。要做到这一点,需要在持续时间中加上d、h、m或s的后缀。要使睡眠暂停1天4小时7分5秒,请使用如下命令:

sleep 1d 4h 7m 5s

后缀s(表示秒)是可选的。没有后缀,睡眠将把任何持续时间视为秒。假设你想让睡眠暂停5分20秒。此命令的一种正确格式是:

sleep 5m 20

如果您忘记在分钟持续时间上提供m后缀,您将不会指示睡眠暂停5秒,然后再次暂停20秒。所以睡眠会暂停25秒。

许多命令要求您以特定的顺序提供参数,但是休眠是非常宽容的。你可以按任何顺序提供它们,睡眠会让它们变得有意义。您还可以提供浮点数作为参数。例如,0.5h是表明您希望睡眠暂停半小时的有效方式。

以下所有(越来越古怪的)命令告诉睡眠暂停10秒。

sleep 10sleep 5 5sSleep 1 1 1s 1 1 1s 1 2sleep 0.16667m

使用休眠在命令前暂停

休眠命令可用于在执行命令之前暂停。此命令将暂停15秒,然后发出嘟嘟声。

sleep 15 && echo -en '\007'

使用睡眠在两个命令之间暂停

您可以使用SLEEP在两个命令之间进行暂停。此命令将列出Documents目录中的文件,暂停5秒钟,然后将当前工作目录更改为您的主目录:

ls -R ~/Documents && sleep 5 && cd ~

使用休眠暂停脚本的执行

您可以在shell脚本中使用睡眠命令来暂停脚本的执行一段精确的时间。通常,这样做是为了让一些进程在脚本继续处理之前有足够的时间完成。您还可以使用它来限制脚本向其他资源发出的请求的速率。

为了准确演示这一点,这里有一个使用cURL调用google web服务的脚本。当您使用图书的ISBN号查询Web服务时,它会使用有关该图书的JSON数据的转储进行响应。我们可以通过JQ实用程序传递数据来解析该数据,以检索书名。这样脚本就不会给Web服务带来压力,它会在Web请求之间休眠一秒钟。

创建一个包含以下文本的文件,并将其另存为.check_book.sh。

#!/bin/bash for book in `cat $1` do echo $book":" curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title' echo "" sleep 1 done echo "All done."

键入以下命令以设置执行权限并使脚本可执行。

chmod +x check_book.sh

该脚本需要curl和jq实用程序。如果您使用的是Ubuntu或其他基于Debian的发行版,请使用apt-get将这些软件包安装到您的系统上。在其他Linux发行版上,请改用您的Linux发行版的包管理工具。

sudo apt-get install curlsudo apt-get install jq

创建一个包含以下数字的文本文件,并将其另存为books.txt。

9781565921276 9781874416685 9781565921672 9780521431088 9781491941591

运行check_book.sh脚本并将books.txt文件作为参数传入。

./check_book.sh books.txt

每隔一秒向Google web服务发出请求。在查询每个ISBN编号后不久,书名就会出现。

这就是我们要睡觉的全部。check_book.sh脚本的内部工作原理超出了本文的范围。选择该脚本纯粹是为了说明睡眠命令的有效用法。如果您希望了解更多关于脚本的两个主要组成部分的信息,请参考CURL项目页面和JQ在线手册。

相关文章