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

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Empat

  • Newbie
  • *
  • İleti: 9
  • Dağıtım: Arch Linux
Bash Script'te Takıldığım Birkaç Yer
« : 28 Haziran 2018 - 13:36:17 »
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

Çevrimdışı decent

  • Administrator
  • *****
  • İleti: 1.086
    • ARCHER KIM
  • Dağıtım: Arch Linux <:> Ubuntu
  • Sürüm: *
  • Ekran Kartı: Nvidia / ATI
Ynt: Bash Script'te Takıldığım Birkaç Yer
« Yanıtla #1 : 29 Haziran 2018 - 09:24:31 »
@Empat,
Takibe alıp biraz bakınayım.

Şurayı da kenara not düşeyim.
https://amir.rachum.com/blog/2015/11/28/terminator-multiple-custom-commands/

Çevrimdışı Empat

  • Newbie
  • *
  • İleti: 9
  • Dağıtım: Arch Linux
Ynt: Bash Script'te Takıldığım Birkaç Yer
« Yanıtla #2 : 29 Haziran 2018 - 14:44:21 »
@decent, teşekkürler.
Sazımı asın duvara
Yalnız kalsın bahtı kara
Vasiyetim tüm dostlara
Türkülerle gömün beni

Çevrimdışı Empat

  • Newbie
  • *
  • İleti: 9
  • Dağıtım: Arch Linux
Ynt: Bash Script'te Takıldığım Birkaç Yer
« Yanıtla #3 : 21 Ağustos 2018 - 22:20:20 »

Konuyu açalı uzun süre oldu. Farkındayım fakat uzun bir süredir bu işlere vakit ayıramamıştım. Şimdi script'imin son hali aşağıdaki gibi.


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


if sudo systemctl stop NetworkManager
   then
      if sudo systemctl start NetworkManager
         then
            date >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "'NetworkManager' servisi yeniden başlatıldı. PID numarası: " >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo pgrep NetworkManager >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/NetworkManagerStatusLogs
         else
           date >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "'NetworkManager' servisinin PID numarası alınamadı veya olay zamanı yazdırılamadı." >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/NetworkManagerStatusLogs
      fi
   else
      date >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "NetworkManager servisi yeniden başlatmak için durdurulamadı." >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/NetworkManagerStatusLogs
fi


if sudo rm -rf /home/mahmut/Downloads
   then
      date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının 'Downloads' dizini silindi." >> /var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
   else
      date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının 'Downloads' dizini silinemedi." >> /var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
fi


if rm -rf /home/mahmut/.local/share/Trash/files/*
   then
      date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının çöp kutusu boşaltıldı." >> /var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
   else
      date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının çöp kutusu boşaltılamadı." >> var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
fi


if [ $USER == mahmut ]
   then
      sudo systemctl start httpd && date >> /var/log/StartupSettings/httpdLogs && sudo echo "Kullanıcının 'mahmut' kullanıcısı olduğu doğrulandı. 'httpd' servisi başlatıldı. PID numarası: " >> /var/log/StartupSettings/httpdLogs && sudo pgrep httpd >> /var/log/StartupSettings/httpdLogs && sudo echo "--------------------------------------------------------------------------------"  >> /var/log/StartupSettings/httpdLogs
     
   else
       date >> /var/log/StartupSettings/httpdLogs && sudo echo "Kullanıcının 'mahmut' kullanıcısı olduğu doğrulanamadı veya belirlenemeyen bir nedenden dolayı 'httpd' servisi başlatılamadı." >> /var/log/StartupSettings/httpdLogs && sudo echo "--------------------------------------------------------------------------------"  >> /var/log/StartupSettings/httpdLogs
fi

Sazımı asın duvara
Yalnız kalsın bahtı kara
Vasiyetim tüm dostlara
Türkülerle gömün beni