Shell Komut Dosyası Dilinde Linux "Değişkenleri" Hakkında Bir Bilgi - Bölüm 9


Zaten Linux Shell Scripting hakkında o zamanlar sıcak karşılanan ve şimdi bile çok alakalı olan bir dizi makale yazmıştık. Kabuk komut dosyası oluşturmayla ilgili makale koleksiyonunun bağlantısı buradadır.

  1. Linux Kabuk Komut Dosyasını Öğrenin

Bu makalede değişkenleri, bunların yürütülmesini ve kabuk betiğinde uygulanmasını göreceğiz.

Çıktıyı Kaydetme

Bir komutun çıktısı standart çıktıya veya bir dosyaya yönlendirilebilir ve bir değişkende de saklanabilir. Bir komutun çıktısı ekrana sığmayacak kadar büyükse, elimizde yalnızca çıktıyı bir değişkene bir dosyaya kaydetme seçeneği kalır. Çıktıyı değişkene kaydetmenin bir avantajı daha hızlı inceleme hızıdır. Değişkenler belleğe kaydedilir ve bu nedenle dosyadan almaya kıyasla daha hızlı olma eğilimindedir.

Komut dosyası dilindeki değişkenler

Değişkenler, Shell komut dosyası oluşturmada kullanılan önemli bir bileşendir ve "Declare" bash komutu kullanılarak bildirilir. 'level' diyen bir değişkeni bildirmek için aşağıdaki komutu uygulamamız gerekir.

declare LEVEL

Not: Korn kabuk uyumluluğu için yerleşik bir ifade olan “typecast” kullanmamız gerekiyor. 'Beyan' daha gelişmiştir ve tüm özellikleri içerir, bu nedenle BASH kullanılırken önerilir.

Tüzük
  1. Bir değişken adı, değişkenin kodda kullanımını doğrulamalıdır.
  2. Program boyunca aynı değişken adının kullanılması önemle tavsiye edilir.
  3. Değişken adı küçük harf olabileceği gibi büyük harf de olabilir, ancak kabuk komutları kural olarak küçük harflidir ve bu nedenle herhangi bir karışıklığı ortadan kaldırmak için değişken adını büyük harf kullanmalıyız. ör. TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT vb.

Uygulama

Bir değişkene eşittir işareti (=) kullanılarak bir değer atanabilir. Bir değişkene boş bir dize atamak için eşittir işaretinden sonra herhangi bir değer sağlamamalıyız.

LEVEL =

'LEVEL' değişkeninde saklanan değeri şu şekilde kontrol edin:

printf "%i" $LEVEL

Çoğu 'C' programcısının bildiği komut olan printf, verileri yazdırır. %i – Tamsayıyı temsil eder. Gerektiğinde, Karakter için %c veya dize için %c ile değiştirebiliriz.

$LEVEL: 'LEVEL' değişkeninin değer ikamesi olarak çalışan '$' karakterine dikkat edin.

Örnek Çıktı
printf "%i" $LEVEL
0

Değişkene bir değer atayın.

LEVEL=0

Değişkende saklanan verileri kontrol edin.

printf "%i" $LEVEL
0

NOT: Her iki durumda da, değeri değişkene atamadığımızda ve '0< değerini atadığımızda dikkat edilmesi ilginçtir. 'LEVEL' değişkenine' ifadesi 0 sonucunu verir. Her iki durumda da çıktı aynı olsa da, kabuk betiği her iki değişken bildirimini de farklı şekilde ele alır.

Değişkene yeni bir değer atayın.

LEVEL=121

Değişkende saklanan verileri kontrol edin.

printf "%i" $LEVEL
121

Bir Değişkenin Ayarını Kaldırma

Declare bir BASH komutudur ve yalnızca yürütüldüğünde değişken oluşturur. Bu şekilde oluşturulan değişken, kod durana veya değişken yok edilene kadar bellekte kalır.

unset LEVEL

BASH'de Önceden Tanımlanmış Değişkenler

BASH'de önceden tanımlanmış 50'den fazla değişken vardır. Bu değişkenlerden bazılarının BASH'e atfedilen özel bir anlamı vardır; örneğin RANDOM değişkeni rastgele bir sayı üretir. Ayarlanmadan bırakılır ve yeniden tanımlanırsa orijinal değişken değeri sonsuza kadar kaybolur. Bu nedenle herhangi bir sistem tanımlı değişkenin kullanılmaması tavsiye edilir.

