How to Pause a Bash Script With the Linux Sleep Command
Quick Links
The sleep command makes your Linux computer do nothing. Counter-intuitive perhaps, but a period of inactivity is sometimes just what's needed. This article shows you how to use this Bash shell command effectively.
Using sleep
is easy. On the command line type sleep
, a space, a number, and then press Enter.
sleep 5
The cursor will disappear for five seconds and then return. What happened? Using sleep
on the command line instructs Bash to suspend processing for the duration you provided. In our example this was five seconds.
We can pass durations to sleep
in days, hours, and minutes, as well as in seconds. To do this include a suffix of either d, h, m,
or s
with the duration. To cause sleep to pause for one day, four hours, seven minutes and five seconds, use a command like this:
sleep 1d 4h 7m 5s
The s
suffix (for seconds) is optional. With no suffix, sleep
will treat any duration as seconds. Suppose you wanted to have sleep
pause for five minutes and twenty seconds. One correct format of this command is:
sleep 5m 20
If you forget to provide the m
suffix on the minutes duration, you will instruct sleep
to pause for five seconds and then again for twenty seconds. So sleep
will pause for 25 seconds.
Many commands require you to provide parameters in a specific order, but sleep
is very forgiving. You can provide them in any order and sleep
will make sense out of them. You can also provide a floating point number as a parameter. For example, 0.5h is a valid way to indicate you wish sleep
to pause for half an hour.
All of the following (increasingly eccentric) commands tell sleep
to pause for 10 seconds.
sleep 10
sleep 5 5s
Sleep 1 1 1s 1 1 1s 1 2
sleep 0.16667m
Using Sleep to Pause Before a Command
The sleep
command can be used to give a pause before the execution of a command. This command would pause for 15 seconds and then give a bleep.
sleep 15 && echo -en '\007'
Using Sleep to Pause Between Two Commands
You can use sleep
to give a pause between two commands. This command would list the files in your Documents directory, pause for five seconds and then change the current working directory to your home directory:
ls -R ~/Documents && sleep 5 && cd ~
Using Sleep to Pause Execution of a Script
You can use the sleep
command in shell scripts to pause execution of the script for a precise amount of time. Typically, you'd do this to allow some process sufficient time to complete before the script continues its processing. You can also use it to rate-limit the requests a script makes to another resource.
To demonstrate exactly that, here is a script that calls out to a Google web service using curl
. When you query the web service with the ISBN number of a book, it responds with a dump of JSON data regarding that book. We can parse that data by passing it through the jq
utility to retrieve the title of the book. So that the script doesn't stress the web service, it sleeps for one second between web requests.
Create a file containing the following text, and save it as check_book.sh
.
#!/bin/bashfor 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."
Type the following command to set the execution permissions and make the script executable.
chmod +x check_book.sh
The script requires the curl
and jq
utilities. Use apt-get
to install these packages onto your system if you're using Ubuntu or another Debian-based distribution. On other Linux distributions, use your Linux distribution's package management tool instead.
sudo apt-get install curl
sudo apt-get install jq
Create a text file containing the following numbers, and save it as books.txt
.
97815659212769781874416685
9781565921672
9780521431088
9781491941591
Run the check_book.sh
script and pass in the books.txt
file as a parameter.
./check_book.sh books.txt
The requests are made to the Google web service at one second intervals. The title of the book will appear shortly after each ISBN number is queried.
That's all there is to sleep
. The inner workings of the check_book.sh
script are beyond the scope of this article. The script was chosen purely to illustrate a valid use of the sleep
command. If you wish to read more about the two main components of the script, refer to the curl
project page and the jq
on-line manual.
Linux Commands | ||
Files | tar·pv· cat·tac·chmod ·grep · diff· sed·ar· man·pushd·popd·fsck·testdisk·seq·fd·pandoc·cd·$PATH·awk·join·jq·fold·uniq·journalctl·tail·stat·ls·fstab·echo·less·chgrp·chown·rev·look·strings·type·rename·zip·unzip·mount·umount·install·fdisk·mkfs ·rm·rmdir ·rsync ·df ·gpg ·vi ·nano ·mkdir ·du ·ln ·patch ·convert ·rclone·shred·srm ·scp ·gzip·chattr ·cut ·find ·umask ·wc · tr | |
Processes | alias ·screen· top· nice·renice· progress·strace·systemd·tmux·chsh·history·at·batch·free·which·dmesg·chfn·usermod·ps· chroot·xargs·tty·pinky·lsof·vmstat·timeout·wall·yes·kill·sleep·sudo·su·time ·groupadd·usermod ·groups ·lshw ·shutdown·reboot·halt·poweroff ·passwd ·lscpu ·crontab ·date ·bg ·fg ·pidof ·nohup ·pmap | |
Networking | netstat·ping·traceroute·ip·ss·whois·fail2ban·bmon·dig·finger·nmap·ftp· curl· wget ·who·whoami·w ·iptables ·ssh-keygen · ufw ·arping ·firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts
ncG1vNJzZmivp6x7qbvWraagnZWge6S7zGhramhiboZwtM6wZK2nXaWutr%2FEZphmmpGotW6%2FwqugqaxdrLa1tIytn55lnJ67tsSMrKOenaBisLC5zJqlnWc%3D