Belge

40 Adımda Linux Kabuğu ve Bash Komutu Kursu

Geçmişte kabuk, Unix benzeri sistemler için yerel komut satırı yorumlayıcısı olmuştur.  Unix’in en önemli özelliklerinden biri olduğu kanıtlandı ve yeni bir konu haline geldi.  Linux, Bash, Zsh, Tcsh ve Ksh dahil olmak üzere sağlam işlevselliğe sahip çeşitli güçlü kabuklar sunar.

Bu kabukların en şaşırtıcı özelliklerinden biri programlanabilir olmalarıdır.  Günlük işlerin üstesinden gelmek için basit ama etkili Linux kabuk komut dosyaları oluşturmak kolaydır.  Üstelik bu konu hakkında az da olsa bilgi sahibi olmanız sizi kısa sürede Linux konusunda uzman bir kullanıcı haline getirecektir.  Unix kabuk komut dosyası yazmaya ayrıntılı bir giriş için bizimle kalın.

Linux Kabuğu ve Bash Komut Dosyası Örnekleri

Linux’ta yapılan kabuk komut dosyalarının çoğunluğu bash kabuğunu içerir.  Ancak, belirli seçeneklere sahip uzman kullanıcılar genellikle Zsh ve Ksh gibi kabukları kullanır.  Örneklerimizde yaygın popülerlikleri ve geniş kullanılabilirlikleri nedeniyle çoğunlukla Linux bash betiklerine sadık kalacağız.

Ancak editörlerimiz bash dışındaki kabuklarla ilgilenen bazı kabuk betiği örneklerini de özetlemeye çalıştılar.  Sonuç olarak, farklı kabuk komut dosyaları arasında önemli bir benzerlik bulacaksınız.

Linux Bash Komut Dosyaları

Bourne Again Shell olan Bash, günümüzde çoğu Linux dağıtımında varsayılan komut satırı yorumlayıcısıdır.  İlk kez Sürüm 7 Unix’te tanıtılan önceki Bourne kabuğunun bir yükseltmesidir.  Bash kabuk komut dosyalarını öğrenmek, diğer kabuk komut dosyalarını çok daha hızlı anlamanıza olanak tanır.  Bu nedenle, ilk elden deneyim kazanmak için bu basit örnekleri kendiniz deneyin.

Linux bash script example

1. Hello World

Programcılar genellikle Merhaba Dünya programını öğrenerek yeni diller öğrenirler.  Bu, “Merhaba Dünya” dizesini standart çıktıya yazdıran basit bir programdır.  Daha sonra Vim veya Nano gibi bir editör kullanarak hello-world.sh dosyasını oluşturun ve aşağıdaki satırları bu dosyaya kopyalayın.

#!/bin/bash
echo "Hello World"

Dosyayı kaydedip çıkın.  Daha sonra aşağıdaki komutu kullanarak bu dosyayı çalıştırılabilir hale getirmeniz gerekir.

$ chmod a+x hello-world.sh

Bunu aşağıdaki iki komuttan herhangi birini kullanarak çalıştırabilirsiniz.

$ bash hello-world.sh
$ ./hello-world.sh

Betiğin içinde yankılanmak üzere iletilen dizeyi yazdıracaktır.

2. Yazdırmak için echo komutunu kullanma

Echo komutu bash’taki bilgileri yazdırmak için kullanılır.  C işlevi ‘printf’e benzer ve kaçış dizileri ve yeniden yönlendirme dahil olmak üzere birçok ortak seçenek sunar.

Aşağıdaki satırları echo.sh adlı bir dosyaya kopyalayın ve yukarıda yapıldığı gibi çalıştırılabilir hale getirin.

#!/bin/bash
echo "Printing text"
echo -n "Printing text without newline"
echo -e "\nRemoving \t special \t characters\n"

Ne yaptığını görmek için betiği çalıştırın.  -e seçeneği, echo’ya kendisine iletilen dizenin özel karakterler içerdiğini ve genişletilmiş işlevsellik gerektirdiğini bildirmek için kullanılır.

3. Yorumları Kullanma

