Skip to content

Instantly share code, notes, and snippets.

@gdemir
Created January 20, 2011 14:36
Show Gist options
  • Save gdemir/787968 to your computer and use it in GitHub Desktop.
Save gdemir/787968 to your computer and use it in GitHub Desktop.
e-h.sh
#!/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
@roktas
Copy link

roktas commented Jan 20, 2011

  • 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

@gdemir
Copy link
Author

gdemir commented Jan 21, 2011

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 ?

@roktas
Copy link

roktas commented Jan 21, 2011

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. locali 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.

@gdemir
Copy link
Author

gdemir commented Jan 21, 2011

#!/bin/bash'de local msj=$1 tek satırda hatasız çalıştı hocam, local'i de anladım ona göre düzenledim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment