5 – Kullanıcı Girdisi Alma ve Argümanlarla Çalışma

Bash scriptler, sistem yöneticileri ve geliştiriciler için sık tekrarlanan görevleri otomatikleştirmede son derece kullanışlı bir araçtır. Bash scriptlerin gücü, kullanıcı girdilerini işleme ve komut satırı argümanlarını kullanma kabiliyetlerinden de gelir. Bu yazıda, kullanıcıdan veri almak, komut satırı argümanlarını kullanmak ve bu iki özelliği birleştirerek etkileşimli scriptler hazırlamanın temellerine odaklanacağız.
read
Komutu ile Kullanıcıdan Veri Alma
Bash scriptlerinde kullanıcıdan veri almak, scriptlerin dinamik hale getirilmesini sağlar. Kullanıcı girdisi almak için bash’te read
komutu kullanılır. read
, kullanıcının girdiği veriyi alıp bir değişkene atar ve bu veriyi script içerisinde kullanmamıza olanak tanır.
Örnek: Kullanıcıdan İsim Alma
#!/bin/bash
echo "Lütfen adınızı girin:"
read isim
echo "Merhaba, $isim!"
Bu basit script, kullanıcıya ismini sorar ve kullanıcı ismini girdikten sonra bu ismi kullanarak bir karşılama mesajı görüntüler. read
komutu isim
değişkenine kullanıcıdan gelen veriyi atar ve echo
komutu ile bu veri ekrana yazdırılır.
read
Komutunun Kullanım Seçenekleri
-p
: Kullanıcı girdisi istemini tek bir satırda göstermek için kullanılır.bashKodu kopyalaread -p "Kullanıcı adınızı girin: " username echo "Girdiğiniz kullanıcı adı: $username"
-s
: Girilen veriyi gizlemek için kullanılır. Özellikle parola alırken kullanışlıdır.bashKodu kopyalaread -s -p "Parolanızı girin: " password echo echo "Parola başarıyla alındı."
-t
: Girdi için bekleme süresi belirler. Bu süre sonunda kullanıcı girdi sağlamazsa script devam eder.bashKodu kopyalaread -t 5 -p "Bir şeyler yazın (5 saniye içinde): " input echo "Girdiğiniz: $input"
Script Argümanları ($1
, $2
, vb.) Kullanma
Bash scriptleri, komut satırından çağırıldıklarında argümanlar alabilirler. Bu argümanlar, script’e işlenecek dinamik değerler sağlamaya yarar. Komut satırında script adıyla birlikte verilen argümanlar $1
, $2
, $3
gibi değişkenler ile ifade edilir.
Örnek: Komut Satırı Argümanları Kullanımı Bir script yazalım ve bu script iki argüman alsın: isim ve yaş.
#!/bin/bash
isim=$1
yas=$2
echo "Merhaba, $isim. Sen $yas yaşındasın."
Bu script, ./script.sh Ahmet 25
şeklinde çağrıldığında Ahmet
ve 25
değerlerini argüman olarak alır ve şu çıktıyı üretir:
Merhaba, Ahmet. Sen 25 yaşındasın.
Özel Argümanlar ve Kullanımları
$0
: Script’in adı veya yolu.$1
,$2
,$3
, …: Script’e verilen argümanlardır.$#
: Toplam argüman sayısını döndürür.$@
: Tüm argümanları bir liste olarak döndürür.$*
: Tüm argümanları tek bir değişken olarak döndürür.
Örnek: Argüman Sayısı Kontrolü
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Kullanım: $0 isim yas"
exit 1
fi
echo "Merhaba, $1. Yaşınız: $2"
Bu script, eğer kullanıcı en az iki argüman sağlamazsa bir hata mesajı verip script’i sonlandırır.
Kullanıcıdan Veri Alarak Etkileşimli Script Hazırlama
Etkileşimli bir script, kullanıcı girdilerini alarak sürecin belirli bölümlerini bu girdilere göre yürütür. Böylece script daha esnek ve dinamik hale gelir. read
komutu ve komut satırı argümanlarını birleştirerek etkileşimli ve kullanıcı dostu scriptler oluşturmak mümkündür.
Örnek: Etkileşimli Script ile Dosya İşlemleri Aşağıdaki script, kullanıcının belirttiği bir dosya adını alır ve o dosyayı oluşturur.
#!/bin/bash
read -p "Oluşturulacak dosyanın adını girin: " dosya_adi
if [ -f "$dosya_adi" ]; then
echo "Dosya zaten mevcut: $dosya_adi"
else
touch "$dosya_adi"
echo "$dosya_adi oluşturuldu."
fi
Bu script, kullanıcının belirttiği dosya adını alır ve eğer o dosya mevcut değilse yeni bir dosya oluşturur. Mevcut bir dosya varsa, dosyanın zaten mevcut olduğu bildirilir.
Komut Satırı Argümanları ve Kullanıcı Girdisini Birleştirme
Bazı durumlarda script, hem komut satırından argüman alabilir hem de eksik bilgileri kullanıcıdan isteyebilir. Bu tür bir kullanım, script’in daha esnek olmasını sağlar.
Örnek: Dosya Yedekleme Script’i Bir dosyayı yedeklemek için komut satırı argümanı olarak dosya adı alınabilir, ancak yedekleme dizinini kullanıcıdan isteyebiliriz.
#!/bin/bash
dosya_adi=$1
if [ -z "$dosya_adi" ]; then
echo "Yedeklenecek dosya adını komut satırında belirtmelisiniz."
exit 1
fi
if [ ! -f "$dosya_adi" ]; then
echo "Belirtilen dosya mevcut değil: $dosya_adi"
exit 1
fi
read -p "Yedekleme yapılacak dizini girin: " yedek_dizin
if [ ! -d "$yedek_dizin" ]; then
echo "Belirtilen yedekleme dizini mevcut değil: $yedek_dizin"
exit 1
fi
cp "$dosya_adi" "$yedek_dizin"
echo "$dosya_adi dosyası $yedek_dizin dizinine yedeklendi."
Bu script, önce dosya adını komut satırından alır, ardından yedekleme dizinini kullanıcıdan ister ve bu bilgileri kullanarak dosyanın yedeğini oluşturur. Bu sayede script, hem komut satırı argümanlarını hem de kullanıcı girdisini etkin bir şekilde kullanır.
Kullanıcı girdisi almak ve komut satırı argümanlarıyla çalışmak, bash scriptleri etkileşimli ve dinamik hale getirmek için güçlü araçlardır. read
komutu, kullanıcıdan veri almayı sağlarken, $1
, $2
gibi argümanlar scriptlere dinamik veri sağlamanın kolay bir yoludur. Bu yöntemlerin doğru kullanımı, daha esnek, kullanıcı dostu ve yeniden kullanılabilir bash scriptlerin yazılmasına olanak tanır. Etkileşimli scriptler, sistem yönetimi, veri işleme ve otomasyon süreçlerinde daha kullanıcı odaklı çözümler sunarak verimliliği önemli ölçüde artırır.