­čĹĘÔÇŹ­čĺ╗ Shell Script

Unix i┼čletim sistemlerinin ortak programlama dilidir.

├ľnemli Bilgiler

  • sh uzant─▒l─▒ dosyalara yaz─▒l─▒rlar

  • Dosyalar─▒n ilk sat─▒rlar─▒na shebang olarka ifade edilen sat─▒r yaz─▒l─▒r

    • Kodlar derlenmeden ├Ânce bu sat─▒ra bak─▒l─▒r ve yap─▒s─▒na karar verilir (kaynak)

  • Dosyan─▒n ilk sat─▒r─▒na shell script oldu─čunu belli etmesi i├žin #!/bin/bash yaz─▒l─▒r

  • Terminal ├╝zerinden bash <dosya> olarak ├žal─▒┼čt─▒r─▒labilirler

VsCode Eklentileri

Temel Operat├Ârler

Operat├Âr

A├ž─▒klama

ÔÇő

ÔÇő

-

Son ├žal─▒┼čan dizine gitme

ÔÇő

ÔÇő

~

Home dizini

ÔÇő

ÔÇő

<komut>; <komut>;

Birden fazla komut i┼čleme (birbirlerini beklemez)

ÔÇő

ÔÇő

<komut> & <komut>

Birden fazla komut i┼čleme (s─▒rayla i┼čler)

ÔÇő

ÔÇő

<komut> && <komut>

1. komut ├žal─▒┼č─▒rsa 2.'yi i┼čleme

ÔÇő

ÔÇő

`

ÔÇő

`

1. olmazsa 2. komutu i┼čleme

`

`

2. komutu ilk komutun ├ž─▒kt─▒s─▒nda ├žal─▒┼čt─▒rma (pipeline)

ÔÇő

>

Y├Ânlendirme (yoksa olu┼čturur)

ÔÇő

ÔÇő

>>

Eklemeli y├Ânlendirme (├╝zerine yazmaz, ekler)

ÔÇő

ÔÇő

!$

Bir ├Ânce kullan─▒lan de─či┼čkeni kullanma

ÔÇő

ÔÇő

!!

Bir ├Ânceki komutu kullanma

ÔÇő

ÔÇő

Bash Komutu

Komut

A├ž─▒klama

bash <dosya>

Dosyadaki komutlar─▒ terminalde ger├žekle┼čtirir

bash -c "<komut>"

Verilen komutu terminalde ger├žekle┼čtirir

Yazd─▒rma ─░┼člemleri (Echo)

Komut

A├ž─▒klama

echo "<metin>"

Ekrana metni oldu─ču gibi basma

echo -e "<metin>"

Ekrana metni formatl─▒ basma (\n \t gibi karakterler ├žal─▒┼č─▒r)

echo $<de─či┼čken>

Ekrana de─či┼čken basma

echo $(<komut>)

Ekrana komut ├ž─▒kt─▒s─▒n─▒ basma

echo $(<komut>)' metin '$(<komut>)

Ekrana komut ├ž─▒kt─▒s─▒n─▒ ve metni basma

echo "<metin>" > <dosya_yolu>

Verilen metni dosyan─▒n ├╝zerine yazma, yoksa dosyay─▒ olu┼čturma

echo "<metin>" >> <dosya_yolu>

Verilen metni dosyaya ekleme

sudo bash -c echo "<metin>" > <root_dosya>

Root dosyas─▒n─▒n ├╝zerine yazma, yoksa dosyay─▒ olu┼čturma

<komut> &> /dev/null

Çıktıları gizleme

> ile yap─▒lan y├Ânlendirme i┼člemleri echo taraf─▒ndan de─čil shell taraf─▒ndan yap─▒l─▒r. Yetki sorunlar─▒ olursa echo'ya de─čil shell'e yetki verilmelidir.

  • <metin> Ekrana bas─▒lacak metin

    • ├ľrn: yemreak

  • <de─či┼čken> Linux de─či┼čkenleri (ortam de─či┼čkenleri vs.)

    • ├ľrn: PYTHONPATH, HOME

  • <komut> Linux komutlar─▒

    • ├ľrn: pwd

  • <dosya_yolu> Metnin yaz─▒laca─č─▒ dosyan─▒n yolu

    • ├ľrn: yemreak.txt, ../yemreak.sh, ~/yemreak.ini

