validación de un argumento de línea Bash, con y sin validación de directorio
Aquí hay algunos métodos que me han funcionado. Puede usarlos en el espacio de nombres de script global (si está en el espacio de nombres global, no puede hacer referencia a las variables integradas de la función)
un forro rápido y sucio
: ${1?' You forgot to supply a directory name'}
salida:
./my_script: line 279: 1: You forgot to supply a directory name
Fancier: nombre y uso de la función de suministro
${1? ERROR Function: ${FUNCNAME[0]}() Usage: " ${FUNCNAME[0]} directory_name"}
salida:
./my_script: line 288: 1: ERROR Function: deleteFolders() Usage: deleteFolders directory_name
Agregue una lógica de validación compleja sin saturar su función actual
Agregue la siguiente línea dentro de la función o secuencia de comandos que recibe el argumento.
: ${1?'forgot to supply a directory name'} && validate $1 || die 'Please supply a valid directory'
Luego puede crear una función de validación que haga algo como
validate() {
#validate input and & return 1 if failed, 0 if succeed
if [[ ! -d "$1" ]]; then
return 1
fi
}
y una función de troquel que aborta el script en caso de falla
die() { echo "$*" 1>&2 ; exit 1; }
Para argumentos adicionales, simplemente agregue una línea adicional, replicando el formato.
: ${1?' You forgot to supply the first argument'}
: ${2?' You forgot to supply the second argument'}