Değişkenler bize, bir kod sayfasında veya projede oldukça esneklik sağlayan yapılardır ama değişkenler deyince gözünüz korkmasın. Matematikte 'x = 5' ifadesine benzer birçok ifade görmüşsünüzdür. İşte, buradaki değişken mantığı da aynıdır. Burada 'x' bir değişkendir ve '5', 'x' değişkeninin değeridir. Bir de; isminden de anlayacağınız üzere bu yapılar değişkendir. Örneğin x'in değeri 30 da olabilir, 19 da olabilir; buradaki 'x', değeri değişebilen bir değişken konumundadır. Programlama üzerinden bir örnek verelim.
'isim' adında bir değişkenimiz olduğunu varsayalım. Bu değişken; "Cyber Worm", "Ahmet", "Defne" gibi değerler alabilir, öyle değil mi? O zaman biz bunu ifade etmek için şöyle bir cümle kurabiliriz: "'isim', bir değişkendir ve 'isim' değişkeninin alabileceği değerler de değişken değeridir."
Şimdi, Bash'e dönelim. Bash içerisindeki değişkenler ikiye ayrılır; bunlardan biri "Sistem Değişkenleri", diğeri de "kendi tanımladığımız değişkenler" şeklindedir. Kendi tanımladığımız değişkenler ile çok vakit geçireceğiz o yüzden ilk önce sistem değişkenlerini inceleyelim.
Az önceki değişken mantığının aynısını düşünelim. Aşağıdaki görselde gördüğünüz gibi bizim; C:\ dizininde Bash diye bir klasörümüz olduğunu varsayalım. Devam etmeden önce düşünmenizi istiyorum: "Buradaki değişken ve değişken değeri nedir?"

Buradaki değişken, dizinimiz yani C:\'dir. Değişkenimizin değeri ise Bash klasörümüzdür. Çünkü biz istersek, Bash klasörünü D:\'nin içine veya Masaüstü'ne de alabiliriz. Bu koşullarda değişen tek şey dizin olacaktır; klasör değil. İşte, sistem değişkenleri de bunun gibi çalışır. Hemen bir örnek verip bakalım.

Yukarıdaki örneğe bakalım. Ben şu an Desktop (Masaüstü) içerisindeyim. pwd (print working directory - çalışma dizinini yazdır) komutu bize, şu an bulunduğumuz lokasyonu ve arkasındaki dizinleri gösterecektir. Aslında pwd komutu da bir sistem değişkenidir. Bunu daha iyi anlamanız açısından aşağı programsal bir ifade bırakıyorum.
pwd=<kullanıcının bulunduğu yer>
Buradaki pwd aslında bir değişken, lokasyonumuz ise bir değerdir. Biz eğer /etc/ klasörüne geçseydik buradaki değişken yine pwd olacaktı ama değerimiz /etc/ olacaktı.
İsterseniz bunu kod ile ifade edelim.

Gedit'e yazdığımız kod; 'echo pwd' şeklinde. Peki bu kodun bize, lokasyonumuzu göstermesi gerekmiyor muydu? Evet, öyle ama echo komutu, ona verilen parametreleri yazdırmakla görevliydi. Biz, bir sistem değişkeni yazdıracağımız zaman o değişkenin başına '$' (dolar) işareti koyuyoruz ve değişkenin ismini büyük harflerle yazıyoruz. Dolar işaretini Alt Gr + 4 kombinasyonları ile sağlayabilirsiniz. Hemen bakalım.

Gedit ekranına bakın; 'echo pwd' yazmak yerine 'echo $PWD' yazdık. Terminale baktığımız zaman, pwd falan yazmadan sadece programı çalıştırdık ve bize dizinimizi, lokasyonumuzu verdi.
Şu ana kadar sistem değişkenleri hakkında iki şey öğrendik.
$ işareti koyulur.Peki, aynı komutu programsız bir şekilde sadece terminal üzerinden çalıştırırsak ne olur?

