Mohammadreza Hadizadeh

How to run multiple programs in a sequence using a bash script?

How to write a bash script that goes through each subdirectory inside a parent_directory and executes a command in each subdirectory?

Suppose there are 10 subdirectories inside a parent_directory with the following structure:

***parent_directory (name could be anything - doesn't follow a pattern)

— subdir1 (subdirectory names follow a specific pattern, e.g. fixed characters + number)
input.data (input of the code)
code.f (main code, here is a Fortran code)
Makefile (makefile to execute and run the code)
— subdir2
input files + codes + Makefile
— subdir3
input files + codes + Makefile
.
.
.
— subdir10

Suppose we want to run the codes in the first five subdirectories, i.e. subdir1-subdir5, wait for the processes to finish and then continue running the codes in the next five subdirectories, i.e. subdir6-subdir10.

The example of the bash script is as (
download the bash script file ):

#!/bin/bash
## exit on the first error.
set -e

# Add the full path of parent_directory to run the codes in the subdirectories
path=$(pwd)
## just for checking the path of the parent_directory
echo path= $path

## the min and the max values of the int variable i, changing from 1 to 5
i=1
imax=5

## do loop from i to imax
while [ $i -le $imax ]; do
## path of each subdirectory defined as "subdir" + integer i
pathi=$path/subdir$i
## just for checking the path of each subdirectory
echo pathi= $pathi
## cd to each subdirectory of the loop
cd $pathi
## compile and run the code in each subdirectory using Makefile ("Main" is the executable file)
make -f Makefile
nohup ./Main &
## adding the counter
let i=i+1
done

## Wait for the processes to finish
wait

i=6
imax=10

## do loop from i to imax
while [ $i -le $imax ]; do
## path of each subdirectory defined as "subdir" + integer i
pathi=$path/subdir$i
## just for checking the path of each subdirectory using Makefile ("Main" is the executable file)
echo pathi= $pathi
## cd to each subdirectory of the loop
cd $pathi
## compile and run the code in each subdirectory
make -f Makefile
nohup ./Main &
## adding the counter
let i=i+1
done

You can run the bash script (called "run.sh") by:
$ bash run.sh