Portál AbcLinuxu, 14. května 2025 23:02

Dotaz: Bash: potíž s getopts

David Watzke avatar 24.12.2005 11:11 David Watzke | skóre: 74 | blog: Blog... | Praha
Bash: potíž s getopts
Přečteno: 642×
Odpovědět | Admin
Ahoj. Včera jsem se asi hodinu mořil s programováním (šlo mi to hrozně pomalu, skoro jsem spal. :-) Zalíbil se mi getopts a za pomocí návodu na Linux.com. Napsal jsem tedy:
while getopts ":d" options; do
 case $options in
  d|--delete ) echo rm -f `WL $3` ;;
 esac
done
pro zajímavost ještě ukážu funkci WL():
WL() {
s=`echo $1 | cut -d2 -f1`
r=''
while [ -n "$s" ]
 do
  l="${s:0:1}"
  u=`echo "$l" | tr '[:lower:]' '[:upper:]'`
  r="${r}[${l}${u}]"
  s="${s:1}"
 done
echo *.${r}
}
To jsem napsal jen na zkoušku. Jenže bych chtěl:
case $options in

aac2flac|aac2mp3|aac2mpc|aac2ogg|flac2mp4|flac2aac|
flac2mp3|flac2mpc|flac2ogg|mp32aac|mp32flac|mp42ogg|
mp42flac|mp42mp3|mp42mpc|mpc2aac|mpc2flac|ogg2aac|
ogg2flac|wma2aac|wma2flac|mp32ogg|mpc2ogg|ogg2mp3|
wma2ogg|mp32mpc|mpc2mp3|ogg2mpc|wma2mp3|wma2mpc)
$(echo $1 | cut -d2 -f1)2wav
wav2$(echo $1 | cut -d2 -f2)
rm -f *.wav
;;

esac

Jenže chci přece getopts, abych mohl zadávat parametry jak chci, v jakýmkoliv pořadí. Tak tam přece nemůžu hodit $1. To za prvý. A další věc, že to nefunguje. :-D Asi mu vadí dlouhý optiony, že chce jen písmena. Musím to pozměnit? Dále bych chtěl říct, že až to pak budu spouštět, chtěl bych wav2ogg, ne --wav2ogg. Uff, snad mě někdo pochopil...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.12.2005 14:59 Přemek Jordák | skóre: 12 | Beroun
Rozbalit Rozbalit vše Re: Bash: potíž s getopts
Odpovědět | | Sbalit | Link | Blokovat | Admin
On bere rovnou option s mínusem, takže místo --delete do toho skriptu dej jen -delete a pak by to mělo běhat. Ja to mam na konverzi mp3 do oggu takhle
while getopts ":hb:" OPTION
do
    case $OPTION in
        h | -help            ) help;;
                             
        b | -bitrate         ) BITRATE=$OPTARG;;
    esac
done
shift $(($OPTIND - 1))
Blogy neprohlížím, nepíši a ani se jim valně nesměji
David Watzke avatar 24.12.2005 15:12 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash: potíž s getopts
Dík. A ty parametry s mínusem být musí? :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
7.5.2008 11:57 Zdeno
Rozbalit Rozbalit vše Re: Bash: potíž s getopts
no nevim panove ale tenhle kod bude fungovat jen do te doby nez pouzijete dlouhy tvar... nasledne se totiz zacne prenaset vse co je za --b ... tedy v BITRATE mam ulozeno itrate ...
7.5.2008 12:14 qk_
Rozbalit Rozbalit vše Re: Bash: potíž s getopts
Odpovědět | | Sbalit | Link | Blokovat | Admin
No par poznamek proc to nejde
1) getopts je unixovej a unix implicitne nepovoluje dlouhe optiony. Tedy dlouhe optionuy nemuzou byt.
2) pokud chces dlouhy optiony pouzit getopt s -l

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.