Evet, çalışacaktır. İlk komutta direkt olarak echo $PWD şeklinde bir komut verdik ve bize şu an bulunduğumuz lokasyonu verdi. Daha sonra ikinci komutta cd .. şeklinde bir komut verdik ve /home/cyberworm/Desktop lokasyonundan '/home/cyberworm' lokasyonuna girdik. Tekrar echo $PWD çalıştırdığımızda bu sefer çıktının farklı geldiğini, şu an bulunduğumuz yeri gösterdiğini görebilirsiniz.
Sistem değişkenlerinin nasıl çalıştığını öğrendik. Sizin için sıkça kullanılan sistem değişkenlerini, ne işe yaradıklarını ve nasıl kullanıldıklarını gösteren bir tablo hazırladım.

Şimdi, kendi tanımladığımız değişkenleri inceleyelim. Kendi tanımladığımız değişkenler, sistem değişkenleri gibi değildir. Sistem değişkenleri zaten sistemin içerisinde kayıtlıdır ve ek bir işlem yapmanıza hiç gerek yoktur. Fakat kendi tanımladığımız değişkenler, sistem değişkenleri arasında olmayan değişkenlerdir. Dolayısıyla kendi değişkenlerimizde bütün hakimiyet bizimdir. Hemen bir değişkenin nasıl tanımlanacağına bakalım.

Yukarıda, bir değişkenin nasıl tanımlandığını görüyorsunuz. Buradaki 'name' bizim değişkenimizdir. "Cyber Worm" ise 'name' değişkeninin değeridir. 'name' değişkeni, "Cyber Worm" değerini siz bir müdahalede bulunmadığınız sürece tutacak, saklayacaktır. Örneğin 500 satırlık bir proje yapacağınızı düşünün. Cyber Worm ismine her ihtiyaç duyduğunuzda "Cyber Worm" şeklinde uzun uzun yazacak mısınız? Elbette sağlıklı bir kod yapısı olmayacaktır. Bir kod içerisinde bir şeyi sürekli tekrar ediyorsanız orada ya bir bilgi eksikliği ya da yöntem yanlışlığı vardır. İşte, 500 satır sonra bile Cyber Worm ismine erişmek isterseniz 'name' isimli değişkeni çağırmanız yeterli olacaktır; değişkenleri de bu sebeple kullanıyoruz.
Birçok programlama dilinde 'name = "Cyber Worm"' şeklinde bir tanımlama görebilirsiniz. Yani eşittir (=) operatörü ile değişken ve değişken değeri arasında bir boşluk bırakıldığını görürsünüz. Okunabilirlik açısından faydalıdır, evet. Fakat Bash'te böyle bir şey söz konusu değildir. Bir değişken tanımlayacağınız zaman biraz önceki görselde gördüğünüz gibi önce değişkenin ismini, sonra eşittir operatörünü, daha sonra da değişkenin değerini yazarsınız fakat bunların hepsi yapışık olmak zorundadır. İsterseniz ayrı yazmaya çalışalım ve sonucu görelim.

