Shell Scripting: Generate or Print Range of Numbers ( Sequence of Numbers for Loop )

One our reader asks:

How do I generate a range of numbers under BASH for loop command? For example, I need to run particular command inside loop 100 or 500 times. Basically I want function that counts FROM and TO a range of numbers like 50-10.

To print a sequence of numbers use GNU seq command. In olden days we use our own shell script. But no more dirty shell script, just use good seq command.

This is quite handy when you want to writing shell scripts that requires loop-using range of numbers.

seq command syntax

seq LAST
seq FIRST LAST
seq FIRST INCREMENT LAST

If FIRST or INCREMENT is omitted, it defaults to 1. That is, an omitted INCREMENT defaults to 1 even when LAST is smaller than FIRST. FIRST, INCREMENT, and LAST are interpreted as floating point values. INCREMENT is usually positive if FIRST is smaller than LAST, and INCREMENT is usually negative if FIRST is greater than LAST.

Try out following examples:
$ seq 5
Output:

1
2
3
4
5

Few more examples:$ seq 5 10
$ seq 0 2 10
$ seq 5 -1 1

seq command and shell script (for loop)

You can use seq command in bash for loop as follows:

#!/bin/bash
for i in $(seq 5)
do
  echo "Welcome $i times"
done

Bash for loop to generate a sequence of numbers

You can also use bash for loop as follows:

#!/bin/bash
for ((a=1; a <= 5 ; a++))
do
   echo "Welcome $a times."
done

Real World Experience

#!/bin/bash
# Script to move topics from old shared hosting to new lighttpd vps server
#
U="http://forum.cyberciti.biz/viewtopic.php?t="
rdu=""
for n in $(seq 1 521)
do
  rdu="$(lynx --dump $U$n | egrep "vt([0-9]+)\.html$" | awk '{ print $2}' | uniq)"
  if [ "$rdu" == "" ]; then
    :
  else
    echo "$n => \"$rdu\","
  fi
  rdu=""
done

Above script generates a new php code (array) to match with variable t so that we can send 301 redirect. So anyone visiting old forum url http://www.cyberciti.biz/nixcraft/forum/viewtopic.php?t=513 will be redirected to new url 😀
Next, I just need to copy and paste the array generated by shell script into viewtopic.php and all users are redirected to new url with 301 http code.

<?php
$URLS = array (
....
..
3 => "http://forum.cyberciti.biz/mysql-cluster-vt3.html",
4 => "http://forum.cyberciti.biz/nice-look-and-feel-vt4.html",
5 => "http://forum.cyberciti.biz/squid-monitoring-using-mrtg-vt5.html"
....
);
$top=$_GET['t'];
$u=$URLS[$top];
if ( isset($u)) {
  @include_once("../../include.genlib.php");
  movePage(301, "$u");
}
else
{
  @include_once("../../include.genlib.php");
  movePage(301, "http://forum.cyberciti.biz");
}
?>

Set a step value and generate a sequence number

In case, you are interested in my old (perhaps dirty) shell script 😉

#!/bin/bash
# Usage:
# ./script 1 5 +
# ./script 100 50 -
# where    START END +/-
FROM=$1
TO=$2
ACTION="$3"
if [ "$ACTION" == "+" ];
then
while [ $FROM -le $TO ]
do
  echo -n $FROM " "
  (( FROM++ ))
done
echo ""
else
while [ $FROM -ge $TO ]
do
  echo -n $FROM " "
  (( FROM-- ))
done
echo " "
fi

Run script as follows to set a step value and generate a sequence:
$ chmod +x script
$ ./script 5 10 +
$ ./script 20 10 -

🐧 If you liked this page, please support my work on Patreon or with a donation.
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source & DevOps topics via:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
28 comments… add one
  • Darshan Oza May 1, 2017 @ 15:55

    I want an output like

    1
    2 3
    4 5 6
    7 8 9 10

    Please replay fast….

  • Linda May 24, 2016 @ 9:38

    May i know an explanation of a regular expression in unix?

    and sed commands fully also plz!!!

  • oldman May 9, 2016 @ 11:49

    i will like to create 10 txt file but folder

    1.txt contain 0 inside,
    2.txt contain 1
    3.txt contain 2
    until
    10.txt contain 9

    how??

  • Bharath Kumar G Nov 29, 2015 @ 9:20

    Write a Shell script to take in a list of numbers and display the largest number

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.