Aşağıdaki program için bir bash betiği yazarken isteğe bağlı bağımsız değişkenler / bayraklar eklemek nasıl karıştı:
Program iki argüman gerektirir:
run_program --flag1 <value> --flag2 <value>
Ancak, birkaç isteğe bağlı bayrak vardır:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Ben kullanıcı argüman alır böylece bash komut dosyasını çalıştırmak istiyorum. Kullanıcılar sırayla yalnızca iki bağımsız değişken girerse, şöyle olur:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
Ancak, isteğe bağlı bağımsız değişkenlerden herhangi biri dahil edilirse ne olur? Olacağını düşünürdüm
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Peki ya 4 dolar verilirse 3 dolar verilmezse ne olur?
getopts
, her bir argüman kombinasyonunu belirtmem gerekir mi? 3 & 4, 3 & 5, 3 & 4 & 5, vb.
getopts
. : Diyelim tüm argümanlarla komut dosyasını çalıştırmak için kullanıcıların zorlamak demek run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
olarak programı çalıştırır program --flag1 VAL --flag2 VAL
. Eğer koştuysanız run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, program olarak çalışır program --flag1 VAL --flag2 VAL --optflag2 10
. Böyle bir davranışı nasıl elde edebilirsiniz getopts
?
getopts
istediğin şey bu. Bu olmadan, her bayrağı algılamak için switch deyimli bir döngü kullanabilirsiniz, isteğe bağlı veya değil.