This example shell scriptÂ
- shows the current directory and its contents
- shows the path where the shell looks for commands and
- compiles a small Fortran program using gfortran and executes it
#!/bin/bash
#
# **************************** LICENSE START ***********************************
#
# Copyright 2021 ECMWF. This software is distributed under the terms
# of the Apache License version 2.0. In applying this license, ECMWF does not
# waive the privileges and immunities granted to it by virtue of its status as
# an Intergovernmental Organization or submit itself to any jurisdiction.
#
# ***************************** LICENSE END ************************************
#
# Firstjob USER SERVICES NOVEMBER 2021 - ECMWF
#
#
# This shell-script:
#
# - shows the current directory and its contents
# - shows the path where the shell looks for commands and
# - where a Fortran program executes from
#
#
# This shell script produces the standard output file
#
# Firstjob.<JOB-ID>.out
#
# in the workdir directory (the user's $SCRATCH).
#
#
#-------------------------------
# setting options for SLURM
#-------------------------------
# Options that are specified within the script file should precede the
# first executable shell command in the file.
# All options, which are case sensitive, are preceded by #SBATCH.
# These lines become active only when the script is submitted
# using the "sbatch" command.
# All job output is written to the workdir directory, by default.
#SBATCH --qos=ef
# Specifies that your job will run in the queue (Quality Of
# Service) "ef". If this option is not specified, the job
# would run in queue "nf".
#SBATCH --job-name=Firstjob
# Assigns the specified name to the request
#SBATCH --output=Firstjob.%j.out
# Specifies the name and location of STDOUT where %j is the job-id
# The file will be # written in the workdir directory if it is a
# relative path. If not given, the default is slurm-%j.out in the
# workdir.
#SBATCH --error=Firstjob.%j.out
# Specifies the name and location of STDERR where %j is the job-id
# The file will be # written in the workdir directory if it is a
# relative path. If not given, the default is slurm-%j.outin the
# workdir.
#SBATCH --chdir=/scratch/...
# Sets the working directory of the batch script before it is
# executed.
#SBATCH --mail-type=FAIL
# Specifies that an email should be sent in case the job fails.
# Other options include BEGIN, END, REQUEUE and ALL (any state
# change).
#SBATCH --time=00:05:00
# Specifies that your job my run up to HH:MM:SS of wall clock
# time. The job will be killed if it exceeds this limit. If
# time is not defined, the default limit for the queue (qos)
# will be used.
#-------------------------------
# print the current directory and its content
#-------------------------------
echo "
Please note that your job will be executed in the specified workdir:"
pwd # prints the path name of the current directory
echo "
List of the content of the current directory:
"
ls -l
#-------------------------------
# show your PATH
#-------------------------------
echo "
This is your path:
"
echo $PATH
echo "
All the commands will be searched for in these directories
unless you give an absolute pathname for the command."
#-------------------------------
# change to $SCRATCHDIR
#-------------------------------
echo "
You should run your program in the directory \$SCRATCH or \$SCRATCHDIR.
All the files created in \$SCRATCHDIR will be deleted automatically
when the job terminates.
"
cd $SCRATCHDIR
#-------------------------------
# create a Fortran 90 program
#-------------------------------
# cat is used to read the Fortran program from the input stream
# and to write it to the file 'prog.f90'.
# cat reads line by line until it reaches a line which starts with EOF.
module load prgenv/gnu # or euqivalently "module load pg"
cat > prog.f90 <<EOF
program prog
!
! print a string to stdout
!
print *,'The FORTRAN program source file is called prog.f90'
print *,'The executable file is called a.out'
end program prog
EOF
#------------------------------
# compile and link
#------------------------------
gfortran -march=native -O3 prog.f90
# The compiler options -march=native -O3 provide some basic optimisation.
#------------------------------
# execution
#------------------------------
echo "\n\n" # echoes 2 blank lines
./a.out # ./a.out is the absolute pathname of the command
# a.out; the '.' is replaced with the path of the
# current directory.
# If the current directory is given in your PATH,
# you can execute your program with 'a.out' instead
# of './a.out'
#-------------------------------
# show the content of the current directory after execution of the program
#-------------------------------
echo "
The current directory \$SCRATCHDIR now contains:
"
ls -l
#-------------------------------
# tidy up and terminate
#-------------------------------
echo "
In case you don't work in \$SCRATCHDIR the new files have to be deleted
manually if not needed any more, e.g.
/bin/rm -r filename "
exit 0 # terminate the script, returning 0 (default) as return code
# to the system
#
# There is one output file produced by this job:
#
# Firstjob.<JOB-ID>.out
#
# in the workdir directory.
#
# End of example job 'Firstjob'