Sua variável $flag
é redundante - você a configura e depois a testa imediatamente. Você poderia apenas ecoar em vez de configurá-lo originalmente. Então a lógica é:
- capture opts / opções
- verifique se CELL, NODE e SERVER estão definidos
- verifique se INI_HEAP ou MAX_HEAP está definido e é um int
#get the arguments -c for cell, -n for node, -s for server, -i for initial heap, -m for max heap
while getopts c:n:s:i:m: opt; do
case $opt in
c)
CELL=$OPTARG
;;
n)
NODE=$OPTARG
;;
s)
SERV=$OPTARG
;;
i)
INI_HEAP=$OPTARG
;;
m)
MAX_HEAP=$OPTARG
;;
?)
echo "Usage: a.sh -c <CELL> -n <NODE> -s <SERVER> [-i <INITIAL HEAP> | -m <MAX HEAP>]"
exit 1
;;
esac
done
#test if cell name is not null
if [[ -z "$CELL" || -z "$NODE" || -z "$SERV" ]]; then
echo "Cell, Node and Server are mandatory values"
echo "Usage: a.sh -c <CELL> -n <NODE> -s <SERVER> [-i <INITIAL HEAP> | -m <MAX HEAP>]"
exit 1
fi
#make sure either -i or -m was used (or both) and is an integer
shopt -s extglob
if [[ ( -z "$INI_HEAP" && -z "$MAX_HEAP" ) || -n "${INI_HEAP##+([0-9])}" || -n "${MAX_HEAP##+([0-9])}" ]]; then
echo "Initial heap size or maximum heap size (or both) must be specified, and must be an integer"
exit 1
fi
shopt -u extglob