getopts — встроенная команда bash для разбора флагов вида -v, -f file:
while getopts "v:f:h" opt; do
case $opt in
v) VERBOSE=$OPTARG ;;
f) FILE=$OPTARG ;;
h) exit 0 ;;
esac
done
shift $((OPTIND - 1))
Двоеточие после буквы (v:, f:) — флаг требует аргумент, без него (h) — просто переключатель. $OPTIND после цикла указывает на первый нефлаговый аргумент, shift сдвигает $1 $2 ... на оставшиеся:
./script.sh -v 3 -f /etc/conf input.txt
# $VERBOSE=3 $FILE=/etc/conf $1=input.txt
Длинные флаги (--verbose) getopts не понимает — нужен внешний getopt или ручной case.
#linux #bash #sysadmin
