Skip to content

Instantly share code, notes, and snippets.

@seddi
Created December 25, 2010 19:11
Show Gist options
  • Save seddi/755005 to your computer and use it in GitHub Desktop.
Save seddi/755005 to your computer and use it in GitHub Desktop.
/etc/passwd dosyasindan okuyarak istenilen bazi alanlari listelemek icin bir betik
#!/bin/bash
alani_goster() {
! [ $# -eq 1 ] && echo "simdilik alan adi tek olamali :) " && exit 1
alan=$1
ifs_save="$IFS"
case "$alan" in
"user")
while read line; do
IFS=":"
set $line
IFS="$ifs_save"
echo "$alan ==>> $1"
done </etc/passwd
;;
"group")
while read line; do
IFS=":"
set $line
IFS="$ifs_save"
echo "$alan ==>> $5"
done </etc/passwd
;;
"passwd")
while read line; do
IFS=":"
set $line
IFS="$ifs_save"
echo "$alan ==>> $2"
done </etc/passwd
;;
"kabuk")
while read line; do
IFS=":"
set $line
IFS="$ifs_save"
echo "$alan ==>> $7"
done </etc/passwd
;;
*)
echo "kullanim : ./file_name <alan_adi> "
echo "alan_adi =>> [ user ], [ passwd ], [ group ], [ kabuk ] "
echo "ornek kullanim : ./secilen_alani_goster.sh user "
exit 2 ;;
esac
}
alani_goster $1
@gdemir
Copy link

gdemir commented Dec 26, 2010

@sedat`` kod'da çok tekrar var.

DRY(Don't repeat yourself)

Şu şekilde hatasız olarak çalışacaktır.

 #!/bin/bash
 ifs_save="$IFS"
 alan=$1
 while read line; do
      IFS=":"
      set $line
      IFS="$ifs_save"

      case "$alan" in 
           "user") echo "$alan ==>> $1"
          "group") echo "$alan ==>> $5"
          "passwd") echo "$alan ==>> $2"
          *) echo "$alan ==>> $7"
      esac
 done </etc/passwd

@seddi
Copy link
Author

seddi commented Dec 26, 2010

@gokhan farkındamısın ne kadar takıp edıyorsun bılmıyorum ama oncekı gıstımde https://gist.github.com/748928 zaten ole yazmısım fakat onerdıgın cozumdekı yanlısı sen farketmemıssın!! onerdıgın cozumu zaten yaptım fakat degıstırme nedenım whıle ıcıne koydugun case ıfadelerınde dongu sırasında sureklı bır kontrol cabası ıcındesın yanı esas tekrardan kastın gorunus ıse tmm tekrar var ama dedgın cozumde ıse kod calısırken aynı seylerı bos yere tekrar edıyor sureklı aynı kontrolu yapıyor bence daha dıkkatlı olmalısın bu konuda ;)

@semihozkoroglu
Copy link

Şimdi bende bişey söylemek istiyorum Don't repeat yourself durumu kodun yazılısındaki kod tekrarımı yoksa işlem sırasındaki kod tekrarı mı?
Yani şunu söylemek istiyorum @gökhan senin yazdıgın kodda hangi satırın hangi sutununu bastıracagımız kararına her defasında bakıyoruz ancak @sedat ' ın yazdıgı kodda tamam fazla yazımlar var ama çalışma açısından bakarsan satırdaki sütünu bulup ondan sonra sadece o sütün için işlem yapıyor o yüzden Don't repeat yourself durumunu daha iyi anlamalıyız bence, kendi açımdan söylüyorum bunu çünkü bende kavrayamadım bu durumu..

@gdemir
Copy link

gdemir commented Dec 26, 2010

En başta bu kadar düzensiz yazmasak,
daha güzel olur okunmuyor :-(
Şimdi gel gelelim, bizim kod kısaltma hikayesine;
örneğin senin yavaş çalışır dediğin benim kodda, kişi dediki
"Efendim ben hem user hem de grubları yanyana görmek istiyorum."
dediğinde, caselerde bir işler döndürdükten sonra; sende oldu mu 2 while döngüsü ?
Demek ki benim dediğim kodda az bir hız zahiyatı olmasına rağmen,denetim kolaylığı oluyor.
Ve diğer koda göre 2 kat daha hızlı çalışıyor.

@seddi
Copy link
Author

seddi commented Dec 26, 2010

soledim ya iste ´https://gist.github.com/748928 ´ burada zaten bu dedıgın kod var fakat hocanın duzelt demesi uzerine duzelttim @gdemir

@gdemir
Copy link

gdemir commented Dec 26, 2010

Amaç tek hedefe yönelikse, tabiki bu kod doğru birşey demiyorum, ama;
değilse bu dediğim yolda gidilmeli bence.
Ayrıca bunlar clone edilebiliyor.gistpaste'de sorun var ama manualde olur.
git clone git://gist.github.com/755005.git
ayrı ayrı gistlerde oldugundan, hocanın yorumunu göremediğimden söylüyorum.

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