Bash teorisi

/ bin / bash

0. Dizin

  1. Çoğu insanın başına gelen şeyler
  2. Bir komut dosyasının yapısı
  3. Ekranda yazdır
  4. Kullanıcı GİRİŞİNİ oku
  5. Bash'de hesaplamalar
  6. Şartlar
  7. Döngüler
  8. fonksiyonlar
  9. Getop'lar

1. Çoğu insanın başına gelen şeyler

/ bin / bash veya / bin / sh

Betiğimizi çalıştırırken makinenin yaptığı ilk şeylerden biri, onu hangi kabukla yapması gerektiğine bakmaktır. En güncel linux sistemlerinde / Bin / sh bir bağlantıdır / bin / bash, ancak bu her zaman geçerli değildir, örneğin kullanan dağıtımlarda meşgul kutusu getiriyorlar Sh ve genellikle onlar da getirir Cümbüşama eğer kullanırsan / Bin / shBash ile çalışmayacaktır. Bu yüzden her zaman kullanmanızı tavsiye ederim / bin / bash.

Unicode ve ASCII

Senaryolarınızda neden "¿" veya "ñ" kullanamadığınızı hiç merak ettiniz mi? Veya aksan kullanmak mı? Etkileşimli komut dosyalarında oldukça can sıkıcı olabilir. Bunun nedeni, Bash'in varsayılan kodlamasının ASCII veya aynısı olan İngilizce karakter kümesidir. Bunu değiştirmek için, betiğimize Unicode kullanmak istediğimizi söylememiz yeterlidir. Bunun için komut yorumlayıcısından hemen sonra bir satır eklemelisiniz:

# - * - KODLAMA: UTF-8 - * -

Dikkatli olun, bu satırın senaryonun başında olması önemlidir.

Komut dosyasını çalıştırılabilir yapın

Senaryoları kaç kişinin çalıştırdığı komiktir «$ bash komut dosyası.sh" onun yerine "$ ./script.shSonuçta, bunun için bir kabuk tanımladık.

Yürütme izinleri eklemek için şunları yapmanız gerekir:

sudo + x script.sh
Betiğimiz çalıştırılabilir ise, onu PATH'ımıza ekleyebilir ve bilgisayarımızın herhangi bir yerinden / klasöründen çalıştırılabilir hale getirebiliriz. Bunun için ya kullanıcımızın .bashrc dosyasına ya da / etc / bashrc satırına eklemeliyiz.
BIN = "betiklerin bulunduğu klasör" PATH = "$ BIN $ PATH"
Değişken isimlerini tamamen büyük harflerle yazmak bir Bash kuralıdır. Pek çok insan bu kurala uymaz, ancak uzun senaryolar için takdir edilir çünkü onları çok daha okunabilir kılar

2. Bir komut dosyasının yapısı

  1. Başlık
  2. Global değişkenlerin tanımı
  3. yardım
  4. fonksiyonlar
  5. Ana gövde

Başlık, hangi kabuğu kullanmak istediğimizi ve kodlamayı belirttiğimiz yerdir. Fonksiyonların avantajı, sadece bir kez yazarak tekrarlanan kodu yeniden kullanmak ve betiği anlamayı kolaylaştırmaktır, 100 satırı aşan kodlar için çok kullanışlıdır.

Fonksiyonları kullanmak için, betiğimizin ana gövdesinden önce ile tanımlanmaları gerekir. Ve eğer değişkenleri hem ana gövdede hem de fonksiyonlarda tüm komut dosyamızın global seviyesinde kullanmak istiyorsak, onları her şeyin başında, başlıktan hemen sonra tanımlamalıyız.

Son olarak, betiğimizin kötü veya kötü parametrelerle çalıştığı durumlar için bir yardımcı işlev yazmak iyi bir uygulamadır. Açıkçası, bu gibi durumlarda, fonksiyonları okumadan komut dosyasından hemen çıkmak istiyoruz. Bunun için kullanabiliriz:

function help () {echo "" "İyi biçimlendirilmiş yardım metnimiz." "" [[-z $ 1 || 1 $ == "-h" || $ 1 == "--help"]]; o zaman fi'ye yardım et

Yardım işlevine "çıkış" eklersek, her yardım çalıştırdığımızda, örneğin hata mesajlarından sonra, komut dosyasından çıkacağız. Birkaç satır kod kaydediyoruz.

Koşul, komut dosyası parametreler olmadan çalıştırılırsa veya -h / –help belirtilirse ekranda yardım göstermeyi ve çıkmayı gösterir. Bakarsanız, bu çoğu linux programının standart davranışıdır.

Yankılı 3 tırnağın kullanılması, yankı ile görüntülenecek mesaj bırakmadan satır sonlarının kullanılmasına izin verir. Çok satırlı mesajlar için yankıyı yalnızca bir kez kullanmak çok daha uygundur.

3. Ekrana yazdır

Bash'de ekrana yazdırmak için 2 ana komut vardır: «kaçırmak»Y«printf«. İkisi de aynı hızda ve her ikisi de bash'ın bir parçası. Yeni başlayanlar için temel fark, echo'nun sonuna bir satırsonu eklemesi, «printf"Değil.

Yankı çok iyidir ve çoğu insanın kullandığı şeydir, ancak kullanıcının GİRİŞİNİ okurken veya kelime işlemle dosyalardan alınan değişkenleri yazdırmak istediğinizde garip şeyler olabilir. Çift tırnak işaretlerini tek veya tam tersi olarak değiştirmek veya değişken referansları alıntılardan çıkarmak kadar kolay, genellikle kolayca çözülürler. «Echo»Nasıl derlendiğine bağlı olarak tuhaf şeyler yapar, her zaman Ubuntu veya her zaman Fedora kullanırsak, bu bizi etkilemez, ancak dağıtımı değiştirirsek etkilenir.

Bu yüzden kullanıyorum «printf«, Bana baş ağrısı vermeyen ve daha çok davranan«printf»C'den veya«baskı»Python için, komut dosyanızı başka bir programlama diline taşımak istiyorsanız bu çok önemlidir.

Daha kapsamlı bir tartışma için ziyaret edebilirsiniz Stack Exchange'de Unix ve Linux'tan bu soru.

4. Kullanıcı GİRİŞİNİ okuyun

Komut dosyamızın adından sonra ve ENTER tuşuna basmadan önce yazdığımız her şey otomatik olarak özel değişkenlere kaydedilir. Bu değişkenler, X'in bir sayı olduğu $ X türündedir.

«$0»Senaryomuzun adını gösterir ve«$1»Daha sonra yazdığımız her şey sonsuza kadar değişkendir. Örneğin:

cat << EOF >> test.sh #! / bin / bash # - * - KODLAMA: UTF-8 - * - printf "\ $ 0 = $ 0 \ n" printf "\ $ 1 = $ 1 \ n" printf "\ $ 2 = $ 2 \ n" EOF chmod + x script.sh ./script.sh dosyam.txt

Bir test betiği oluşturuyoruz, çalıştırılabilir hale getiriyoruz ve 2 parametre ile çalıştırıyoruz. Aşağıdakilerin ekran çıktısını elde ederiz:

$ 0 = ./script.sh $ 1 = $ 2 = dosyam.txt

Tırnak işaretlerini kullanarak "dosyam.txt" yi "$ 1" e geçirebilirdik.

Ayrıca, doğrudan parametreyi kaydetmek istediğimiz değişkeni gösteren "oku" komutu ile bir kullanıcının GİRİŞİNİ okuyabiliriz. Örneğin:

printf "Adınız nedir? \ n" NAME printf okuyun "Merhaba, $ NAME. \ n"
Değişkenlerin atanmasında dikkatli olun. "$ VAR = içerik" bir hata üretecektir, eşittir işareti, değişken adı ve içerik arasında boşluk bırakılamaz. Doğru kullanım "VAR = içerik" dir

5. Bash'de Hesaplamalar

Bunun için "kullanabiliriz"İfade«, Karmaşık hesaplamalar yapmamız gerekmediği sürece. İki şeye dikkat edilmelidir, birincisi şu «İfade»Yalnızca tam sayıları kabul eder, ikincisi, bölümün tüm sonucu döndürmesidir, geri kalanını kullanabileceğimizi görmek için«%".

Genellikle ifadenin sonucunu bir değişkene atamak isteriz. Bunu iki şekilde yapabiliriz:

VAR2 = "ifade $ VAR1 / 10` VAR2 = $ (VAR1 / 100 $ ifade)

Ayrıca «İfade»Çift parantez kullanarak:

VAR2 = $ ((VAR1 $ / 100))
Daha fazla açıklama için «İfade»Ya da tam sayı kullanan bir alternatife bakabilirsiniz. bu KZKG ^ gaara girişi.

6. şartlar

Şimdiden çok kapsamlı bir şekilde yazılmıştır: «if""başka""elif»Ve koşullar. Bunu şurada okuyabilirsiniz:

Basit köşeli parantezlerin kullanımı arasındaki farkı vurgulamak istiyorum, «[]«, Ve çift parantez,«[[]]«, Koşullar için. Çift parantez ile ek koşullar kullanabiliriz:

  • «&&"İçin ve
  • «||»İçin veya

Kullanmak "&&»Y«||»Basit köşeli parantezlerle her parça ayrı köşeli parantez içinde ayrılmalıdır. Komut dosyasının yardımın çalıştırılması gerekip gerekmediğini görmek için kullanılan örnek şu şekilde olacaktır:

eğer [-z "$ 1"] || ["1 $" == "-h"] || ["$ 1" == "--help"]]; o zaman fi'ye yardım et