Yorumlar dokümantasyon için faydalıdır ve yüksek kaliteli kod tabanları için bir gerekliliktir.  Kritik mantıkla ilgilenen kodların içine yorum koymak yaygın bir uygulamadır.  Bir satırı yorumlamak için ondan önce #(hash) karakterini kullanmanız yeterlidir.  Örneğin aşağıdaki bash betiği örneğini kontrol edin.

#!/bin/bash

# Adding two values
((sum=25+35))

#Print the result
echo $sum

Bu betik çıktı olarak 60 sayısını verecektir. İlk olarak, bazı satırlardan önce # kullanarak yorumların nasıl kullanıldığını kontrol edin.  Ancak ilk satır bir istisnadır.  Buna shebang denir ve sistemin bu betiği çalıştırırken hangi tercümanı kullanacağını bilmesini sağlar.

4. Çok satırlı yorumlar

Birçok kişi kabuk komut dosyalarını belgelemek için çok satırlı yorumları kullanır.  Comment.sh adlı bir sonraki komut dosyasında bunun nasıl yapıldığını kontrol edin.

#!/bin/bash
: '
This script calculates
the square of 5.
'
((area=5*5))
echo $area

:’ ve ‘ karakterlerinin içine çok satırlı yorumların nasıl yerleştirildiğine dikkat edin.

5. While Döngüsü

While döngüsü yapısı bazı talimatları birden çok kez çalıştırmak için kullanılır.  Bu kavramı daha iyi anlamak için while.sh adlı aşağıdaki komut dosyasına göz atın.

#!/bin/bash
i=0

while [ $i -le 2 ]
do
echo Number: $i
((i++))
done

Yani while döngüsü aşağıdaki formu alır.

while [ condition ]
do
commands 1
commands n
done

Köşeli parantezleri çevreleyen boşluk zorunludur.

6. For Döngüsü

For döngüsü, kullanıcıların kodlar üzerinde verimli bir şekilde yineleme yapmasına olanak tanıyan, yaygın olarak kullanılan başka bir bash kabuk yapısıdır.  Aşağıda basit bir örnek gösterilmiştir.

#!/bin/bash

for (( counter=1; counter<=10; counter++ ))
do
echo -n "$counter "
done

printf "\n"

Bu kodu for.sh adlı bir dosyaya kaydedin ve ./for.sh kullanarak çalıştırın.  Çalıştırılabilir hale getirmeyi unutmayın.  Bu program 1’den 10’a kadar olan sayıları yazdırmalıdır.

7. Kullanıcı Girişi

Komut dosyalarınızda kullanıcı etkileşimini uygulamak için kullanıcı girişi almak çok önemlidir.  Aşağıdaki kabuk komut dosyası örneği, bir kabuk programı içerisinde kullanıcı girişinin nasıl alınacağını gösterecektir.

#!/bin/bash

echo -n "Enter Something:"
read something

echo "You Entered: $something"

Bu nedenle, kullanıcı girdisini almak için okuma yapısı ve ardından bir değişken adı kullanılır.  Giriş bu değişkenin içinde saklanır ve $ işareti kullanılarak erişilebilir.

8. If İfadesi

İfadeler, Unix kabuk komut dosyası oluşturmada mevcut en yaygın koşullu yapıysa, aşağıda gösterilen biçimi alırlar.

if CONDITION 
then
STATEMENTS
fi

İfadeler yalnızca KOŞUL doğru olduğunda yürütülür.  fi anahtar sözcüğü if ifadesinin sonunu işaretlemek için kullanılır.  Aşağıda hızlı bir örnek gösterilmektedir.

#!/bin/bash

echo -n "Enter a number: "
read num

if [[ $num -gt 10 ]]
then
echo "Number is greater than 10."
fi

Yukarıdaki program yalnızca giriş yoluyla sağlanan sayı ondan büyükse çıkışı gösterecektir.  -gt şundan büyük anlamına gelir;  benzer şekilde -lt daha küçük için;  -le eşitten küçük için;  ve eşitten büyük için -ge.  Ayrıca [[ ]] gereklidir.

9. If Else Kullanımıyla Daha Fazla Kontrol

else yapısını if ile birleştirmek, betiğinizin mantığı üzerinde daha iyi kontrol sağlar.  Aşağıda basit bir örnek gösterilmektedir.

#!/bin/bash

