-
-
Save gdemir/787968 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
cevir() { | |
local msj=$1 | |
local default=$2 | |
while :; do | |
echo $msj | |
read cevap | |
[ -z "$cevap" ] && cevap=$default | |
case $cevap in | |
[Ee]) return 0;; | |
[Hh]) return 1;; | |
*) echo "ne diyorsun anlamiyorum";; | |
esac | |
done | |
} | |
if cevir "benle misin değil misin iskoçyalı ?" "e"; then | |
echo "nevet" | |
else | |
echo "nayir" | |
fi |
düzenledim hocam
local msj=$1'i tek satırda almadı, 2 satırda yaptım.
local msj
msj=$1 diye ama,
bunu neden yaptık, while'in içinde çalışıyor diye mi ?
neden yaptık? bu örnek için söylüyorum, elin alışsın diye (default
'u da local
yapmalıydın). local
ismi üzerinde lokal değişken tanımlıyor. aksi halde tüm o değişkenler global olacaktı. yani cevir
işlevinden sonra da hayatını sürdürecek ve belki bir yerde başını ağrıtacaktı. böyle kısa kodlarda gerek olmayabilir ama uzunca ve bol işlevli kodlarda mutlaka böyle yapman lazım. local
i iki satırda yazma gerekliliğine gelince, bu bir taşınabilirlik meselesi. bash
'te gerekmez (ki ben boş bulunup ona göre açıkladım), fakat POSIX (standart) shell'de gerekir. test için #!/bin/sh
she-bang'i #!/bin/bash
ile değiştir ve gör.
#!/bin/bash
'de local msj=$1
tek satırda hatasız çalıştı hocam, local
'i de anladım ona göre düzenledim.
while [ 1=1 ]; do
->while :; do
kalıbını kullan[ -z cevap ] ->
[ -z "$cevap" ]` (string karşılaştırmalarında daima ama daima tırnak kullan)msj=$1
->local msj=$1
, değişkeni yerelleştir