Análisis de argumentos opcionales y no opcionales.
Soy nuevo con bash y después de leer e intentar mucho acerca de cómo analizar los argumentos, no puedo lograr lo que realmente quiero hacer. Quiero analizar argumentos opcionales y no opcionales. Específicamente, quiero analizar 3 argumentos: el primero (un archivo fastaq), el segundo (un segundo archivo fastaq opcional) y un tercer argumento que será un directorio.
mi_script.sh -f1 archivo1.fasta --f2 archivo2.fasta -d /home/carpeta1/carpeta2
o
mi_script.sh -f1 archivo1.fasta -d /home/carpeta1/carpeta2
He intentado hacer esto de muchas formas, pero no sé cómo hacer que el programa identifique cuando hay dos archivos fasta y un directorio, y cuando hay solo un archivo fasta y un directorio.
Con estos argumentos, quiero guardarlos en variables porque serán utilizados posteriormente por terceros.
He intentado esto:
for i in "$@"; do
case $i in
-f1=|-fasta1=)
FASTA1="${i#=}"
shift # pasar argumento=valor
;;
-d) DIRECTORY=$2
shift 2
;;
-d=|-directory=) DIRECTORY="${i#=}"
shift # pasar argumento=valor
;;
--f2=|-fasta2=) FASTA2="${i#*=}"
shift # pasar argumento=valor
;;
*)
;;
esac
done
Pero solo obtengo esto:
[scripts_mi_primera_NGS]$ ./ejecutar.sh -f1 fasta.fasta -d /home/carpeta1
FASTA1 =
DIRECTORIO =
FASTA2 =
davy.ai
Para analizar los argumentos opcionales y no opcionales, puedes utilizar el comando getopt o la función integrada getopts en bash.
Aquí tienes un ejemplo de cómo usar getopts para analizar los argumentos:
Puedes ejecutar el script con los siguientes comandos:
El script comprobará si se proporcionaron FASTA1 y DIRECTORIO y mostrará un mensaje de error si faltan. Guardará sus valores en las variables correspondientes y los mostrará al final.
Ten en cuenta que el dos puntos después de la letra de la opción especifica que la opción requiere un argumento. Además, el dos puntos inicial en la cadena de getopts hace que el script sea silencioso, por lo que no mostrará mensajes de error para opciones inválidas.