read n
if [ $n -lt 10 ];
then
echo "It is a one digit number"
else
echo "It is a two digit number"
fi

Diğer kısmı if’in aksiyon kısmından sonra ve fi’den önce yerleştirilmelidir.

10. AND Operatörünü Kullanmak

AND operatörü, programımızın birden fazla koşulun aynı anda karşılanıp karşılanmadığını kontrol etmesine olanak tanır.  AND operatörüyle ayrılan tüm parçalar doğru olmalıdır.  Aksi halde AND içeren ifade false değerini döndürecektir.  AND’in nasıl çalıştığını daha iyi anlamak için aşağıdaki bash betiği örneğini inceleyin.

#!/bin/bash

echo -n "Enter Number:"
read num

if [[ ( $num -lt 10 ) && ( $num%2 -eq 0 ) ]]; then
echo "Even Number"
else
echo "Odd Number"
fi

AND operatörü && işaretiyle gösterilir.

AND in Shell Scripts

11. OR Operatörünü Kullanmak

OR operatörü, komut dosyalarımızda karmaşık, sağlam programlama mantığını uygulamamıza olanak tanıyan bir diğer önemli yapıdır.  AND’in aksine, OR operatöründen oluşan bir ifade, işlenenlerinden herhangi biri doğru olduğunda doğru değerini döndürür.  Yalnızca VEYA ile ayrılan her işlenen yanlış olduğunda false değerini döndürür.

#!/bin/bash

echo -n "Enter any number:"
read n

if [[ ( $n -eq 15 || $n -eq 45 ) ]]
then
echo "You won"
else
echo "You lost!"
fi

Bu basit örnek, OR operatörünün Linux kabuk komut dosyalarında nasıl çalıştığını gösterir.  Kullanıcıyı ancak 15 veya 45 sayısını girdiğinde kazanan ilan eder. ||  işareti VEYA operatörünü temsil eder.

12. Elif’i Kullanmak

Elif ifadesi else if anlamına gelir ve zincir mantığını uygulamak için uygun bir yol sunar.  Aşağıdaki örneği değerlendirerek elif’in nasıl çalıştığını öğrenin.

#!/bin/bash

echo -n "Enter a number: "
read num

if [[ $num -gt 10 ]]
then
echo "Number is greater than 10."
elif [[ $num -eq 10 ]]
then
echo "Number is equal to 10."
else
echo "Number is less than 10."
fi

Yukarıdaki program kendi kendini açıklayıcı nitelikte olduğundan onu satır satır incelemeyeceğiz.  Bunun yerine, değişken adları ve değerleri gibi komut dosyasının bölümlerini değiştirerek bunların birlikte nasıl çalıştığını kontrol edin.

13. SwitchYapısı

Switch yapısı, Linux bash betiklerinin sunduğu bir başka güçlü özelliktir.  İç içe koşulların gerekli olduğu yerlerde kullanılabilir, ancak karmaşık if-else-elif zincirlerini kullanmak istemezsiniz.  Bir sonraki örneğe bir göz atın.

#!/bin/bash

echo -n "Enter a number: "
read num

case $num in
100)
echo "Hundred!!" ;;
200)
echo "Double Hundred!!" ;;
*)
echo "Neither 100 nor 200" ;;
esac

Koşullar case ve esac anahtar kelimeleri arasına yazılır.  *) 100 ve 200 dışındaki girişleri eşleştirmek için kullanılır.

14. Komut Satırı Argümanları

Argümanları doğrudan komut kabuğundan almak bazı durumlarda faydalı olabilir.  Aşağıdaki örnekte bunun bash’ta nasıl yapılacağı gösterilmektedir.

#!/bin/bash
echo "Total arguments : $#"
echo "First Argument = $1"
echo "Second Argument = $2"

Bu betiği adından sonra iki ek parametreyle çalıştırın.  Buna test.sh adını verdim ve çağırma prosedürü aşağıda özetlenmiştir.

$ ./test.sh Hey Howdy

Yani, ilk argümana erişim için $1, ikinci argümana erişim için $2 vb. kullanılır.  Daha sonra son olarak toplam argüman sayısını almak için $# kullanılır.

15. İsimlerle Tartışmalar Elde Etmek

Aşağıdaki örnek, adlarıyla birlikte komut satırı bağımsız değişkenlerinin nasıl alınacağını gösterir.