Ayrıca hataları önlemek için değişken adlarını tırnak içine almak zorunda kalmamızı sağlar. Örneğin:

[1 $ = 1] ise; sonra printf "Parametre 1'e eşittir."; fi eğer ["1 $" = 1]; sonra printf "Parametre 1'e eşittir."; fi eğer [[1 $ = 1]]; sonra printf "Parametre 1'e eşittir."; fi

Script.sh herhangi bir parametre olmadan çalıştırılırsa, ilk durum bir hata verecektir:

bash: [: =: tekli operatör bekleniyor
Bash'de "=" ve "==" aynı şekilde yorumlanır. Bu, yalnızca değişken atamak için "=" işlevinin kullanıldığı diğer programlama dillerinde olmaz.

Hakkında konuşulmayan şey şu: «dava«, Basitleştirmek için kullanılan«if«. Baştan başlayalım, elimizde hiç olmadığında «if»Tüm kod çalıştırılacaktır. Bir koşul eklersek «if»Birinde kod bloğunun bulunduğu iki durumumuz olacak.if»Ve bu bloğun yürütülmediği diğer durum.

Bir «eklersekbaşka«Bizim de iki vakamız olacak ama bu iki vaka öncekilerden farklı. Çünkü şimdi iki koşullu kod bloğu, A ve B ve programın geri kalanı olan bir C bloğu olacak. A veya B yürütülecektir ve C. Önceki durumda A ve C veya yalnızca C idi.

Yazma koşullarından kaçınmak için «eğer / değilse"içinde"başka»Ve kodun okunmasını basitleştirmek için yaratıldı«elif«. Bir öncekine bağlı birçok koşulumuz olduğunda, örneğin sayı aralığı veya tür:

VAR1 = 1 $, eğer [[$ VAR1 = 1]]; sonra printf "1 \ n" elif [[$ VAR1 = 2]]; sonra printf "2 \ n" elif [[$ VAR1 = 3]]; sonra printf "3 \ n" else printf "yok \ n" fi

Son durumda «elif»Birçok koşul okunacaktır. Durumla birlikte bu süreç kolaylaştırılmıştır:

VAR1 = 1 $ durumda $ VAR in 1) printf "1 \ n" ;; 2) printf "2 \ n" ;; 3 | 4) printf "3 veya 4, değişir \ n" ;; *) printf "yok \ n" ;; bu C

Bir değişken, bu durumda VAR1 okunacak ve herhangi bir durumla eşdeğer olup olmadığı kontrol edilecek, değilse, varsayılan durum "*" çalıştırılacaktır. Çift noktalı virgül, «kırılma", Onlar söyler"dava»Bu sona ermeli.

«dava»Bir dizi olarak da kullanılabilir«if«, Bunun için« ;; »yerine« ;; & »(devam et) kullanmanız gerekir. (Dur).

7. Döngüler

Herhangi bir programlama dilinde çok az döngü bilinmektedir. Bash'de bunlar «süre""kadar»Y«için«. Blogda bunlarla ilgili zaten yazılmıştır:

