GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash – Parse-Flags und ein erwartetes (nicht optionales) Argument?

$ bash file.sh expected_arg -f optional_arg

Ich habe Beiträge gesehen, die $1 adressieren um das erste Argument zu greifen

und postet diese Adresse unter Verwendung von getopts zum Analysieren von Flag-Argumenten. Ich habe keinen Beitrag gesehen, der beides anspricht.

Ich greife gerade auf expected_arg zu über $1 .

Ich kann das -f nicht verarbeiten Flagge überhaupt. Obwohl ich dies auch in meinem Testskript habe:

#!/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

Das Terminal zeigt:

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

Es sei denn Ich ändere die Reihenfolge der Argumente, wie in:

bash file.sh -f optional_arg expected_arg

Was das Terminal ausgibt:

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

Also wird -f natürlich als $1 verarbeitet , was ich nicht will. Ich muss das erwartete Argument holen

Erforderliche Einschränkungen:

  • Ich muss eine unterschiedliche Anzahl von Flags zulassen (von gar keinen bis zu mehreren). Daher wird die Position von "expected_arg" variieren
  • expected_arg ist ein Muss
  • Ich würde es lieber vermeiden, ein anderes Flag verwenden zu müssen, um den erwarteten_arg zu analysieren (wie in, ich möchte vermeiden, etwas wie $ bash test.sh -f file -d blah zu tun )

Wie kann ich diese Einschränkungen erfüllen?

Akzeptierte Antwort:

Egal. Ich habe diesen Beitrag gefunden:Using getopts to parse options after a non-option argument

was im Grunde besagt, dass ich mein Problem lösen kann, indem ich einfach shift platziere nach dirname=$1

Dadurch können die Argumente als

eingegeben werden
$ bash file.sh expected_arg -f optional_arg

Linux
  1. Wann soll in Bash ein Alias, wann ein Skript und wann eine Funktion geschrieben werden?

  2. Bash-Zeilenfortsetzungen nach &&und || Dokumentiert?

  3. Verwendung von und in der Bash-While-Schleife

  4. Bewahren Sie Anführungszeichen in Bash-Argumenten auf

  5. Was ist der Unterschied zwischen #!/usr/bin/env bash und #!/usr/bin/bash?

Bash-Declare-Anweisung:Syntax und Beispiele

Syntax und Beispiele für Bash-Case-Anweisungen

Bash brechen und fortfahren

Bash Exit-Befehl und Exit-Codes

Beste Online-Linux-Terminals und Online-Bash-Editoren

Bash-Skripting – Analysieren Sie Argumente in Bash-Skripten mithilfe von getopts