#!/bin/bash

for arg in "$@"
do
index=$(echo $arg | cut -f1 -d=)
val=$(echo $arg | cut -f2 -d=)
case $index in
X) x=$val;;
Y) y=$val;;
*)
esac
done
((result=x+y))
echo "X+Y=$result"

Bu betiği test.sh olarak adlandırın ve aşağıda gösterildiği gibi çağırın.

$ ./test.sh X=44 Y=100

X+Y=144 değerini döndürmelidir.  Buradaki argümanlar ‘$@’ içinde saklanır ve komut dosyası bunları Linux kesme komutunu kullanarak getirir.

16. Dizeleri Birleştirmek

Dize işleme, çok çeşitli modern bash komut dosyaları için son derece önemlidir.  Neyse ki, bash’ta çok daha rahattır ve bunu uygulamanın daha kesin ve özlü bir yolunu sağlar.  Bash dizesi birleştirmeye genel bir bakış için aşağıdaki örneğe bakın.

#!/bin/bash

string1="Ubuntu"
string2="Pit"
string=$string1$string2
echo "$string is a great resource for Linux beginners."

Aşağıdaki program, “UbuntuPit, Linux’a yeni başlayanlar için harika bir kaynaktır” dizesini verir ekrana.

17. Dizeleri Ayrıştırmak

Birçok programlama dilinden farklı olarak bash, bir dizenin bölümlerini kesmek için herhangi bir yerleşik işlev sağlamaz.  Ancak aşağıdaki örnekte bunun parametre genişletme kullanılarak nasıl yapılabileceği gösterilmektedir.

#!/bin/bash
Str="Learn Bash Commands from UbuntuPit"
subStr=${Str:0:20}
echo $subStr

Bu betiğin çıktısı olarak “Learn Bash Commands” yazılmalıdır.  Parametre genişletmesi ${VAR_NAME:S:L} biçimini alır.  Burada S başlangıç ​​pozisyonunu, L ise uzunluğu göstermektedir.

18. Cut Kullanarak Alt Dizilerin Çıkarılması

Linux kesme komutu, komut dosyalarınızın içinde bir dizenin bir kısmını, yani alt dizeyi ‘kesmek’ için kullanılabilir.  Bir sonraki örnek bunun nasıl yapılabileceğini göstermektedir.

#!/bin/bash
Str="Learn Bash Commands from UbuntuPit"
#subStr=${Str:0:20}

subStr=$(echo $Str| cut -d ' ' -f 1-3)
echo $subStr
string_manipulatio in Linux bash script

19. İki Değer Eklemek

Linux kabuk betiklerinde aritmetik işlemleri gerçekleştirmek oldukça kolaydır.  Aşağıdaki örnek, kullanıcıdan girdi olarak iki sayının nasıl alınacağını, ekleneceğini ve bunların nasıl ekleneceğini gösterir.

#!/bin/bash
echo -n "Enter first number:"
read x
echo -n "Enter second number:"
read y
(( sum=x+y ))
echo "The result of addition=$sum"

Gördüğünüz gibi bash’a sayı eklemek oldukça basittir.

20. Birden Çok Değer Eklemek

Birden fazla kullanıcı girişi almak ve bunları betiğinize eklemek için döngüleri kullanabilirsiniz.  Aşağıdaki örnekler bunu uygulamalı olarak göstermektedir.

#!/bin/bash
sum=0
for (( counter=1; counter<5; counter++ ))
do
echo -n "Enter Your Number:"
read n
(( sum+=n ))
#echo -n "$counter "
done
printf "\n"
echo "Result is: $sum"

Ancak (( )) karakterinin atlanması, ekleme yerine dize birleştirmeyle sonuçlanacaktır.  Bu nedenle programınızda buna benzer şeyler olup olmadığını kontrol edin.

21. Bash’teki İşlevler

Herhangi bir programlama lehçesinde olduğu gibi, Linux kabuk komut dosyalarında da işlevler önemli bir rol oynar.  Yöneticilerin sık kullanım için özel kod blokları oluşturmasına olanak tanır.  Aşağıdaki gösterim Linux bash betiklerinde fonksiyonların nasıl çalıştığını özetlemektedir.