İki tür döngü vardır «için«, Tipte olanlar«$ LOQUESEA'da VAR için»Ve C tipi olanlar«$ for ((I = 0; I <= 10; I ++))«. İkinci tür döngüler «için»Çok kullanışlıdır, döngünün başında 3 bölümden oluşur:

  • Değişkenlerin bildirilmesi ve başlatılması (Bu durumda bir yardımcı değişken "I = 0").
  • Yürütme koşulu (10'dan küçük veya XNUMX'a eşit olana kadar).
  • Yardımcı değişkenin artışı

Bence bu, en güçlü döngüdür. 0'dan 10'a kadar tüm sayıları yazdıran bir örnek:

#! / bin / bash için ((I = 0; I <= 10; I ++)); yazdır "$ I \ n" bitti

8. İşlevler

Bash'in yapmamıza izin vermediği bazı şeyler var, değil mi? İlk bakışta, bash işlevleri 3 şeyi yapmanızı engeller: işlevlerde yerel değişkenleri bildirmek, parametreleri işlevlere geçirmek ve parametreleri döndürmek. Her şeyin bir çözümü vardır.

Şunun gibi bir şey yapma:

#! / bin / bash VAR = 1 printc "$ VAR \ n" işlevi merhaba () {VAR = 2 printf "$ VAR \ n"} merhaba printf "$ VAR \ n"

Bu, ekran 1, 2 ve 2'ye yazdırır.

Yerel değişkenleri bildirmek için «ekleyinyerel»Bildirirken:

#! / bin / bash VAR = 1 printf "$ VAR1 \ n" function foo () {local VAR1 = 2 printf "$ VAR1 \ n"} printf "$ VAR1 \ n" foo printf "$ VAR1 \ n"

Bu, ekrana 1, 1, 2, 1 yazdırır.

Parametreleri bir işleve nasıl aktarırsınız?

#! / bin / bash # - * - KODLAMA: UTF-8 - * - function merhaba () {printf "Merhaba $ 1 \ n"}

printf "Adınız nedir? \ n"
VAR1'i oku
merhaba $ VAR1

Parametreler nasıl döndürülür?

#! / bin / bash # - * - KODLAMA: UTF-8 - * - function merhaba () {printf "Merhaba holita"} printf "Adınız nedir? \ n" VAR1 VAR1 = $ (merhaba) okuyun printf "$ VAR1 $ VAR2 \ n"

Gördüğünüz gibi, bunun iki dezavantajı var, sadece bir parametre döndürebilirsiniz, bu bir vektör 😀 olabilir ve bir parametre döndürmek isterseniz, artık o fonksiyondan ekrana yazdıramazsınız.

