BATsh Hizli Basvuru [TR] Turkce
=================================

----------------------------------------------------------------------
OZET
  BATsh, cmd.exe toplu is ve bash/sh sozdizimini ayni betik dosyasinda
  calistiran iki dilli bir kabuk yorumlayicisidir. Satir satir mod otomatik
  algilanir. Dis kabuk gerekmez -- saf Perl uygulamasi.

KARISIK ORNEK
  :: CMD bolumu (ilk belirtes buyuk harf)
  @ECHO OFF
  SET LANG=BATsh

  # SH bolumu (ilk belirtes kucuk harf icerir)
  greet() { echo "Merhaba $1 (bash modu)"; }
  greet $LANG
  result=$(echo $LANG | perl -e 'while(<STDIN>){chomp;print uc}')
  echo "Buyuk harf: $result"

  :: CMD'ye geri don (SH sonucunu oku)
  ECHO CMD'ye donus: %result%

  # Calistirma: perl lib/BATsh.pm script.batsh
----------------------------------------------------------------------


BATsh, cmd.exe ve bash/sh sozdizimini ayni betikte calistiran
iki dilli bir kabuktur. Her satirin ilk belirteci modu belirler.

1. Mod Tespiti
--------------
  ECHO hello          -> cmd.exe modu (ilk belirtec tamamen buyuk harf)
  echo hello          -> bash/sh modu (ilk belirtec kucuk harf icerir)
  # yorum             -> yorum (yoksayilir)
  :: yorum            -> yorum (CMD stili, yoksayilir)
  REM yorum           -> yorum (CMD stili, yoksayilir)

2. Kabugu Baslatma
-------------------
  perl lib/BATsh.pm                    # etkilesimli REPL
  perl lib/BATsh.pm script.batsh       # betik dosyasi calistirma
  perl lib/BATsh.pm -e "echo merhaba"  # tek satirlik komut

  Perl API'sinden:
    use BATsh;
    BATsh->run('script.batsh');
    BATsh->run_string("echo merhaba");
    BATsh->repl();

3. Ortam Degiskeni Koprusu
---------------------------
  CMD ve SH bloklari degiskenleri Perl'in %ENV'i uzerinden paylasiр.

  export FOO=merhaba  # SH, FOO'yu ayarlar
  ECHO %FOO%          # CMD, kopru uzerinden FOO'yu okur (Windows)

  SET BAR=dunya       # CMD, BAR'i ayarlar
  echo $BAR           # SH, kopru uzerinden BAR'i okur

4. SETLOCAL / ENDLOCAL
-----------------------
  SETLOCAL           # %ENV anlık goruntusu
  SET TMP=yerel_deger
  ECHO %TMP%
  ENDLOCAL           # %ENV'i geri yukler (TMP kaybolur)

  Kapsamlar ic ice olabilir.

5. Ic Ice Bloкlar (Karisik Mod)
---------------------------------
  Blok yapilari dogru eslesmeli. Ic ice bloklarda karisik mod satirlari kabul edilir.

  for x in 1 2; do   # SH blok acar
      ECHO item $x   # SH blogunda CMD satiri
  done               # SH blok kapar

  CMD anahtar sozcukleri: IF/ENDIF  FOR/NEXT  WHILE/WEND  DO/LOOP
  SH  anahtar sozcukleri: if/fi  for/done  while/done  until/done
                          case/esac  { }

6. Alt Yordam Tanimlamalari
-----------------------------
  :GREET
  echo "Merhaba $BATSH_ARG1"
  RET

  Etiketler : ile baslar ve RET veya RETURN ile biter.

7. CALL ve source
------------------
  CALL :GREET dunya      # argumanla alt yordam cagirma
  CALL diger.batsh       # baska .batsh dosyasini dahil etme (CMD)
  source diger.batsh     # baska .batsh dosyasini dahil etme (SH)
  . diger.batsh          # POSIX nokta gosterimi

  Argumanlar: $BATSH_ARG1 .. $BATSH_ARGn  (%BATSH_ARG1% CMD'de)
  Sayisi:     $BATSH_ARGC

8. Perl API
-----------
  BATsh->run($file)            # .batsh dosyasi calistir
  BATsh->run_string($source)   # kaynak dizgisi calistir
  BATsh->run_lines(@lines)     # satir dizisi calistir
  BATsh->repl()                # etkilesimli REPL
  BATsh->classify_token($tok)  # 'CMD' veya 'SH' dondurur
  BATsh->setlocal()            # %ENV ani goruntusu
  BATsh->endlocal()            # %ENV geri yukle
  BATsh->call_sub($lbl, @args) # alt yordam cagir
  BATsh->source_file($file)    # .batsh dosyasini dahil et
  BATsh->version()             # surum dizgisi

9. Platform Notlari
--------------------
  Windows: CMD ve SH bloklari saf Perl ile calisir -- harici cmd.exe/bash/sh gerekmez.
  UNIX:    CMD ve SH bloklari saf Perl ile calisir -- harici cmd.exe/bash/sh gerekmez.

10. Gereksinimler
-----------------
  Perl 5.005_03 veya uzeri. Yalnizca cekirdek moduller (File::Spec, Carp).
  CPAN bagimliligi yok.

Ayrica bakiniz: https://metacpan.org/dist/BATsh

11. CMD Boru Hatti ve Parametre Degistiricileri
-------------------------------------------------
  cmd1 | cmd2              # Gecici dosya uzerinden boru hatti (Pure Perl)
  SET /P VAR=Giri:         # STDIN'den bir satir oku, VAR'a yaz
  %~dp0                    # %0'in surucusu+dizini (en sik kullanim)
  %~n1, %~x1, %~nx1       # Dosya adi, uzanti, ikisi birden

12. SH Fonksiyonlari ve Degisken Genisletme
---------------------------------------------
  f() { echo $1; }         # Fonksiyon tanimi
  ${var%.*}  ${var%%.*}    # Sonek kaldir (en kisa/en uzun)
  ${var#*.}  ${var##*.}    # Onek kaldir (en kisa/en uzun)
  ${var/a/b} ${var//a/b}   # Degistir (ilk/tumune)
  ${var^^} ${var,,}        # Buyuk/kucuk harf
  cmd > f  cmd >> f  2>&1  # Yonlendirme
  cmd1 && cmd2             # VE zincirleme
  cmd1 || cmd2             # VEYA zincirleme