#!/bin/bash
function Add()
{
echo -n "Enter a Number: "
read x
echo -n "Enter another Number: "
read y
echo "Adiition is: $(( x+y ))"
}

Add

Burada daha önce olduğu gibi iki sayı ekledik.  Ancak burada işi Ekle adlı bir işlevi kullanarak yaptık.  Yani tekrar ekleme yapmanız gerektiğinde o bölümü tekrar yazmak yerine sadece bu fonksiyonu çağırabilirsiniz.

22. Dönen Değerlere Sahip Fonksiyonlar

En fantastik işlevlerden biri, verilerin bir işlevden diğerine aktarılmasına izin vermektir.  Çok çeşitli senaryolarda faydalıdır.  Bir sonraki örneğe göz atın.

#!/bin/bash

function Greet() {

str="Hello $name, what brings you to UbuntuPit.com?"
echo $str
}

echo "-> what's your name?"
read name

val=$(Greet)
echo -e "-> $val"

Burada çıktı, Greet() işlevinden alınan verileri içerir.

23. Bash Komut Dosyalarından Dizinler Oluşturma

Sistem komutlarını kabuk komut dosyalarını kullanarak çalıştırma yeteneği, geliştiricilerin çok daha üretken olmasına olanak tanır.  Aşağıdaki basit örnek size bir kabuk betiğinden nasıl dizin oluşturulacağını gösterecektir.

#!/bin/bash
echo -n "Enter directory name ->"
read newdir
cmd="mkdir $newdir"
eval $cmd

Bu betik basitçe standart kabuk komutunuz mkdir’i çağırır ve yakından bakarsanız ona dizin adını iletir.  Bu program dosya sisteminizde bir dizin oluşturmalıdır.  Ayrıca, aşağıda gösterildiği gibi geri tıklamaların(“) içinde yürütülecek komutu da iletebilirsiniz.

`mkdir $newdir`

24. Varlığını Onayladıktan Sonra Bir Dizin Oluşturun

Geçerli çalışma dizininizde zaten aynı adda bir klasör varsa yukarıdaki program çalışmayacaktır.  Örneğin, aşağıdaki program $dir adlı herhangi bir klasörün varlığını kontrol edecek ve yalnızca bulamazsa bir tane oluşturacaktır.

#!/bin/bash
echo -n "Enter directory name ->"
read dir
if [ -d "$dir" ]
then
echo "Directory exists"
else
`mkdir $dir`
echo "Directory created"
fi

Bash komut dosyası yazma becerilerinizi artırmak için bu programı eval kullanarak yazın.

25. Dosyaları Okumak

Bash betikleri kullanıcıların dosyaları çok etkili bir şekilde okumasına olanak tanır.  Aşağıdaki örnek, kabuk komut dosyalarını kullanarak bir dosyanın nasıl okunacağını gösterecektir.  Öncelikle aşağıdaki içeriklere sahip editors.txt adında bir dosya oluşturun.

1. Vim 
2. Emacs 
3. ed 
4. nano 
5. Code

Bu komut dosyası yukarıdaki 5 satırın her birinin çıktısını alacaktır.

#!/bin/bash
file='editors.txt'
while read line; do
echo $line
done < $file

26. Dosyaları Silmek

Aşağıdaki program, Linux kabuk komut dosyalarındaki bir dosyanın nasıl silineceğini gösterecektir.  Program öncelikle kullanıcıdan dosya adını girdi olarak vermesini ve varsa silmesini isteyecektir.  Linux rm komutu buradaki dosyayı siler.

#!/bin/bash
echo -n "Enter filename ->"
read name
rm -i $name

Dosya adı olarak editors.txt yazıp onay istendiğinde y tuşuna basalım.  Dosyayı silmeli.

27. Dosyaları Ekleme

Aşağıdaki kabuk komut dosyası örneği, bash komut dosyalarını kullanarak dosya sisteminizdeki bir dosyaya nasıl veri ekleyeceğinizi gösterecektir.  Önceki editors.txt dosyasına ek bir satır ekler.

#!/bin/bash
echo "Before appending the file"
cat editors.txt
echo "6. NotePad++" >> editors.txt
echo "After appending the file"
cat editors.txt

