Arch Linux Türkiye Forum


Gönderen Konu: Bash Script'te Takıldığım Birkaç Yer  (Okunma sayısı 79 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

2 Yanıt  Bash Script'te Takıldığım Birkaç Yer
: 28 Haziran 2018 - 13:36:17

Çevrimdışı Empat

  • Newbie
  • *
  • 8
  • Dağıtım: Arch Linux
Merhaba.

Birkaç günden beri bash script'te takıldığım birkaç yerle uğraşıyorum. Öncelikle, bash dilinde bilgimin temel düzey olduğunu belirtmek istiyorum. İnternette sorularımı cevaplayabilecek türkçe kaynak ya da örnek bulamadım. İngilizce dili konuşulan bir foruma ise, konu açıp derdimi anlatabilecek kadar ingilizce bilgim yok. Bash dilinde, sistem açılışında otomatik başlatmayı hedeflediğim bir script yazdım. Amacım, istediğim yazılım ve komutları otomatik çalıştırmaktan ziyade, bash dilini ve bash dilindeki kafama takılan, aşağıda anlatacağım işlemlerin algoritmasını ve kodlarını yazarak ve çalıştırarak anlamak.
 
Not: Yazdığım script'te istediğim komutun çalışması için sorulan parolayı nasıl tanımlayabileceğimi ya da komutu parola sormasını engelleyerek, istediğim kullanıcı üzerinde çalıştırabileceğimi bilmediğimden, sudoers aracılığıyla, sudo komutundaki parola onayını kapatıp, sudo ekleyerek yazdım.

Yazdığım script bu:

Kod: [Seç]
#!/bin/bash

sudo -u root systemctl restart NetworkManager

sudo -u root rm -rf /home/mahmut/Downloads

sudo -u root rm -rf /home/mahmut/.local/share/Trash/files/*

if [ $USER == mahmut ]
   then
      if sudo -u mahmut -E konsole | sudo -u mahmut -E /opt/sublime_text_3/sublime_text | sudo -u mahmut -E /usr/bin/chromium ns1.google.com | sudo -u root systemctl start httpd
         then
            echo "Yazılım ya da yazılımlar başlatıldı."
      else
         echo "HATA: Yazılım ya da yazılımlar başlatılamadı."
      fi
else
   echo "HATA: Yazılımlar başlatılamadı. Giriş yapılan kullanıcı 'mahmut' kullanıcısı değil."
fi

İlk takıldığım yer, ilk if koşulundaki komutları açtırmadan önce konsole uygulamasını açıp, if koşulunun konsole uygulaması üzerinde çalışmasını istiyorum. Örneğin; sudo -u mahmut -E /usr/bin/chromium ns1.google.com komutunda chromium'un ns1.google.com adresindeki sekmeyle açılması gibi konsole'un da yukarıdaki en üstteki if koşuluyla çalışmasını istiyorum.

İkinci takıldığım yer ise, uygulamanın çalışıp çalışmadığı kontrol ettirme işlemini nasıl koda dökebileceğim konusu. İkinci if koşulunda belirttiğim bu komutlardaki uygulamaların sudo -u mahmut -E konsole | sudo -u mahmut -E /opt/sublime_text_3/sublime_text | sudo -u mahmut -E /usr/bin/chromium ns1.google.com | sudo -u root systemctl start httpd çalışma durumunu, ikinci if koşulunda then bölümüne, ekleyeceğim üçünçü if koşulu kontrol ettirip, sonuca göre hangi yazılımın başlatıldığını veya başlatılamadığını konsole'a yazmasını istiyorum. Bunun için aklıma bir algoritma geldi. Fakat bilgim temel düzey olduğu için koda dökemedim. Aklıma gelen algoritma şu; ps -aux ile aktif süreçlerin çıktısını alıp, grep ile kontrol ettirmek istediğimiz süreç isimlerini aratıp, bu sonucu bir metin belgesine aktarıp, metin belgesi içinde ilgili süreçlerin adını aratmak, ardından, adı bulunan ve bulunmayan süreçleri echo komutu ile yazdırmak. Yazdırdıktan sonra da, metin belgesinin sed ile içini boşaltmak.

Belki bu işlemler için, daha basit bir algoritma veya yardımcı olabilecek araç vardır. Varsa, önerilerinize açığım. Yoksa da, bir yardımseverin, bu algoritmadaki işlemi koda dökmesini rica ediyorum. Üstteki script'te yapmak istediklerimi daha farklı bir algoritmayla yapabileceksem, algoritma önerilerinize de açığım.
« Son Düzenleme: 28 Haziran 2018 - 18:05:37 Gönderen: Empat »
Sazımı asın duvara
Yalnız kalsın bahtı kara
Vasiyetim tüm dostlara
Türkülerle gömün beni

Yanıtla #1
: 29 Haziran 2018 - 09:24:31

Çevrimdışı decent

  • Administrator
  • *****
  • 1.083
    • ARCHER KIM
  • Dağıtım: Ubuntu
  • Sürüm: *
  • Ekran Kartı: Nvidia / ATI

Yanıtla #2
: 29 Haziran 2018 - 14:44:21

Çevrimdışı Empat

  • Newbie
  • *
  • 8
  • Dağıtım: Arch Linux
Sazımı asın duvara
Yalnız kalsın bahtı kara
Vasiyetim tüm dostlara
Türkülerle gömün beni