Gönderen Konu: Komut İçinde Değişken Kullanımı  (Okunma sayısı 2489 defa)

HS-Abdullah

  • Administrator
  • Newbie
  • *****
  • İleti: 45
    • Profili Görüntüle
    • E-Posta
Komut İçinde Değişken Kullanımı
« : Ekim 06, 2009, 12:16:27 ÖS »
Merhaba

Arkdaşlar bugun konuya epey kafa yordum. Şimdi size değişken kullanımını anlatacağım. Bunu bir çok formda kullanabiliriz. Ben yanlızca anlamanız için en basit olarak anlatacağım. Bundan sonra örnek olarak toplu CHMOD değiştirmeleri kısmı backupslama veya toplu bir şekilde almak aklıma gelen yanlızca bir kaç şey. İhtiyaçlarımıza göre çok daha fazla şekillendirebiliriz.

Şimdi diyelim /home/user/test içinde bulunan a,b,c klasorlerinin yedeğini alacağız. Öncelikle bir klasor daha oluşturduk. Bu klasörde /home/user/test/user olacak ne tesadüf ki içinde 3 adet dosya olacak bunlarda ya aynı uzantıda veyahut uzantısız dosyalar olacaktır. Bunlarda a,b,c dosyalarıdır.

önce kodumuzu vereyim sonra bu kod'un yapımı konusunda konuşalım :

for zip in `ls /home/user/test/user|grep -v \/`; do tar -zcvf $zip.tar.gz /home/user/test/*; done

Bu kodun oluşturulmasını anlamanın en kolay yolu parça parça incelemek. Bende birkaç parçaya bölerek sizlere anlatacağım.

for zip in önce görmeyelim içindekileri düşünelim. ls komutu dizinin içinde bulunan dosyaları listelemek için kullanılır. Bunu sanırım herkes biliyordur. grep ise çıkan sonuçları ayıklamak için kullanılan bir koddur. Öncelikle bu ikisini tamamen kavrıyalım.

Gelelim 2. aşamaya :

SSH terminaline şuanda ls /home/user/test/user yazıyorum çıktıya bakalım.

./ ../ a b c

alt dizinleri alakadar etmemesi için grep -v \/ kullanıyoruz. ve Araya kod bağlacı | koyuyoruz.

ls /home/user/test/user|grep -v \/ şimdi çıktıya bakalım.
a
b
c

başardık. Şimdi diğer aşamaya geçelim yani for zip in `kodumuz` buna. Aslında kodu dikkatli inceleyenler bunu hemen anlıyacaklardır. for ingilizcede için anlamında kullanılır. Yani zip için `kod kullanılacak` bir anlamda değişkenin neye denk olduğunu anlıyoruz. ve bunu kullanırsan başına dolar işareti getiriyoruz $zip şeklinde aslında bu kısmı anladıysak %90 ı bitti demektir. Sözü daha uzatmadan diğer kısıma geçeyim.

Aslında bu kısım dayet bayip klasik tar -zcvf ( tar.gz leme kodunu kullandım). Normalde tar -zcvf dosyaadi.tar.gz /yol şeklinde bir kullanım gördük. Bunu değşkenli kullanmayı deniyelim.

tar -zcvf $zip.tar.gz /home/user/test/* mantık aynı ad yerine yanlızca $zip değişkenimiz geldi. sonra do ve done getiriyoruz. do ingilizcede çalışmak fiilidir. Done de 3. zamanıdır. Burdan aklımıza geldin. Ayrıcada aralarak ; kullanıyoruz. Matematiğimiz iyi ise bunuda mantık konusundan çıkara biliriz. Ve işte oldu son hali

for zip in `ls /home/user/test/user|grep -v \/`; do tar -zcvf $zip.tar.gz /home/user/test/*; done

Ayrıca yazarken aklıma geldi ama test etmedim. İkinci bir kısım kullanmadan direk cut -d '/' f1 ile klasorlerdende alabiliriz. Bunu siz test edersiniz..