Artık günlük terminal komutlarını doğrudan Linux bash betiklerinden kullandığımızı fark etmişsinizdir.

28. Dosya Varlığını Test Edin

Bir sonraki kabuk betiği örneği, bash programlarından bir dosyanın varlığının nasıl kontrol edileceğini gösterir.

#!/bin/bash
filename=$1
if [ -f "$filename" ]; then
echo "File exists"
else
echo "File does not exist"
fi

Dosya adını doğrudan komut satırından argüman olarak aktarıyoruz.

29. Kabuk Komut Dosyalarından E-posta Gönderin

Bash betiklerinden e-posta göndermek oldukça basittir.  Aşağıdaki basit örnek, bunu bash uygulamalarından yapmanın bir yolunu gösterecektir.

#!/bin/bash
recipient=”[email protected]”
subject=”Greetings”
message=”Welcome to UbuntuPit”
`mail -s $subject $recipient <<< $message`

Alıcıya verilen konuyu ve mesajı içeren bir e-posta gönderecektir.

30.  Tarihi ve Saati Ayrıştırma

Bir sonraki bash betiği örneği, betikleri kullanarak tarih ve saatlerin nasıl işleneceğini gösterecektir.  Gerekli bilgiyi almak için yine Linux date komutu kullanılır ve programımız ayrıştırır.

#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
hour=`date +%H`
minute=`date +%M`
second=`date +%S`
echo `date`
echo "Current Date is: $day-$month-$year"
echo "Current Time is: $hour:$minute:$second"

Nasıl çalıştığını görmek için bu programı çalıştırın.  Ayrıca terminalinizden date komutunu çalıştırmayı deneyin.

parsing_date_in_shell

31. Sleep Komutu

Sleep komutu, kabuk komut dosyanızın talimatlar arasında duraklamasına olanak tanır.  Sistem düzeyinde işlerin gerçekleştirilmesi gibi çeşitli senaryolarda kullanışlıdır.  Bir sonraki örnek, bir kabuk betiğindeki sleep komutunu çalışırken göstermektedir.

#!/bin/bash
echo "How long to wait?"
read time
sleep $time
echo "Waited for $time seconds!"

Bu program, son talimatın yürütülmesini, bu durumda kullanıcının sağladığı $time saniyeye kadar duraklatır.

32. Wait Komutu

Bekleme komutu, sistem işlemlerini Linux bash komut dosyalarından duraklatmak için kullanılır.  Bunun bash’ta nasıl çalıştığını ayrıntılı olarak anlamak için aşağıdaki örneğe göz atın.

#!/bin/bash
echo "Testing wait command"
sleep 5 &
pid=$!
kill $pid
wait $pid
echo $pid was terminated.

Nasıl çalıştığını kontrol etmek için bu programı kendiniz çalıştırın.

33. Son Güncellenen Dosyanın Görüntülenmesi

Bazen belirli işlemler için son güncellenen dosyayı bulmanız gerekebilir.  Aşağıdaki basit program bize bunu bash’ta awk komutunu kullanarak nasıl yapacağımızı gösteriyor.  Geçerli çalışma dizininizdeki en son güncellenen veya oluşturulan dosyayı listeleyecektir.

#!/bin/bash

ls -lrt | grep ^- | awk 'END{print $NF}'

Basitlik adına bu örnekte awk’nin nasıl çalıştığını açıklamaktan kaçınacağız.  Bunun yerine görevi tamamlamak için bu kodu kopyalamanız yeterlidir.

34. Toplu Uzantı Ekleme

Aşağıdaki örnek, bir dizindeki tüm dosyalara özel bir uzantı uygulayacaktır.  Yeni bir dizin oluşturun ve gösteri amacıyla bazı dosyaları oraya koyun.  Klasörümde her biri test adında ve ardından (0-4) gelen toplam beş dosya var.  Bu betiği dosyaların sonuna (.UP) ekleyecek şekilde programladım.  İstediğiniz uzantıyı ekleyebilirsiniz.

#!/bin/bash
dir=$1
for file in `ls $1/*`
do
mv $file $file.UP
done

Öncelikle bu betiği herhangi bir normal dizinden denemeyin;  bunun yerine bunu bir test dizininden çalıştırın.  Ayrıca, dosyalarınızın dizin adını komut satırı argümanı olarak sağlamanız gerekir.  Geçerli çalışma dizini için period(.) kullanın.