İşlevler hakkında daha fazla bilgiyi [url=https://blog adresinde bulabilirsiniz.desdelinux.net/programando-en-bash-parte-3/]Usemoslinux'tan bu makale[/url].

9. Getoplar

Karmaşık komut dosyaları oluşturmak için Bash hakkında bilmeniz gereken son şeylerden biri «Getops«. Sırasına bakılmaksızın seçenekleri komut dosyasına aktarmak için kullanılır. Tek dezavantajı, yalnızca kısa seçenekleri etkilemesidir:

#! / bin / bash # - * - KODLAMA: UTF-8 - * - VARC = 0 fonksiyon yardım () {printf "Yardım mesajı \ n" çıkış} if [[-z $ 1]]; sonra getopts yaparken fi'ye yardım edin: ha: b: c OPT; $ OPT durumu h) yardım ;; :) Yardım ;; a) VARA = $ OPTARG ;; b) VARB = $ OPTARG ;; c) VARC = 1 ;; \?) Yardım ;; esac done # VARA, VARB ve VARC ile işler # yapan komut dosyasının ana bloğu

«Getopt'lar»Seçenekleri tek tek okur, bu nedenle bir döngü gereklidir.

«Kullanılarak geçilebilecek 2 tür seçenek vardırGetopts":

  • Bu durumda -c veya -h olarak bayrak adı verilen parametreler. Kullanmak istediğimiz harf ile belirtilirler. Boole değişkenleri gibiler, «gerçek»(Are) veya«yanlış"(Burada değiller).
  • İlişkili bağımsız değişkenlere sahip parametreler, -bir şey, -b herhangi bir şey. Aşağıda iki nokta üst üste ile istediğimiz harf ile belirtilirler. Argüman OPTARG'da saklanır (bu isim değiştirilemez).
İlk çift noktalar hata göstermemektir.

Bu komut dosyası ne yapıyor?

Hiçbir seçenek geçilmediğinde, "-h" parametresi geçildiğinde, geçersiz bir parametre geçildiğinde (örneğin "-x", bu "\?" İle yapılır) veya "\?" İle yapılırsa yardım mesajını görüntüler. bağımsız değişken (":"). Geri kalan durumlarda, "-c" nin varlığını VARC'de 1 olarak ve VARA ve VARB'de "-a" ve "-b" ile geçen değerleri kaydeder.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   ela dijo

    MASTERLY. Daha fazla U_U demiyorum

  2.   Miguel dijo

    Merhaba çok güzel yazı.
    Hey, chmod + x yerine sudo + x izinlerini verdin

    1.    Henry dijo

      $ sudo chmod + x script.sh
      (Daha kesin olmak gerekirse, hehe)

      Ah, tebrikler ve teşekkürler!

  3.   ateş soğuk dijo

    Çok güzel gönderi, gerçek şu ki seni tebrik ediyorum, devam et selamlar

  4.   Gustavo dijo

    Ve komut dosyasının çalıştırıldığında görünür olmasını, adım adım, örneğin değişkenlerin, koşulların ve her şeyin nasıl davrandığını görmek istiyorsanız, şunu kullanabilirsiniz:

    sh -x betiği

    selamlar

  5.   Büyük Okyanus adaları yerlisi dijo

    BİR PARÇA vesayet. Mükemmel ve çok iyi açıklanmış.
    Teşekkür ederim.

  6.   Cebrail dijo

    Konuyla ilgili mükemmel gönderi 😉

  7.   Mario Guillermo Zavala Silva dijo

    Çok ilginç ve önemli, bilgi için teşekkürler….
    ŞEREFLER !!!

  8.   Brooklyn'den değil dijo

    Miguel komutuna gelince, tebrikleriniz için hepinize teşekkür ederim, yayınlandıktan sonra girişi değiştirmeme izin vermiyor. Sanırım elav yapmak zorunda kalacak.

  9.   Adrian dijo

    Çok iyi!

    Her şeyden önce sizi gönderi için tebrik etmek istedim, anlamayı kolay buldum ve özellikle programlamaya yeni başlayanlar için, bash'ta iyi programlama yapmak için yönergeleri takip etmenin gerçekten yardımcı olduğunu düşünüyorum.

    Ancak düzeltilmesi gerektiğini düşündüğüm birkaç ayrıntı buldum.

    Birincisi: «2. BİR YAZININ YAPISI »işlev kapatılmaz ve bu, bir komut dosyası içinde yürütülürken sorunlara neden olur.
    Çözüm, "çıkış" komutunun hemen arkasına bir kapatma ayracı eklemektir.

    İkincisi: «4. KULLANICI GİRİŞİNİ OKUYUN ”, kullanıcının $ 0 ile sonsuz arasında girebileceği parametrelerin olduğunu onaylarsınız, ancak," bash "yalnızca $ 0 ile $ 9 arasında yorumlayacaktır, çünkü $ 10, $ 1 + 0'a eşit olacaktır.
    Bu sorunu çözmek için, aşağıdaki değişkenleri almak için "shift" komutunu kullanabilirsiniz. Veya değişkeni kaşlı ayraçlar içinde "$ {10}" belirtin, böylece bash değerleri $ 1 + 0 olarak değil birlikte alır.

    Daha fazla uzatmadan selamlar!

    1.    Brooklyn'den değil dijo

      Yorumun için teşekkürler. Çıkışın hem komut dosyasında hem de işlevlerde doğru kullanımını açıklayamadı. {10} $ 'a gelince, hiç bu kadar miras bırakmadım, bu yüzden bu problemle karşılaşmadım, bunun için bir çözüm olduğunu bilmek güzel (bugün öğrendiğim yeni şeyin üstünü zaten çizdim 😀).

  10.   Chanio dijo

    Yazı için çok teşekkür ederim! Bahsettiğiniz bazı şeyler hala açıklığa kavuşturulmamıştı. Örneğin, getoplar.
    Ekran çıktıları kısmında, daha sonra bahsettiğiniz kediden bahsetmeniz gerekiyordu ...
    kedi <
    ***************************************
    * BU FORM ÇOK AÇIKLIDIR *
    ***************************************
    EOF

    Örneğinizde:
    kedi << EOF >> test.sh
    İki şeyden bahsedilmelidir ... >> bu 'append' yani aynı komutu tekrar ederseniz, tüm betiğin kopyası olacak ... Sadece bir tane kullanmalısınız ...
    cat << EOF> script.sh
    Evet, script.sh olarak da adlandırılmalıdır.
    Daha sonra
    eğer [-z "$ 1"] || ["1 $" == "-h"] || ["$ 1" == "–help"]]; sonra
    yardım et
    fi

    Yazılması gerektiğini düşünüyorum ...
    eğer [[-z "$ 1"] || ["1 $" == "-h"] || ["$ 1" == "–help"]]; sonra
    ...

    BASH'dan keşfedilecek çok şey var.
    "TEMELLER" adını verebilir misiniz? 🙂
    Örneğin, 'testçiler' parametresi boş olup olmadıklarını görmek için -z veya bir dosya olarak var olup olmadığını görmek için -f gibi.

    Çabanız için tekrar teşekkürler.
    alberto

  11.   clow_eriol dijo

    Çok iyi bir bash betiği öğreticisi!

  12.   OCZ dijo

    -- KODLAMA: UTF-8 --

    Bir bash betiğinde karakter kodlamasını ayarlamak için bu satırı ilk kez gördüm. Bana Bash'ten çok Python'a benziyor. Gerçekten gerekli mi? Google'da bir referans aradım ama hiçbir şey bulamıyorum, elinizde bu konuyu anlatan bir bağlantı var mı? Özellikle bu hattın uygunluğu üzerine.

    Bence, UTF-8 kullanarak Bash'de komut dosyaları yazmak için, yalnızca metin dosyasını olduğu gibi (BOM olmadan) kaydetmeniz ve belirli ortam değişkenlerini (LANG ve LC_ *) doğru şekilde ayarlamanız gerekir.
    Daha sonra, açıkça, yürütülen komutların ASCII dışındaki kodlamalar için hazırlanması gerekir. Örneğin, büyük harfe gitmek istersek, bu işe yaramıyor gibi görünüyor:
    «Echo áéíóú | tr az AZ »
    o:
    «Echo áéíóú | tr [: alt:] [: üst:] »
    ve kullanmak daha iyidir:
    «Echo áéíóú | awk '{baskı toupper ($ 0)}' ».

    1.    Brooklyn'den değil dijo
    2.    senin gibi borriquito dijo

      Biri beni düzeltir, ancak bu kodlama satırı (# -- KODLAMA: UTF-8 --) bash veya kabuk ile ilgisi yoktur: bir yorum satırıdır (# ile başlar) ve DÜZENLEYİCİYE komut dosyasını yazmak için kullandığımızı (vim, emacs ...) dosyanın kodlamasını bildirmeye yarar.

      Aslında bash bir yorum satırı olduğu için böyle bir satır görmüyor.

  13.   JoRgE-1987 dijo

    Mükemmel öğretici, Sysadmin'in Bash'te Komut Dosyası Yazmayı bilmesi çok önemli olduğundan, her şey için yararlıdır.

    Çok çok iyi!

    Selamlar!

  14.   Edward Cuomo dijo

    Herhangi biri için yararlı olması durumunda, kendi Komut dosyalarınızı oluşturmak için birkaç kullanım ve örnek aşağıda verilmiştir: https://github.com/reduardo7/hsabx

  15.   Lito Siyah dijo

    Çok iyi. Komut dosyalarıma eklenecek yeni şeyler. Coddig şeyinde ve printf şeyinde yoktu.
    Teşekkür ederim!!!

  16.   xxxtonixxx dijo

    Sooo iyi makale! Bunu favoriler için saklıyorum, yanlış olanı düzeltmek ve hatta daha fazla içerikle genişletmek güzel olurdu. Tüm bu bilgiler için bir alkış !!!!