Dediğimiz gibi; 'name = "Cyber Worm"' şeklinde bir tanımlama yaptık ve bunu çalıştırdık. Fakat bir sorunumuz var: "name: command not found" yani "name: komut bulunamadı" hatasını aldık. Buradan da; Bash'te tanımladığımız değişkenleri yapışık şekilde yazmamız gerektiğini net olarak anlamış olduk.
Değişken tanımlarken dikkat etmemiz gereken birkaç husus vardır. Bunlardan biri; değişken tanımlarken değişkenin ilk karakterinin sayı olmaması gerektiği ile ilgilidir. Diğeri ise; değişken tanımlarken '_' (alt tire) haricinde başka bir özel karakter kullanmamamız gerektiğidir. Aşağıda, yanlış tanımlanmış değişken örneklerini göreceksiniz.
say!10defa1isim1.sayiBunlarla beraber eğer değişken isminiz uzunsa yani birkaç kelimeden oluşuyorsa bu kelimeleri birbirinden alt tire ile ayırmanız veya ilk kelime haricinde her kelimenin ilk karakterini büyük harfle yazmanız gerekir. Bu, kodunuzun okunabilirliği açısından büyük önem arz eder. Ne demek istiyorum?
nameofthemotherKodunuzu okuyan başka birinin, yukarıdaki değişken ismini ilk bakışta anlaması zor olacaktır. Hatta birkaç ay sonra kendi kodunuzu açtığınızda siz bile ilk bakışta anlamayabilirsiniz. Dolayısıyla bu değişkeni aşağıdaki iki yöntem gibi düzenlemek çok daha iyi olacaktır.
name_of_the_mothernameOfTheMothernameofthemother şeklindeki bir tanımlama elbette size hata vermez; yani yanlış değildir. Fakat dediğimiz gibi kodunuzun okunabilir olması başlarda çok önemli gelmeyebilir ancak ilerleyen vakitlerde bunun gerçekten ne kadar önemli olduğunu, özellikle bir yerde işe girdiğinizde anlayacaksınızdır.
Şimdi, biraz önce hatalı bir şekilde tanımladığımız değişkeni düzeltelim ve çalıştırıp neler olacağına bakalım.

Kodumuzu 'name="Cyber Worm"' şeklinde düzelttik ve kodumuzu çalıştırdık. Fakat herhangi bir çıktı almadık. Normalde kodu çalıştırdığımız zaman 'name' isimli değişkenin tuttuğu değer olan "Cyber Worm" ifadesinin yazdırılması gerekmez miydi? Burada, değişken tanımlamada herhangi bir sorun yoktur. Buradaki sorun; tanımladığımız değişkeni çağırmamamızdır. Ne demek istiyorum?
Sistem değişkenlerini anlatırken $PWD şeklinde bir kullanım yapmıştık, hatırlıyorsunuzdur. İşte, burada da aynı şeyi yapmak zorundayız. Hemen bakalım.

Sağ taraftaki gedit ekranına dikkat edin. 'echo $name' şeklinde bir kod yazmışız. İşte, sistem değişkenlerinde olduğu gibi tanımladığımız değişkenleri $ işareti ile çağırıyoruz. Kodu çalıştırdığımız zaman sol taraftaki çıktıda doğru sonuca ulaştığımızı görüyorsunuz. Peki, madem sistem değişkenlerindeki gibi yapıyoruz; neden '$name' şeklinde yazdık da '$NAME' şeklinde yazmadık? Basit bir mantık yürüterek bu sorunun cevabına erişebiliriz. İki çeşit değişkenimiz olduğundan söz etmiştik. Bunların birbirine karışmaması adına elbette bir farklılık yaratılması gerekir. Yani büyük harfle yazmak, sistem değişkenlerine özgü bir kullanımdır.
Sistem değişkenleri, adı üzerinde sistemin kendi değişkenleridir. Yani bu değişkenler aslında kullandığınız sistemin içerisinde zaten daha önceden tanımlanmıştır. Bu yüzden biz PWD değişkenini çağırırken aşağıdaki gibi herhangi bir tanımlama yapmadık.
PWD=<lokasyon>
Bu tanımlamayı zaten sistemin kendisi daha önce yapmış. Bize düşen, sadece 'echo $PWD' yazmak ve değişkeni çağırmaktır. Fakat kendi tanımladığımız değişkenler konusunda bu şekilde davranamayız. Bu değişkenler bize ait olduğu için ilk önce onları tanımlamalı ve onlara bir değer vermemiz gerekir. Daha sonra tanımladığımız bu değişkeni 'echo $degiskenismi' şeklinde çağırmamız gerekir. İşte, sistem değişkenleri ile kendi tanımladığımız değişkenlerin arasındaki fark tam olarak budur.
Şimdi, değişken tanımlama ve çağırma konusunda biraz pratik yapalım.

