miten komentojonon komentosarjan liput ja argumentit jäsennetään oikein getoptsilla

Minä käytän tätä:

esimerkiksi ./imgSorter.sh -d directory -f format

skriptien sisältö on:

#!/bin/bash while getopts ":d:f:" opt; do case $opt in d) echo "-d was triggered with $OPTARG" >&2 ;; f) echo "-f was triggered with $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done 

käyttötapaukset:

$ ./imgSorter.sh -d myDir -d was triggered with myDir OK

$ ./imgSorter.sh -d -f myFormat -d was triggered with -f NOK: miten merkkijonoa alkavaa merkkijonoa ei tunnisteta lipuksi?

Vastaa

Olet sanonut getopts, että -d -vaihtoehdon pitäisi ottaa argumentti, ja komentorivillä käytetään -d -f myformat, joka selvästi (?) sanoo ”-f on argumentti, jonka annan vaihtoehdolle -d ”.

Tämä ei ole virhe koodissa, vaan komentorivin komentosarjan käytössä.

Koodisi on varmistettava, että vaihtoehto-argumentit ovat oikein ja että kaikki vaihtoehdot on asetettu asianmukaisella tavalla.

Mahdollisesti jotain sellaista kuin

while getopts "d:f:" opt; do case $opt in d) dir=$OPTARG ;; f) format=$OPTARG ;; *) echo "error" >&2 exit 1 esac done # If -d is *required* if [ ! -d "$dir" ]; then echo "Option -d missing or designates non-directory" >&2 exit 1 fi # If -d is *optional* if [ -n "$dir" ] && [ ! -d "$dir" ]; then echo "Option -d designates non-directory" >&2 exit 1 fi 

Jos -d -vaihtoehto on valinnainen ja jos haluat käyttää oletus -arvoa muuttujalle dir yllä olevassa koodissa aloitetaan asettamalla dir oletusarvoon ennen while silmukka.

Komentorivivaihtoehto ei voi ottaa eikä ottaa argumenttia.

Kommentit

  • ok kiitos @Kusalananda, oletin väärin, että getopit vievät kaiken – lipun alkuun.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *