перевірка аргументу Bash одного вкладиша, з і без перевірки каталогу
Ось кілька методів, які спрацювали на мене. Ви можете використовувати їх у будь-якому просторі імен глобального сценарію (якщо у глобальному просторі імен, ви не можете посилатися на функцію, вбудовану змінними)
швидкий і брудний один лайнер
: ${1?' You forgot to supply a directory name'}
вихід:
./my_script: line 279: 1: You forgot to supply a directory name
Fancier - назва та використання функції постачання
${1? ERROR Function: ${FUNCNAME[0]}() Usage: " ${FUNCNAME[0]} directory_name"}
вихід:
./my_script: line 288: 1: ERROR Function: deleteFolders() Usage: deleteFolders directory_name
Додайте складну логіку перевірки, не захаращуючи поточну функцію
Додайте наступний рядок до функції або сценарію, що отримує аргумент.
: ${1?'forgot to supply a directory name'} && validate $1 || die 'Please supply a valid directory'
Потім ви можете створити функцію перевірки, яка робить щось подібне
validate() {
#validate input and & return 1 if failed, 0 if succeed
if [[ ! -d "$1" ]]; then
return 1
fi
}
і функція матриці, яка скасовує сценарій у разі відмови
die() { echo "$*" 1>&2 ; exit 1; }
Для додаткових аргументів просто додайте додатковий рядок, що повторює формат.
: ${1?' You forgot to supply the first argument'}
: ${2?' You forgot to supply the second argument'}