Я очень плохо знаком с сценарием оболочки и пишу сценарий, принимая некоторые аргументы от пользователя.Описание этих аргументов приведено в разделе ПОМОЩЬ.Я хочу проверить эти аргументы, переданные пользователем, чтобы он не передавал неверные аргументы.Некоторые из аргументов должны быть в определенном формате, например, datetime.-
#!/bin/bash
set -u
set -o pipefail
exit_status=0
FRUIT=fruit
CERT_PATH=cert
KEY_PATH=key
USERNAME=username
DATETIME=datetime
die() {
printf '%s\n' "$1" >&2
exit 1
}
show_help() {
cat << EOF
HELP:
==========================================================================================================================
Description:
--fruit or -f: fruit name: mango, strawberry, grapes, apple, kiwiXX
--cert or -c cert
--key or -k key
--username or -un username to be passed when fruit is apple
--datetime or -dt datetime format: 2018-11-07 10:02:01
--help or -h: help for <cmd>
==========================================================================================================================
EOF
exit "$exit_status"
}
set_arguments () {
while [ $# != 0 ]; do
case "${1:-}" in
-h|-\?|--help)
show_help # Display a usage synopsis.
exit
;;
-f|--fruit)
FRUIT="${2:-}"
shift
;;
-c|--cert)
CERT_PATH="${2:-}"
shift
;;
-k|--key)
KEY_PATH="${2:-}"
shift
;;
-un|--username)
USERNAME="${2:-}"
shift
;;
-dt|--datetime)
DATETIME="${2:-}"
fi
shift
;;
-?*)
show_help
exit 1
;;
*)
die 'ERROR: unknown argument.'
;;
esac
shift
done
}
# get the incoming arguments and set the variables.
set_arguments "$@"
Аргумент --fruit не может быть ничем иным, кроме mango, strawberry, grapes, apple, or kiwi-qx-XX
.Если это kiwi
, оно должно содержать -qx- and a number
.Например: kiwi-qx-01
или kiwi-qx-02
или kiwi-qx-100
.Если фрукт является яблоком, пользователь должен передать аргумент username.Если это не яблоко, то пользователь не должен передавать имя пользователя.Дата и время должны иметь определенный формат, как показано в разделе ПОМОЩЬ.Как проверить эти переданные аргументы?Каков наилучший способ сделать это?