Yukarıda; 'name', 'age', 'skills', 'interestedIn' ve 'currentJob' şeklinde tam 5 adet değişkenimiz var ve bu değişkenlerin değerlerini vermişiz. Sizce, bu kodu olduğu gibi çalıştırırsak sonuç alır mıyız? Evet, doğru tahmin; sonuç falan almayız. Çünkü bunları çağırmak zorundayız. Hemen çağıralım.

Yukarıdaki gibi 'echo $name', 'echo $age' şeklinde hepsini çağırdık ve yazma sıramıza göre terminal ekranında çıktılarımızı gördük. Eğer isterseniz değişken tanımladıktan hemen sonra onu çağırabilirsiniz yani tanımlamaları ve çağırma işlemlerini gruplandırmanıza gerek yoktur. Örneğin;

Yukarıdaki gibi bir kullanım da sağlayabilirsiniz. Zaten ilerledikçe tanımladığınız beşinci değişkeni 200. satırda kullanabildiğinizi göreceksiniz.
Eğer isterseniz bu çıktıların daha anlaşılır olmasını sağlayabilirsiniz. Örneğin;

Lütfen 'interestedIn' isimli değişkenin olduğu tarafa bakalım. Burada aslında bir cümle kurmuşuz. Normal bir cümleden tek farkı, cümle içerisinde bir değişken kullanmış olmamız. Az önce; bir değişkene 500 satır sonra bile erişebileceğinizi söylemiştim. İşte, bunun gibi birden fazla cümle olduğunu düşünün. Her seferinde "Network Security" şeklinde yazmak sizce de yorucu değil mi? İsterseniz, bunu daha net anlamanız açısından bir de gerçek hayattan bir örnek görelim.

read konusuna henüz gelmedik o yüzden kodu anlamanıza gerek yok. Fakat terminal ekranına dikkat edin; bana ismimi sordu, ben de ismimi girdim. Daha sonra bana "Hoş Geldin Cyber Worm" dedi. İşte, değişken kullanmanın inanılmaz rahatlığını görüyorsunuz. Ben, ismimi bir değişken olarak verdim, Bash bunu anladı ve ismimi yazdırdı. Buradaki kolaylığı şöyle tarif edeyim; 2000 üyeli bir siteniz olduğunu ve giriş yapan veya sitenize kaydolan her üyenize ismiyle hitap ederek "Hoş Geldin" demek istediğinizi varsayın. Bu durumda her kullanıcının ismini dinamik olarak nasıl kullanacaksınız ki? Elbette, değişkenleri kullanmak zorundasınızdır.
Bu konuyu da anladığımıza göre şimdi, aşağıdaki kodun neden doğru sonuç vermediğini düşünmenizi istiyorum. Dikkat edin; kırmızı kutucuk içerisine aldığım iki satırda eksik kelimeler var.

Düşündüğünüzü varsayarak devam ediyorum. Bir değişkeni çağırırken tanımladığımız gibi çağırmazsak istediğimiz sonucu alamayız. Aşağıdaki görsele dikkatli bakın.

İlk önce 'skills' kısmına bakın. Biz, değişkeni tanımlarken 'skills' olarak tanımladık fakat onu çağırırken 'skills' olarak değil, 'skillls' olarak çağırdık. Şimdi, 'interestedIn' kısmına bakın. Bu değişkeni, 'interestedIn' şeklinde tanımladık ama çağırırken 'interestedin' şeklinde çağırdık. Sorunumuzun kaynağı tam olarak budur. Buradan anlamamız gereken şey şudur: "Bir değişken noktası virgülüne kadar nasıl tanımlanmışsa o şekilde işleme alınır". Ayrıca lütfen yanlış anlamayın; bu sadece çağırma konusunda öyle değildir. O değişkeni nerede, hangi amaçla ve nasıl kullanırsanız kullanın onu tanımladığınız gibi yazmak zorundasınızdır.
Yayınlanma Tarihi: 2022-09-01 17:56:53
Son Düzenleme Tarihi: 2022-09-03 14:53:28