Cat ile Yazd─▒rma ─░┼člemi

Dosyaya EOT gelene kadar yazma

cat << <sonland─▒rma_metni> >> <dosya_yolu>
sat─▒r1
sat─▒r2
<sonland─▒rma_metni>
  • <sonland─▒rma_metni> Bu metin geldi─činde yazma i┼člemini sonland─▒r─▒r

    • ├ľrn: A olursa YemreAK yaz─▒ld─▒─č─▒nda sonlanmaz, A yaz─▒ld─▒─č─▒nda sonlan─▒r.

  • <dosya_yolu> Metnin yaz─▒laca─č─▒ dosyan─▒n yolu

    • ├ľrn: yemreak.txt, ../yemreak.sh, ~/yemreak.ini

De─či┼čkenler

  • De─či┼čkenler kod i├žerisin $ ├Ân eki ile kullan─▒l─▒r

  • De─či┼čkenlere atama yap─▒l─▒rken = sonras─▒ ve ├Âncesinde bo┼čluk b─▒rak─▒lmaz

    • Bo┼čluk olursa her metni komut gibi i┼člemeye ├žal─▒┼č─▒r ve hata verir

  • De─či┼čkenlerle aritmatik i┼člemler let "<i┼člem>" komutuyla yap─▒l─▒r

    • let "myvar = 5" ├žal─▒┼č─▒rken, mayvar = 5 hata verir

file="help"
let "file = 'wow'"
echo $file

Let komutu hakk─▒nda daha fazla bilgi i├žin buraya bakabilirsin.

Kullan─▒c─▒dan Girdi (Input) Alma

read varname
echo $varname
ÔÇő
read -p 'Username: ' uservar # Girdide yorum g├Âsterme
read -sp 'Password: ' passvar # Gizli girdi
echo
echo Thankyou $uservar we now have your login details

ÔÇőBash User InputsÔÇő

String ─░┼člemleri

${#var} # Var string'inin uzunlu─čunu hesaplama
${var#*.} # .'ya kadar t├╝m metni siler
ÔÇő
# String K─▒yaslama
if [ $kelime == "yemreak" ]; then
echo "E┼čde─čer"
fi
ÔÇő
# String i├žinde alt stirng arama (c├╝mle'de kelime varsa 1) (2 tane [ oldu─čuna dikkat)
if [[ "$cumle" =~ "$kelime" ]]; then
echo "Bulundu"
else
echo "Bulunamad─▒"
fi
ÔÇő
# Stringdeki i. s─▒radaki kelimeyi alma
let "word = $(echo $WID | awk '{print $1}')" # ─░lk olan─▒ alma $word1 = ilk kelime
let "word = $(echo $WID | awk '{print $i}')" # i. olan─▒ alma
ÔÇő
# Bo┼čluklarla ayr─▒lan c├╝mledenki kelimeleri alma
for kelime in $cumle; do
echo $kelime
done

─░f-Else Yap─▒s─▒

Temel a├ž─▒klamaya buradan eri┼čebilirsin.

[ $1 ] || { echo "Usage: $0 file1.wma file2.wma"; exit 1; } # 1.parametre yoksa ├ž─▒kma

For D├Âng├╝s├╝

Temel a├ž─▒klamaya buradan eri┼čebilirsin.

Terminalde Se├žim Yapt─▒rma

Switch - Case Yap─▒s─▒

while true; do
read -p "Do you wish to install this program?" yn
case $yn in
[Yy]* ) make install; break;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
done

Select Yap─▒s─▒

echo "Do you wish to install this program?"
select yn in "Yes" "No"; do
case $yn in
Yes ) make install; break;;
No ) exit;;
esac
done

─░├ž ─░├že Se├žim Yap─▒s─▒

