GNU/Linux >> Tutoriels Linux >  >> Linux

Bash - Drapeaux d'analyse et argument attendu (non facultatif) ?

$ bash file.sh expected_arg -f optional_arg

J'ai vu des messages dont l'adresse utilise $1 saisir le premier argument

et publie cette adresse en utilisant getopts pour analyser les arguments des indicateurs. Je n'ai pas vu d'article traitant des deux.

J'accède actuellement à expected_arg via $1 .

Je ne peux pas traiter le -f drapeau du tout. Même si j'ai aussi ceci dans mon script de 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

Le terminal affiche :

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

Sauf Je change l'ordre des arguments, comme dans :

bash file.sh -f optional_arg expected_arg

Ce que le terminal affiche :

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

Donc naturellement, -f est traité comme $1 , ce qui n'est pas ce que je veux. J'ai besoin de saisir l'attendu_arg

Contraintes nécessaires :

  • Je dois autoriser un nombre variable de drapeaux (de aucun à plusieurs). Par conséquent, la position de expect_arg variera
  • expected_arg est indispensable
  • Je préférerais éviter d'avoir à utiliser un autre indicateur pour analyser l'argument attendu_arg (comme dans, je veux éviter de faire quelque chose comme $ bash test.sh -f file -d blah )

Comment puis-je satisfaire ces contraintes ?

Réponse acceptée :

Ça ne fait rien. J'ai trouvé ce post :Utiliser getopts pour analyser les options après un argument non-option

qui dit essentiellement que je peux résoudre mon problème simplement en plaçant shift après dirname=$1

Ce qui permettra d'entrer les arguments comme

$ bash file.sh expected_arg -f optional_arg

Linux
  1. Bash For Loop Guide et exemples

  2. Continuation de la ligne bash après &&et || Documenté?

  3. Comment parser un fichier CSV dans Bash ?

  4. Utiliser et dans la boucle while de Bash

  5. Différences de sous-shell entre bash et ksh

Bash declare Statement :Syntaxe et exemples

Syntaxe de l'instruction bash case et exemples

Bash pause et continuer

Commande de sortie Bash et codes de sortie

Meilleurs terminaux Linux en ligne et éditeurs Bash en ligne

Bash Scripting - Analyser les arguments dans les scripts Bash à l'aide de getopts