Linux / UNIX: Run Command a Number of Times In a Row

last updated in Categories , ,

How do I run “foo” command 10 times (or n times) under Linux or UNIX like operating systems?

You can use bash shell loop (run code or command repeatedly) to run a command 10 times as follows.
How to run a command N times in bash
there are many ways to run a command N times in bash/ksh/zsh. Use syntax as per your shell.

Syntax

The syntax is:

## run command 10 times 
for i in {1..10}; do commandNameHere; done
 
## run script 20 times
for i in {1..10}; do /path/to/cache.script.sh; done

For example, run UNIX date command five times, enter:

for i in {1..5}; do date; done

You can also use c like bash for loop syntax:

for ((n=0;n<5;n++))
do
 command1
 command2
done

The for loop syntax for tcsh / csh / ksh and other shell may changes from version to version.

Using while loop

Use the bash/sh/ksh posix based while loop as follows:

## define end value ##
END=5
## print date five times ##
x=$END 
while [ $x -gt 0 ]; 
do 
  date
  x=$(($x-1))
done

repeat for zsh users

If you are using the Z shell (zsh)

repeat N { command }
repeat N { /path/to/script }
## print date five times on screen ##
repeat 5 { date }

Say hello to seq command

To print a sequence of numbers one can use the seq command too. The syntax is:
seq LAST
seq FIRST LAST
seq FIRST INCREMENT LASE
seq LAST | xargs command
seq FIRST LAST | xargs command
seq FIRST INCREMENT LASE | xargs command

To just print five number, run:
$ seq 1 5
OR
$ seq 5
Sample outputs:

1
2
3
4
5

Use the xargs command to run the date command five times:
$ seq 1 5 | xargs -I{} date
Sample outputs:

Tue Nov 28 00:32:52 IST 2017
Tue Nov 28 00:32:52 IST 2017
Tue Nov 28 00:32:52 IST 2017
Tue Nov 28 00:32:52 IST 2017
Tue Nov 28 00:32:52 IST 2017

You can use xargs with multiple commands line argument as follows:
$ seq 1 5 | xargs -I{} sh -c "date && sleep 1"
It is also possible to use the parallel command:
$ seq 5 | parallel 'echo {}'
$ seq 5 | parallel 'echo Hello $USER, {} times.'

See man page of the following command for more info:
$ man parallel
$ man xargs
$ man seq

A note about using Perl or Python

You can use python or Perl as follows to run date command 5 times:

#!/usr/bin/perl
for $i (1 .. 5) {
   system("date");
}

Python example:

#!/usr/bin/python
# Run unix date command 3 times 
import os;
for x in range(0,3):
    os.system("date")

Get 15% off on Linux Foundation certified SysAdmin, Progamming, Kubernetes/Containers and Open Stack certification & course. Use "SPLASH15" coupon code. Offer expires on August 27, 2018
training.linuxfoundation.org

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

11 comment

  1. Nice and useful article, indeed.
    A litte note:

    You said “For example, run UNIX date command five times, enter:”

    and then shows: for i in {1..10}; do date; done

    I mean: five times would be

    for i in {1..5}; do date; done

    But I know people understood what you’ve said.
    Thanks again!

  2. Moin,

    old style methods:

    for i in $(seq 5);do date;done
    for i in `seq 1 5`;do date;done
    for i in 1 2 3 4 5;do date;done
    for i in a b c d orwhatever;do date;done

    at last some crazy unuseful (only work with dirs with more than 5 items)

    for i in `ls /proc/*|head -n5`;do date;done

  3. Hi.

    I got this little function in my bash_aliases:
    repeat() { local i n; n=$1; shift; for ((i=1; i<=n; i++)); do "$@"; done; }

    then you can do # repeat 5 echo hey there

  4. Hi,

    I have another way to implement this.
    just use seq and xargs

    function __my_test { test $# -gt 1 && `seq 0 $1|xargs -i ${*#$1}`; }

  5. [felmo@localhost ~]$ seq 20 | xargs echo “TEST!”
    TEST! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

    this is the output from my fedora 27 terminal… how does this work exactly?

    1. The seq command display numbers from FIRST to LAST. For example print a sequence of numbers between 1 to 5

      seq 1 5
      seq 5
      seq 1 10
      # between 1 to 10 but increment by 2 #
      seq 1 2 10

    Have a question? Post it on our forum!