while true; do
read -p "Xammp kurmak ister misin [y/n] " # -n 1 -r
case $REPLY in
[Yy]* ) {
# ─░stenen kodlar
ÔÇő
while true; do
read -p "Xammp komutlar─▒ tan─▒mlans─▒n m─▒ (xampp ve mysql) [y/n] " # -n 1 -r
case $REPLY in
[Yy]* ) {
# ─░stenen kodlar
break
};;
[Nn]* ) break;;
esac
done
ÔÇő
while true; do
read -p "Wordpress kurmak ister misin [y/n] " # -n 1 -r
case $REPLY in
[Yy]* ) {
# ─░stenen kodlar
break
};;
[Nn]* ) break;;
esac
done
ÔÇő
break
};;
[Nn]* ) break;;
esac
done

Terminalde For D├Âng├╝s├╝ (For Loop)

for f in *; do
echo "-> $f"
done

Her Dizine For D├Âng├╝s├╝

Alt Dizinler Dahil De─čil

for D in *; do
if [ -d "${D}" ]; then
echo "${D}" # your processing here
fi
done
for D in *; do [ -d "${D}" ] && my_command; done
for D in */; do my_command; done

Alt Dizinler Dahil

for D in `find . -type d`
do
//Do whatever you need with D
done

Fonksiyonlar

dowload_with_name() {
var='hello'
return $var
}

Fonksiyonlar─▒n Kullan─▒m─▒

dowload_with_name # Fonksiyonlar isimleri ile kullan─▒l─▒r
echo $? # Return de─čeri '$?' olarak tan─▒mlan─▒r. Hello basar

Temel fonksiyon kayna─č─▒ i├žin buraya bakabilirsin.

Parametreler

  • $1 1. parametre

  • $2 2. parametre

  • $0 Fonksiyonun ismi

  • $@ T├╝m parametreler (dizi)

Parametreli Fonksiyonlar

fonksiyon(){
arg1=$1 # 1. parametre
arg2=$2 # 2. parametre
echo "1. $arg1, 2. $arg2"
}
ÔÇő
# Kullan─▒m─▒
fonksiyon arguman1 arguman2 # 1. arguman1, 2. arguman2

Dosya ─░┼člemleri

Kontrol Bayraklar─▒

Kullan─▒m ┼čekli [ <bayrak> <string> ]

  • [ -f "$1" ] || {echo "$1 dosyad─▒r"}

Bayrak

A├ž─▒klama

-f

Dosya kontrol├╝ (File)

-d

Dizin kontrol├╝ (Directory)

Dosya Okuma

Kaynak i├žin buraya bakabilirsin.

filepath='img0.jpg' # Dosyan─▒n yolu
filestr='' # Okunan verilerin kay─▒t edilece─či de─či┼čken
ÔÇő
while IFS= read line # Dosya sonuna kadar okuma
do
let "filestr += $line" # Sat─▒r sat─▒r dosyay─▒ okuma
done < "$filepath" # Okunacak dosyan─▒n yolunu verme

Dosyadan URL ile ─░ndirme

prefix='img' # ├ľn ek
ext='.jpg' # Dosya uzant─▒s─▒
num=0 # Saya├ž
while IFS= read line
do
wget -O $prefix$num$ext "$line"
let "num += 1"
done < "../$file"

S─▒k─▒┼čt─▒rma (Ar┼čivleme) ─░┼člemleri

Dosya s─▒k─▒┼čt─▒rma:

filename="dosya yolu"
out="Çıktı yolu.zip"
zip "$out" "$filename$"
ÔÇő
zip -R $out "*.c" $ # '.c' ile biten d├╝m dosyalar─▒ s─▒k─▒┼čt─▒r─▒r (alt dizinlerde de arar /dir1/file.c /dir2/file.c)

Dizin S─▒k─▒┼čt─▒rma:

dirname="dizin_yolu"
out="├ç─▒kt─▒ yolu.zip" # Bo┼čluk kabul eder
zip -r "$out" "$dirname$"

Harici Ba─člant─▒lar