├── README.md ├── ToDoList.sh ├── addr.txt └── loglar.txt /README.md: -------------------------------------------------------------------------------- 1 | # Linux Shell Programlama Projesi : TO DO LIST 2 | 3 | * Linux shell script, whiptail ve Zenity kütüphanesi ile yazılan, basit TO DO LIST programıdır. Programın YouTube videosu ile açıklanmış hali linktedir. 4 | ## Gerekli Kurulumlar 5 | * GNU LINUX'da `ctrl+alt+t` ile terminali açabilirsiniz. 6 | * `apt-get install whiptail` komutu ile Whiptail'i çalışma ortamınıza kurabilirsiniz. 7 | * `sudo apt-get install -y zenity` komutu ile Zenity'i çalışma ortamınıza kurabilirsiniz. 8 | * Projede gerekli kütüphaneleri indirdikten sonra proje dosyalarına erişmek ve bunları yerel bilgisayarınızda çalıştırmak için aşağıdaki adımı uygulayabilirsiniz: 9 | * Deponun sağ üst kısmında `Kod`, yazan yeşil butona tıkladıktan sonra ZIP İndir sekmesine tıklayıp yerel bilgisayarınıza proje kaynak kodlarını indirmiş olursunuz. 10 | * Dizinin kaynak kodunu açtıktan sonra, Dosyanıza `chmod +x ToDolist.sh`komutu ile yürütme/çalıştırma yetkisi verip `bash ToDoList.sh ` komutu ile çalıştırabilirsiniz. 11 | ## Nasıl Geliştirildi? 12 | >Bir Shell Script dosyasında geliştirilmiş bir uygulamadır. 13 | > Shell Script dosyası oluşturmak için `nano file_name.sh`komutu ile Shell Script dosyanızı bir `nano` editör ile oluşturup açıyoruz. Dosyanızın en başına `#!/bin/bash` yazınız. Daha sonra dosyanıza `chmod +x file_name.sh` komutu ile yürütme yetkisi veriniz. Dosyanızı `bash FileName.sh` komutuyla çalıştırabilirsiniz. 14 | > Shell Scripti etkileşimli hale getirmek ve daha anlaşılır tam ekran mesajlar görüntülemekisteriz. `Whiptail` ve `Zenity` kütüphanelerini kullanarak, kabuk komut dosyasındaki iletişim kutularını kullanarak çeşitli sorular sunmanıza veya mesajları görüntülemenize izin verecek programlardır. 15 | 16 | ## To Do List Özellikleri 17 | :round_pushpin: Dosyanızı Çalıştırdığınızda ilk önce karşınıza resimde görüldüğü gibi kimlik doğrulaması gelecektir. To Do List Shell Script doyamdali giriş bilgileri aşağıdaki gibidir. 18 | >username="ceyda" 19 | >password="123456" 20 | 21 | ![1](https://user-images.githubusercontent.com/54938901/149312374-d324589b-11ec-4d32-840a-ca6636acfd80.png) 22 | :round_pushpin:Hatalı giriş yapmanız durumunda aşağıdaki resimdeki uyarıyı göreceksiniz. 23 | ![2](https://user-images.githubusercontent.com/54938901/149312378-5381b201-d1db-42e2-b4dc-71f02d35f69d.png) 24 | :round_pushpin:Doğru giriş yaptığınızda ise karşınıza `whiptail`ile oluşturulan bir menü çıkacaktır. Menüde `aşağı-yukarı` yön tuşları ile seçiminizi belirtip `enter` tuşu ile seçebilirsiniz. Menüden çıkmak için `sağ-sol` yön tuşları ile `cancel`butonunu seçebilirsiniz. 25 | :round_pushpin:Menüdeki seçenekler şu şekildedir. 26 | > A. Yapılacak bir görev ekleyiniz. 27 | > B. Yapılacaklari listeleyiniz. 28 | > C. Şimdiye kadar yapılan görevleri listeleyiniz. 29 | > 30 | ![3](https://user-images.githubusercontent.com/54938901/149312387-662858c0-fa97-4a7f-acec-f090fb6de805.png) 31 | :round_pushpin:İlgili alanlar seçildiğinde gerekli fonksiyonlar çalışır. Menü ekranının görüntüsü aşağıdaki gibidir. 32 | :round_pushpin:A. seçeneğini seçerseniz Görev durumu default olrak`FALSE` olarak tanımlanan sonrasında görevinize özgü `unique(benzersiz)` bir tanımlama veya id girmenizi istedikten sonra görev adı, önemlilik derecesi ve son bitirme tarihini girebiliyorsunuz. Tamam tuşuna bastıktan sonra karşınıza `Tebrikler ekleme tamamlandı tekrar menüye dönmek ister misiniz?` şeklinde bir uyarı mesajı gelmektedir. Siz menüye dönmek için `tamam`tuşuna uygulamadan çıkmak için `hayır` tuşuna basmalısınız. 33 | ![4](https://user-images.githubusercontent.com/54938901/149312391-95483b84-95cb-4c6e-b2f5-5d60f3dc7968.png) 34 | ![5](https://user-images.githubusercontent.com/54938901/149312382-06a63fc8-a4fa-49a4-a58e-68ace25c9708.png) 35 | :round_pushpin:B. seçeneğini seçerseniz yapılacak görevler listelenmektedir. Bitirdiğiniz görevi seçip tamama tıklarsanız yaptığınız her görev yapılacak listesinden kaldırılıp yapılanlar listesine eklenecektir. Biten görev sonrası uyarı mesajı ile tekrar menüye dönmek istediğinizi sormaktadır. Siz menüye dönmek için `tamam`tuşuna uygulamadan çıkmak için `hayır` tuşuna basmalısınız. 36 | ![6](https://user-images.githubusercontent.com/54938901/149312389-753d60c0-cf97-4e79-a9c4-d61eaecce5e7.png) 37 | ![7](https://user-images.githubusercontent.com/54938901/149312396-f9c2d27c-e1e0-4da5-bc6b-01936c58d276.png) 38 | :round_pushpin:C. seçeneğini seçerseniz bugüne kadar yaptığınız tüm görevlerin listesini görebileceksiniz. 39 | ![8](https://user-images.githubusercontent.com/54938901/149312400-540935e1-2023-4b79-a47c-4f8c6214fbfa.png) 40 | ## Proje Detayı 41 | 42 | > Projemize bir Shell Script dosyası oluşturarak başladık. Oluşturduğumuz dosyanın başına `#!/bin/bash` komutunu ekledik. Bu projede 5 temel fonksiyon oluşturduk. Bu fonksiyonlar Şu şekildedir: 43 | - [ ] `GirisYap` Fonksiyonu ***zenity --password --username*** yapısı ile kullanıcıdan bir giriş alan ve sistemde önceden tanımlanmış *kullanıcı adı* ve *password* ile doğrulayıp menü'yü görüntüleminizi sağlar. 44 | - [ ] `GorevEkle` Fonksiyonu ***zenity --form*** yapısı ile oluşturulmuştur. Kullanıcıdan girişleri *--add-combo=çoklu seçim sağlar --add-entry=metin giriş ekranı --add-calendar=Takvim giriş ekranı* görevindedir. Alınan bu bilgileri `addr.txt` isimli klasörde tutmaktadır. 45 | - [ ] `GorevListele`Fonksiyonu `addr.txt`isimli dosyayı " , " ile ayırarak okuyup ***zenity --list--radiolist*** yapısı ile listelemektedir. Seçim yapıldığında seçime göre bulunan sıra önce G"örev Yapılma Durumu" `TRUE` durumuna çevrilir ve listeden kaldırılıp `loglar.txt` dosyasında tutulur. 46 | - [ ] `BitenGorevler`Fonksiyonu loglar.txt isimli dosyayı " , " ile ayırarak okuyup ***zenity --list--checklist*** yapısı ile listelemektedir. 47 | - [ ] `Menu` Fonksiyonu ***whiptail --menu*** yapısı ile menü oluşturmamızı sağlamıştır. 48 | 49 | 50 | -------------------------------------------------------------------------------- /ToDoList.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | username="ceyda" 4 | password="123456" 5 | 6 | GirisYap (){ 7 | ENTRY=`zenity --password --username` 8 | 9 | case $? in 10 | 0) 11 | if [ `echo $ENTRY | cut -d'|' -f1` == $username -a `echo $ENTRY | cut -d'|' -f2` == $password ] 12 | then 13 | Menu 14 | else 15 | zenity --warning --width=200 --height=100 \ 16 | --text="YANLIS KULLANICI ADI VE SIFRE ILE GIRIS YAPTINIZ !!!!" 17 | fi 18 | ;; 19 | 1) 20 | echo "Giris Yapamadiniz." 21 | ;; 22 | 23 | esac 24 | 25 | } 26 | 27 | GorevEkle () { 28 | zenity --forms --title="TO DO LIST GOREV EKLE" \ 29 | --text="Lutfen gorev taniminizi giriniz..." \ 30 | --separator="," \ 31 | --add-combo="Gorev Durumu" --combo-values="FALSE" \ 32 | --add-entry="Gorev Tanimi Tek Kelime İle " \ 33 | --add-entry="Gorev Adi" \ 34 | --add-combo="Onemlilik Derecesi" --combo-values="Cok Onemli|Onemli|Az Onemli|Gerekli|Onemsiz" \ 35 | --add-calendar="Son Bitirme Tarihi" >> addr.txt 36 | 37 | case $? in 38 | 0) 39 | echo "Gorev Eklendi." 40 | SC=`zenity --question --width=300 --height=100 \--text="Gorev Basarili bir sekilde eklenmistir. Ana menuye yonlendiriliyorsunuz"` 41 | case $? in 42 | 0) 43 | Menu 44 | ;; 45 | 1) 46 | echo "BIR HATA MEYDANA GELDI TEKRAR GIRIS YAPINIZ" 47 | ;; 48 | esac 49 | ;; 50 | 1) 51 | echo "Gorev eklenmedi" 52 | ;; 53 | esac 54 | } 55 | 56 | 57 | GorevListele () { 58 | oldifs=$IFS 59 | IFS=',' 60 | item=($(cat addr.txt|tr '\n' ',' ) ) 61 | IFS=$oldifs 62 | CHOICE=$(zenity --list --radiolist --title="Zenity List"\ 63 | --width=640 --height=480 \ 64 | --column="Yapildi mi?" --column="Gorev Tanimi" --column="Gorev Adi" --column="Onemlilik Derecesi" --column="Son Gun" "${item[@]}" ) 65 | if [ -z "CHOICE" ] 66 | then 67 | echo "Secim Olmadi" 68 | 69 | else 70 | echo "seçiminiz == "$CHOICE 71 | sayac=0 72 | n=0 73 | tmp=0 74 | kn=0 75 | for i in ${item[@]} 76 | do 77 | 78 | if [ $i == $CHOICE ] 79 | then 80 | tmp=`expr $sayac / 4` 81 | n=`expr $tmp + 1` 82 | kn=`expr $sayac - 1` 83 | echo ${item[$kn]} 84 | 85 | #sed -i s/"${item[$kn]}"/TRUE/"$n" addr.txt 86 | #sed -i '/^"$CHOICE"/d' addr.txt 87 | #sed -i '/$satir/d' addr.txt > loglar.txt 88 | echo "n = $n" 89 | #sed "$n"d addr.txt >> loglar.txt 90 | cat addr.txt | head -$n | tail -1 | sed s/FALSE/TRUE/g >> loglar.txt 91 | sed -i "$n"d addr.txt 92 | SC=`zenity --question --width=300 --height=100 \--text="Basarili bir sekilde gorev tamamlanmistir TEBRİKLER :) Menu icin YES Cikmak icin NO butonuna basiniz"` 93 | 94 | 95 | case $? in 96 | 0) 97 | Menu 98 | ;; 99 | 1) 100 | echo "TEKRAR GIRIS YAPINIZ" 101 | ;; 102 | 103 | esac 104 | 105 | fi 106 | sayac=`expr $sayac + 1` 107 | done 108 | 109 | fi 110 | } 111 | 112 | bitenler () { 113 | oldifs=$IFS 114 | IFS=',' 115 | item=($(cat loglar.txt|tr '\n' ',' ) ) 116 | IFS=$oldifs 117 | CHOICE=$(zenity --list --checklist --title="Zenity List"\ 118 | --width=640 --height=480 \ 119 | --column="Yapilanlar" --column="Gorev Tanimi" --column="Gorev Adi" --column="Onemlilik Derecesi" --column="Bitis Tarihi" "${item[@]}" ) 120 | case $? in 121 | 0) 122 | SC=`zenity --question --width=300 --height=100 \--text="Menu icin YES Cikmak icin NO butonuna basiniz"` 123 | case $? in 124 | 0) 125 | Menu 126 | ;; 127 | 1) 128 | echo "TEKRAR GIRIS YAPINIZ" 129 | ;; 130 | esac 131 | ;; 132 | esac 133 | 134 | } 135 | 136 | 137 | Menu () { 138 | 139 | CHOICE=$(whiptail --menu "To Do Liste HOSGELDİNİZ" 18 60 10 \ 140 | "A" "Yapilacak bir gorev ekle." \ 141 | "B" "Yapilacaklari goruntule." \ 142 | "C" "Şimdiye kadar yapilan görevler" 3>&1 1>&2 2>&3) 143 | 144 | if [ "$CHOICE" == "A" ] 145 | then 146 | GorevEkle 147 | 148 | elif [ "$CHOICE" == "B" ] 149 | then 150 | GorevListele 151 | elif [ "$CHOICE" == "C" ] 152 | then 153 | bitenler 154 | 155 | else 156 | echo "Yanliş giriş yaptiniz" 157 | fi 158 | 159 | } 160 | 161 | GirisYap 162 | -------------------------------------------------------------------------------- /addr.txt: -------------------------------------------------------------------------------- 1 | FALSE,Sinav2,Kimya Sinavi,Cok Onemli,22-01-2022 2 | FALSE,Sinav3,Matematik Sinavi,Az Onemli,23-01-2022 3 | FALSE,benzersiz,deneme gorevi,Cok Onemli,28-01-2022 4 | FALSE,gorevler,gorevlerr,Gerekli,14-01-2022 5 | -------------------------------------------------------------------------------- /loglar.txt: -------------------------------------------------------------------------------- 1 | TRUE,Sinav1,Fizik Sinavi,Gerekli,30-01-2022 2 | TRUE,Sinav4,Deneme Sinavi,Onemsiz,20-02-2022 3 | TRUE,gorevler,gorevlerr,Gerekli,14-01-2022 4 | --------------------------------------------------------------------------------