Для реализации этих двух логик:
- Если аргументов нет вообще, запустите все функции
- Для каждого переданного аргумента пропустить выполнение некоторой функции
Вы можете сделать это так:
#!/bin/bash
function func_i {
echo "I am i."
}
function func_b {
echo "I am b."
}
function main {
# Check if there are no arguments, run all functions and exit.
if [ $# -eq 0 ]; then
func_i
func_b
exit 0
fi
# Parse arguments -i and -b, marking them for no execution if they are passed to the script.
proc_i=true
proc_b=true
while getopts "ib" OPTION; do
case $OPTION in
i)
proc_i=false
;;
b)
proc_b=false
;;
*)
echo "Incorrect options provided"
exit 1
;;
esac
done
# Execute whatever function is marked for run.
if $proc_i; then func_i; fi
if $proc_b; then func_b; fi
}
main "$@"
Некоторые объяснения:
$#
возвращает количество аргументов, переданных скрипту. Если $#
равно 0, то в сценарий не было передано ни одного аргумента.
getops
принимает переключатели -i
и -b
, все остальные переключатели приведут к ошибке, обработанной в случае *)
.