GNU/Linux >> Linux Esercitazione >  >> Linux

Bash:analizza le bandiere e un argomento previsto (non opzionale)?

$ bash file.sh expected_arg -f optional_arg

Ho visto post che indirizzano usando $1 per afferrare il primo argomento

e post che affrontano l'utilizzo di getopts per l'analisi degli argomenti flag. Non ho visto un post che indirizzi entrambi.

Al momento sto accedendo a expected_arg tramite $1 .

Non riesco a elaborare il -f bandiera a tutti. Anche se ho anche questo nel mio script di test:

#!/bin/bash

dirname=$1

[[ -z  $dirname  ]] && echo "Project name required as an argument." && return

# get flags
verbose='false'
aflag='false'
bflag='false'
files='false'
while getopts 'abf:v' flag; do
  case "${flag}" in
    a) aflag='true' ;;
    b) bflag='true' ;;
    f) files="${OPTARG}" ;;
    v) verbose='true' ;;
    *) error "Unexpected option ${flag}" ;;
  esac
done

echo "$files"

echo "$HOME/Desktop/$dirname"

exit

Il terminale mostra:

Jills-MBP:~ jillr$ bash test.sh blah -f file
false
/Users/jillr/Desktop/blah

A meno che Cambio l'ordine degli argomenti, come in:

bash file.sh -f optional_arg expected_arg

Quale output del terminale:

Jills-MBP:~ jillr$ bash test.sh -f file blah
file
/Users/jillr/Desktop/-f

Quindi, naturalmente, -f viene elaborato come $1 , che non è quello che voglio. Ho bisogno di prendere il Expect_arg

Vincoli necessari:

  • Devo consentire un numero variabile di flag (da nessuno a più). Pertanto, la posizione di Expect_arg varierà
  • expected_arg è un must
  • Preferirei evitare di dover usare un altro flag per analizzare Expect_arg (come in, voglio evitare di fare qualcosa come $ bash test.sh -f file -d blah )

Come posso soddisfare questi vincoli?

Risposta accettata:

Non importa. Ho trovato questo post:Utilizzo di getopts per analizzare le opzioni dopo un argomento non di opzione

che sostanzialmente dice che posso risolvere il mio problema semplicemente inserendo shift dopo dirname=$1

Ciò consentirà di inserire gli argomenti come

$ bash file.sh expected_arg -f optional_arg

Linux
  1. In Bash, quando alias, quando script e quando scrivere una funzione?

  2. Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

  3. Come analizzare le intestazioni HTTP usando Bash?

  4. Bash - Comando data e spazio

  5. Differenza tra ${} e $() in Bash

Dichiarazione Bash:sintassi ed esempi

Sintassi ed esempi dell'istruzione Bash case

Bash pausa e continua

Comando di uscita Bash e codici di uscita

I migliori terminali Linux online e gli editor Bash online

Bash Scripting – Analizza gli argomenti negli script Bash usando getopts