👨💻Shell Script
Unix işletim sistemlerinin ortak programlama dilidir.
Önemli Bilgiler
sh
uzantılı dosyalara yazılırlarDosyanın ilk satırına shell script olduğunu belli etmesi için
#!/bin/bash
yazılırTerminal üzerinden
bash <dosya>
olarak çalıştırılabilirler
VsCode Eklentileri
Temel Operatörler
-
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
bash <dosya>
Dosyadaki komutları terminalde gerçekleştirir
bash -c "<komut>"
Verilen komutu terminalde gerçekleştirir
Yazdırma İşlemleri (Echo)
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şlemleriecho
tarafından değilshell
tarafından yapılır. Yetki sorunları olursaecho
'ya değilshell
'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
olursaYemreAK
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ırDeğişkenlere atama yapılırken
=
sonrası ve öncesinde boşluk bırakılmazBoş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ırlet "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
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"}
-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
Last updated
Was this helpful?