35. Dosya veya Dizin Sayısını Yazdırın

Aşağıdaki Linux bash betiği, belirli bir dizinde bulunan dosya veya klasörlerin sayısını bulur.  Bunu yapmak için Linux find komutunu kullanır.  Öncelikle komut satırından dosya aramak için dizin adını girmeniz gerekir.

#!/bin/bash

if [ -d "$@" ]; then
echo "Files found: $(find "$@" -type f | wc -l)"
echo "Folders found: $(find "$@" -type d | wc -l)"
else
echo "[ERROR] Please retry with another folder."
exit 1
fi

Belirtilen dizin mevcut değilse veya izin sorunları varsa program kullanıcıdan tekrar denemesini isteyecektir.

36. Günlük Dosyalarını Temizleme

Bir sonraki basit örnek, kabuk komut dosyalarını gerçek hayatta nasıl kullanabileceğimizi gösteriyor.  Bu program /var/log dizininizde bulunan tüm günlük dosyalarını silecektir.  Diğer günlükleri temizlemek için bu dizini tutan değişkeni değiştirebilirsiniz.

#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR

cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleaned up."

Bu Linux kabuk betiğini root olarak çalıştırmayı unutmayın.

37. Bash Kullanarak Komut Dosyasını Yedekleme

Kabuk komut dosyaları, dosyalarınızı ve dizinlerinizi yedeklemek için sağlam bir yol sağlar.  Aşağıdaki örnek, son 24 saat içinde değiştirilen her dosya veya dizini yedekleyecektir.  Bu program bunu yapmak için find komutunu kullanır.

#!/bin/bash

BACKUPFILE=backup-$(date +%m-%d-%Y)
archive=${1:-$BACKUPFILE}

find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."
exit 0

Yedekleme işlemi başarılı olduktan sonra dosya ve dizinlerin adlarını yazdıracaktır.

38. Root Olup Olmadığınızı Kontrol Edin

Aşağıdaki örnek, bir kullanıcının Linux bash betiklerinden bir kök olup olmadığını belirlemenin hızlı bir yolunu göstermektedir.

#!/bin/bash
ROOT_UID=0

if [ "$UID" -eq "$ROOT_UID" ]
then
echo "You are root."
else
echo "You are not root"
fi
exit 0

Bu betiğin çıktısı onu çalıştıran kullanıcıya bağlıdır.  $UID’ye göre kök kullanıcıyla eşleşecektir.

39. Dosyalardan Yinelenen Satırları Kaldırma

Dosya işleme oldukça zaman alır ve yöneticilerin üretkenliğini birçok yönden engeller.  Örneğin, dosyalarınızdaki kopyaları aramak göz korkutucu bir görev haline gelebilir.  Neyse ki bunu kısa bir kabuk betiğiyle yapabilirsiniz.

#! /bin/sh

echo -n "Enter Filename-> "
read filename
if [ -f "$filename" ]; then
sort $filename | uniq | tee sorted.txt
else
echo "No $filename in $pwd...try again"
fi
exit 0

Yukarıdaki komut dosyası dosyanızda satır satır ilerler ve yinelenen satırları kaldırır.  Daha sonra yeni içeriği yeni bir dosyaya yerleştirir ve orijinal dosyayı olduğu gibi tutar.

remove_duplicates

40. Sistem Bakımı

Sistemimi yükseltmek için manuel olarak yapmak yerine sıklıkla küçük bir Linux kabuk betiği kullanıyorum.  Aşağıdaki basit kabuk betiği size bunun nasıl yapılacağını gösterecektir.

#!/bin/bash

echo -e "\n$(date "+%d-%m-%Y --- %T") --- Starting work\n"

apt-get update
apt-get -y upgrade

apt-get -y autoremove
apt-get autoclean

echo -e "\n$(date "+%T") \t Script Terminated"

Komut dosyası ayrıca artık ihtiyaç duyulmayan eski paketlerle de ilgilenir.  Bu betiği sudo kullanarak çalıştırmanız gerekiyor;  aksi halde düzgün çalışmayacaktır.

Yazının orijinalin buradan okuyabilirsiniz.