Пожалуйста, покажите формат ввода, формат аргумента и некоторые пояснения к ним.А пока подправлен для удобства чтения и обработки ошибок - отредактируйте по вкусу.YMMV.
#!/bin/bash
. ~/.bash_profile
ops () { # do some stuff
: some sets of commands ...
}
die() {
printf "%s\n\n Use: $0 x y z ...\n\n" "$1" >&2
kill -term $$ # exit in function behaves like return
}
# dt=$(date +"%Y.%m.%d") # unused
case "$#" in
0|1) die "Insufficient arguments" ;;
esac
tar zvxf "$SHARE"/*.gz -C "$SHARE/landing/" || die "tar failed"
sleep 3
infile="$SHARE/landing/dir/ApprovedList.$1"
[[ -e "$infile" ]] || die "$infile does not exist"
[[ -r "$infile" ]] || die "$infile is nor readable by $0 as $LOGNAME"
while read -r line
do case "$1" in
A|B|C) case "$2" in
*"$line"*|ALL) ops ;;
*) : data does not match, skipping ;;
esac ;;
*) die "Invalid arg1 '$1'";;
esac
done < "$infile"
Примечания:
Если вам требуется точно 2 аргумента, то давайте проверим именно это:
die() {
printf "%s\n\n Use: $0 x y\n\n" "$1" >&2
kill -term $$ # exit in function behaves like return
}
и
case "$#" in
2) ;;
*) die "Incorrect # of arguments" ;;
esac
Также, лучше, чем kill
- добавьте trap
вверху:
trap 'echo >&2 "ERROR in $0($BASH_SOURCE) at line $LINENO: [$BASH_COMMAND]"; exit $LINENO;' ERR
и используйте буквальную ошибку, возвращаемую в функцию.
die() {
printf "%s\n\n Use: $0 x y\n\n" "$1" >&2
return 1
}