Fonksiyonlar, bölümünde argümanlardan kısaca bahsetmiştik. Peki, ya argümanı direkt scriptin dışından userdan ya da farklı bir programdan almamız gerekiyorsa ne yapacağız?
Yine fonksiyona argüman gönderir gibi scripte argüman gönderebiliriz.
./foobar.sh "foo" "bar"
$@
an array of arguments, ve$#
number of arguments olduğunu yine fonksiyonlar bölümünde söylemiştik.
foobar.sh’ın içeriği ise aşağıdaki gibi olsun.
#!/bin/bash
for i in $@; do
echo $i
done
echo "$# arguments passed into this script."
Çıktı aşağıdaki gibi olacaktır.
> foo
> bar
> 2 arguments passed into this script.
Güzel ama bu argümanlar sıralı olmak zorunda mı? Çok kullanışlı görünmüyorlar bu şekilde daha büyük scriptlerde işler çok karışacak ve kullanıcı hatasına elverişli bir kod ortaya çıkacak.
Burada ise devreye flaglar giriyor.
while getopts u:p: option; do
case $option in
u) user=$OPTARG;;
p) pass=$OPTARG;;
esac
done
echo "User: $user / Pass: $pass"
getopts, bu iş özelleştirilmiş bir anahtar sözcük. $OPTARG ise gönderilen argümanı saklayan değişken.
optstring’deki u:p:
optiondan sonra iki noktalar, bu seçeneğin bir argüman gerektirdiği bildiriyor. Eğer iki nokta yoksa, seçenek argüman almıyor demektir.
getopts u:p:abc:
. Burada u, p ve c seçenekleri argüman alırken, a ve b almıyor.
Stringin başındaki iki nokta ise errorları yakalamak içindir ve case içerisinde ? işareti ile test edilir.
getopts :u:p:abc:
case $option in
u) user=$OPTARG;;
p) pass=$OPTARG;;
c) varC=$OPTARG;;
a) # do something here
b) # do another thing here
?) echo "Is there a typo ?!?! $OPTARG";;
esac
done
```