İşte bazı yararlı BASH değişkenlerinin bir listesi.

  1. BASH—Bash'in tam yol adı.
  2. BASH_ENV—Bir kabuk komut dosyasında, komut dosyası başlatılmadan önce yürütülen profil dosyasının adı.
  3. BASH_VERSION—Bash'in sürümü (örneğin, 2.04.0(1) sürümü).
  4. SÜTUNLAR—Ekranınızdaki satır başına karakter sayısı (örneğin, 80).
  5. HOSTNAME—Bilgisayarın adı. Linux'un bazı sürümlerinde bu, makinenin adı olabilir. Diğerlerinde ise tam nitelikli bir alan adı olabilir.
  6. HOSTTYPE—Bilgisayarın türü.
  7. HOME—Ana dizininizin adı.
  8. OSTYPE—İşletim sisteminin adı.
  9. PATH—Yürütülecek komutu bulmak için iki nokta üst üste ayrılmış arama yolları listesi.
  10. PPID—Kabuğun üst sürecinin işlem kimliği.
  11. PROMPT_COMMAND—PS1 birincil istem dizisinin ayarlanmasından önce yürütülecek komut.
  12. PWD—Geçerli çalışma dizini (cd komutu tarafından ayarlandığı şekilde).
  13. RASTGELE—Her başvuruda bulunulduğunda 0 ile 32767 arasında rastgele bir sayı döndürür.
  14. SHELL—Kullanılması tercih edilen kabuk; sizin için bir kabuk başlatan programlar için.
  15. TERM—Terminal öykünme türü (örneğin konsol).

Kelime Bölme Kuralı.

LEVEL=0
printf "%i" $LEVEL
0

AND

LEVEL=”0”
printf "%i" $LEVEL
0

Her iki durumda da çıktı aynı kalır. Peki tırnak işareti kullanıldığında ortaya çıkan sonuç arasındaki fark nedir?

Aynısını farklı değişken verilerle kontrol edelim.

LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
printf "%i" $LEVEL
0

Çıktının doğru olmadığından bahsetmiyorum bile. BASH, '0'dan sonraki boşluğu sonlandırma olarak alıyor ve dolayısıyla değişkenin değeri '0' olarak ayarlanıyor. Şimdi değişkenler için aşağıdaki gibi tırnak işareti kullanmaya çalışıyoruz.

LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
printf "%s" $LEVEL 
0;1;2;3;4;5

Sonuç yine doğru değil. BASH değişken değerlerini aldı ve aralarındaki tüm boşlukları kaldırdı. Dolayısıyla printf 0,1,2,3,4,5'i farklı değerler olarak yorumlamadı. Peki çözüm nedir?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

Evet! Değişken değişimini tırnak işaretleri altına koymak çözümdür. Alıntılar, karakterleri kabukta gruplandırır ve özel karakterleri anlamlı bir şekilde yorumlar.

Alıntılar arka arkaya kullanılabilir ve değişken değişikliklerini tırnak içine almak iyi bir fikirdir. Ayrıca genel metni alıntılardan ayırmak için de kullanılabilir. İşte bir örnek.

LEVEL=5 
FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

Alıntılanan metin parçalarını boşlukla ayırmak, yukarıda tartışılanla aynı soruna yol açacaktır. Bash, beyaz alanı sonlandırma olarak ele alacaktır. Değişken ikamesinin başka bir yolu da.

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

Tek tırnak, BASH'in Özel karakterleri yazdırmasını kısıtlar.

printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

Ters Eğik Çizgi (/)

Ters eğik çizgi, bir karakter için tek tırnak işareti gibi çalışır. () öğesini nasıl yazdıracağınızı düşündünüz mü?

printf "%c" "\""

%q, printf ile gruplandırıldığında, sözcük aralığını sağlamak için her sözcükten sonra ters eğik çizgi sağlar.

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

Şimdilik bu kadar. Okuyucularımıza her zaman ara sıra kendilerine faydalı olacak makaleler sunmaya çalışıyoruz. Yukarıda ele alınan makale çok geniş olduğundan, 'Değişkenin nitelikleri', 'Değişken dışa aktarma' vb.'yi içerecek olan konuların geri kalanı örneklerle birlikte bir sonraki makalede üretilecektir.

O zamana kadar bizi izlemeye devam edin ve linux-console.net'a bağlı kalın. Aşağıdaki yorum bölümünde bize değerli geri bildirimlerinizi iletmeyi unutmayın.