6628 |
07 Mar 22 |
nicklas |
# $Id $ |
6628 |
07 Mar 22 |
nicklas |
2 |
# |
6628 |
07 Mar 22 |
nicklas |
# Useful utility functions that can be used by other scipts. |
6628 |
07 Mar 22 |
nicklas |
# Include this file in other scripts with: |
6628 |
07 Mar 22 |
nicklas |
5 |
# |
6628 |
07 Mar 22 |
nicklas |
# source ./reggie-utils.sh |
6628 |
07 Mar 22 |
nicklas |
7 |
# |
6628 |
07 Mar 22 |
nicklas |
8 |
|
6669 |
06 Apr 22 |
nicklas |
# Enable output of script to stderr if debugging |
6669 |
06 Apr 22 |
nicklas |
10 |
if [ "${JOB_DEBUG}" ]; then |
6669 |
06 Apr 22 |
nicklas |
11 |
set -x; |
6669 |
06 Apr 22 |
nicklas |
12 |
fi |
6669 |
06 Apr 22 |
nicklas |
13 |
|
6653 |
23 Mar 22 |
nicklas |
# Use 1 thread/core but not more than slots assigned by the queue system |
6653 |
23 Mar 22 |
nicklas |
15 |
export NumThreads=`nproc` |
6653 |
23 Mar 22 |
nicklas |
16 |
if [ "${NSLOTS}" ]; then |
6653 |
23 Mar 22 |
nicklas |
17 |
NumThreads=$(( ${NSLOTS} < ${NumThreads} ? ${NSLOTS} : ${NumThreads} )) |
6653 |
23 Mar 22 |
nicklas |
18 |
fi |
6653 |
23 Mar 22 |
nicklas |
19 |
|
6653 |
23 Mar 22 |
nicklas |
20 |
|
6628 |
07 Mar 22 |
nicklas |
# Report progress to the $WD/progress file |
6628 |
07 Mar 22 |
nicklas |
# Two parameters are required: |
6628 |
07 Mar 22 |
nicklas |
# $1: The progress in percent |
6628 |
07 Mar 22 |
nicklas |
# $2: A message to display in the progress bar |
6630 |
07 Mar 22 |
nicklas |
25 |
rg_progress() |
6628 |
07 Mar 22 |
nicklas |
26 |
{ |
6628 |
07 Mar 22 |
nicklas |
27 |
local percent=$1 |
6628 |
07 Mar 22 |
nicklas |
28 |
local msg=$2 |
6628 |
07 Mar 22 |
nicklas |
29 |
echo "${percent} ${msg}" > ${WD}/progress |
6628 |
07 Mar 22 |
nicklas |
30 |
} |
6628 |
07 Mar 22 |
nicklas |
31 |
|
7106 |
12 Apr 23 |
nicklas |
# Report current time and message to the $WD/time.log fil |
7106 |
12 Apr 23 |
nicklas |
# One parameter is required |
7106 |
12 Apr 23 |
nicklas |
# $1: A message to add to the log file |
7106 |
12 Apr 23 |
nicklas |
35 |
rg_time() |
7106 |
12 Apr 23 |
nicklas |
36 |
{ |
7106 |
12 Apr 23 |
nicklas |
37 |
local msg=$1 |
7106 |
12 Apr 23 |
nicklas |
38 |
echo "`date +%H:%M:%S` ${msg}" >> ${WD}/time.log |
7106 |
12 Apr 23 |
nicklas |
39 |
} |
7106 |
12 Apr 23 |
nicklas |
40 |
|
6628 |
07 Mar 22 |
nicklas |
# Exit the script. An exit code is required and an optional |
6628 |
07 Mar 22 |
nicklas |
# message is printed to stderr |
6628 |
07 Mar 22 |
nicklas |
# $1: The exit code |
6628 |
07 Mar 22 |
nicklas |
# $2: A message that is echo-ed to stderr (optional) |
6630 |
07 Mar 22 |
nicklas |
45 |
rg_exit() |
6628 |
07 Mar 22 |
nicklas |
46 |
{ |
6628 |
07 Mar 22 |
nicklas |
47 |
local exitCode=$1 |
6628 |
07 Mar 22 |
nicklas |
48 |
local msg=$2 |
6628 |
07 Mar 22 |
nicklas |
49 |
if [ "$msg" ]; then |
6628 |
07 Mar 22 |
nicklas |
50 |
echo "${msg}" 1>&2 |
6628 |
07 Mar 22 |
nicklas |
51 |
fi |
6628 |
07 Mar 22 |
nicklas |
52 |
exit ${exitCode} |
6628 |
07 Mar 22 |
nicklas |
53 |
} |
6628 |
07 Mar 22 |
nicklas |
54 |
|
6653 |
23 Mar 22 |
nicklas |
# Check if one or more variables have been set or not. Exit with an error message if not. |
6653 |
23 Mar 22 |
nicklas |
# Note that parameters should be name of the environment variables to test, |
6653 |
23 Mar 22 |
nicklas |
# NOT the values of the variables. |
6653 |
23 Mar 22 |
nicklas |
58 |
rg_var_isset() |
6653 |
23 Mar 22 |
nicklas |
59 |
{ |
6653 |
23 Mar 22 |
nicklas |
60 |
for var in $@ ; do |
6653 |
23 Mar 22 |
nicklas |
61 |
if [ ! "${!var}" ]; then |
6653 |
23 Mar 22 |
nicklas |
62 |
rg_exit 1 "Variable '${var}' has no value" |
6695 |
25 Apr 22 |
nicklas |
63 |
elif [ "${JOB_DEBUG}" ]; then |
6653 |
23 Mar 22 |
nicklas |
64 |
echo "Variable '${var}-->${!var}' is set" |
6653 |
23 Mar 22 |
nicklas |
65 |
fi |
6653 |
23 Mar 22 |
nicklas |
66 |
done |
6653 |
23 Mar 22 |
nicklas |
67 |
} |
6653 |
23 Mar 22 |
nicklas |
68 |
|
6653 |
23 Mar 22 |
nicklas |
# Check if one or more variables have been set to a value that points to an |
6653 |
23 Mar 22 |
nicklas |
# existing directory. Exit with an error message if not. |
6653 |
23 Mar 22 |
nicklas |
# Note that parameters should be name of the environment variables to test, |
6653 |
23 Mar 22 |
nicklas |
# NOT directory paths. |
6653 |
23 Mar 22 |
nicklas |
73 |
rg_var_isdir() |
6653 |
23 Mar 22 |
nicklas |
74 |
{ |
6653 |
23 Mar 22 |
nicklas |
75 |
for dir in $@ ; do |
6653 |
23 Mar 22 |
nicklas |
76 |
if [ ! "${!dir}" ]; then |
6653 |
23 Mar 22 |
nicklas |
77 |
rg_exit 1 "Variable '${dir}' has no value" |
6653 |
23 Mar 22 |
nicklas |
78 |
elif [ ! -d "${!dir}" ]; then |
6653 |
23 Mar 22 |
nicklas |
79 |
rg_exit 1 "Directory '${dir}-->${!dir}' doesn't exists" |
6695 |
25 Apr 22 |
nicklas |
80 |
elif [ "${JOB_DEBUG}" ]; then |
6653 |
23 Mar 22 |
nicklas |
81 |
echo "Directory '${dir}-->${!dir}' exists" |
6653 |
23 Mar 22 |
nicklas |
82 |
fi |
6653 |
23 Mar 22 |
nicklas |
83 |
done |
6653 |
23 Mar 22 |
nicklas |
84 |
} |
6653 |
23 Mar 22 |
nicklas |
85 |
|
6653 |
23 Mar 22 |
nicklas |
# Check if one or more variables have been set to a value that points to an |
6653 |
23 Mar 22 |
nicklas |
# existing file. Exit with an error message if not. |
6653 |
23 Mar 22 |
nicklas |
# Note that parameters should be name of environment variables to test, |
6653 |
23 Mar 22 |
nicklas |
# NOT file paths. |
6653 |
23 Mar 22 |
nicklas |
90 |
rg_var_isfile() |
6653 |
23 Mar 22 |
nicklas |
91 |
{ |
6653 |
23 Mar 22 |
nicklas |
92 |
for file in $@ ; do |
6653 |
23 Mar 22 |
nicklas |
93 |
if [ ! "${!file}" ]; then |
6653 |
23 Mar 22 |
nicklas |
94 |
rg_exit 1 "Variable '${file}' has no value" |
6653 |
23 Mar 22 |
nicklas |
95 |
elif [ ! -f "${!file}" ]; then |
6653 |
23 Mar 22 |
nicklas |
96 |
rg_exit 1 "File '${file}-->${!file}' doesn't exists" |
6695 |
25 Apr 22 |
nicklas |
97 |
elif [ "${JOB_DEBUG}" ]; then |
6653 |
23 Mar 22 |
nicklas |
98 |
echo "File '${file}-->${!file}' exists" |
6653 |
23 Mar 22 |
nicklas |
99 |
fi |
6653 |
23 Mar 22 |
nicklas |
100 |
done |
6653 |
23 Mar 22 |
nicklas |
101 |
} |
6653 |
23 Mar 22 |
nicklas |
102 |
|
6628 |
07 Mar 22 |
nicklas |
# Check if one ore more directory exists. Exit with an error message if not. |
6630 |
07 Mar 22 |
nicklas |
104 |
rg_dir_exists() |
6628 |
07 Mar 22 |
nicklas |
105 |
{ |
6628 |
07 Mar 22 |
nicklas |
106 |
for dir in $@ ; do |
6628 |
07 Mar 22 |
nicklas |
107 |
if [ ! -d "${dir}" ]; then |
6628 |
07 Mar 22 |
nicklas |
108 |
rg_exit 1 "Directory '${dir}' doesn't exists" |
6695 |
25 Apr 22 |
nicklas |
109 |
elif [ "${JOB_DEBUG}" ]; then |
6653 |
23 Mar 22 |
nicklas |
110 |
echo "Directory '${dir}' exists" |
6628 |
07 Mar 22 |
nicklas |
111 |
fi |
6628 |
07 Mar 22 |
nicklas |
112 |
done |
6628 |
07 Mar 22 |
nicklas |
113 |
} |
6628 |
07 Mar 22 |
nicklas |
114 |
|
6628 |
07 Mar 22 |
nicklas |
# Check if one or more file exists. Exit with an error message if not. |
6630 |
07 Mar 22 |
nicklas |
116 |
rg_file_exists() |
6628 |
07 Mar 22 |
nicklas |
117 |
{ |
6628 |
07 Mar 22 |
nicklas |
118 |
for file in $@ ; do |
6628 |
07 Mar 22 |
nicklas |
119 |
if [ ! -f "${file}" ]; then |
6628 |
07 Mar 22 |
nicklas |
120 |
rg_exit 1 "File '${file}' doesn't exists" |
6695 |
25 Apr 22 |
nicklas |
121 |
elif [ "${JOB_DEBUG}" ]; then |
6653 |
23 Mar 22 |
nicklas |
122 |
echo "File '${file}' exists" |
6628 |
07 Mar 22 |
nicklas |
123 |
fi |
6628 |
07 Mar 22 |
nicklas |
124 |
done |
6628 |
07 Mar 22 |
nicklas |
125 |
} |