getopts in Bash-Skript verwenden

Fumbani Banda 19 Januar 2022
  1. Parse-Optionen mit Argumenten in Bash getopts
  2. Parse-Optionen ohne Argumente in Bash getopts
getopts in Bash-Skript verwenden

Dieses Tutorial zeigt die Verwendung von getopts in Bash-Skripten, indem Optionen mit Argumenten und Optionen ohne Argumente geparst werden.

Parse-Optionen mit Argumenten in Bash getopts

Vor den Buchstaben n und c steht :. Dies bedeutet, dass wir erwarten, dass immer dann ein Argument bereitgestellt wird, wenn die Option -n oder -c verwendet wird. Die Variable opt enthält den Wert der aktuellen Option, die von getopts geparst wurde.

while getopts n:c: opt
do
    case "${opt}" in
          n) name=${OPTARG};;
          c) country=${OPTARG}
     esac
done
echo "I am $name";
echo  "And I live in $country";

Wenn wir das Skript ausführen, liefert die Option -n John als Argument, während die Option -c Britain als Argument bereitstellt.

bash flags.sh -n John  -c Britain

Ausgabe:

I am John
And I live in Britain

Parse-Optionen ohne Argumente in Bash getopts

Dies verwendet ein einfaches Bash-Skript, das das Skript usage ausgibt, wenn die Option -h übergeben wird, und den Inhalt des Ordners, wenn die Option -p verwendet wird, mit einem angegebenen Pfad zum Ordner als Streit.

Das erste : bedeutet, dass getopts keine Fehler meldet. Stattdessen werden wir die Fehler selbst behandeln. Der Buchstabe p hat ein : davor, der Buchstabe h nicht. Dies bedeutet, dass wir immer dann, wenn die Option -p verwendet wird, ein Argument erwarten, die Option -h jedoch ohne Argument verwendet werden kann.

Wenn die Option -h übergeben wird, ruft sie die Funktion usage auf. Die Option -p weist das übergebene Argument der Variablen path zu, die dann als Argument an die Funktion list übergeben wird. Das * gibt die Aktion an, die ausgeführt werden soll, wenn eine Option übergeben wird, die nicht -h oder -p ist.

#!/bin/bash

function usage {
       printf "Usage:\n"
       printf " -h                               Display this help message.\n"
       printf " -p <folder path>                 List contents of specified folder.\n"
       exit 0
}

function list {
       ls -l $1
}

while getopts :p:h opt; do
    case ${opt} in
      h)
         usage
        ;;
      p) path=${OPTARG}
         list $path
         #echo $folder
       ;;
      *)
          printf "Invalid Option: $1.\n"
          usage
       ;;
     esac
done

Führen Sie das Skript mit der Option -h aus:

 ./getopts.sh -h
Usage:
 -h                               Display this help message.
 -p <folder path>                 List contents of specified folder.

Führen Sie das Skript mit der Option -p aus:

./getopts.sh -p /home/fumba/example
total 0
-rw-r--r-- 1 fumba fumba    0 Nov  1 21:43 file1.txt
-rw-r--r-- 1 fumba fumba    0 Nov  1 21:43 file2.txt
drwxr-xr-x 1 fumba fumba 4096 Nov  1 21:43 pictures

Führen Sie das Skript mit einer ungültigen Option -k aus:

./getopts.sh -k
Invalid Option: -k.
Usage:
 -h                               Display this help message.
 -p <folder path>                 List contents of specified folder.
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Verwandter Artikel - Bash Script