Ne yazik ki bos. shopt compat ile ilgili birsey donmuyor "bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)" icin Sanirim 3.2 ve uzerinde geliyor bu ozellik. Scriptin ikinci satirina shopt -s compat31 eklenirse direk calisir gibi geliyor veya if [[ $line =~ "^Status: " ]];then yerine if [[ $line =~ "^Status:\ " ]];then seklinde calisabilir. |
Burayi atlamisim.
Burada eger --all verirsek buldugu gibi ekrana basiyor sonucu. Eger all verilmez ise else'e gidiyoruz ve buldugunu last_found_line icine aktariyoruz. While dongusunden cikinca ekrana last_found_line degerini basiyoruz. Eger hicbir match eden satir bulamadiysak last_found_line ilk degeri "Not Found!" oldugundan ekrana "Not Found!" basiliyor. Bir ekleme: Linux üzerinde (Perl'de de var bildiğim kadarıyla ve diğer bir takım dillerde de olabilir) şöyle bir durum söz konusu && ve || için. shell> ls && pwd && echo "a" yazdığınızda ls sonucu doğruysa yani komut hata vermediyse pwd çalışır. Eğer pwd hata dönmezse echo "a" çalışır. Burada if chekini düşünün eğer if checkinin içine girilecekse ve ayraç && ise önce birinciye bakılır ilki, doğruysa ikinciye bakılır. Çünkü && için her girdinin doğru olması gerekir. shell> ls || pwd || echo "a" yazarsanız ls sonucu doğruysa gerisine bakılmaz. Çünkü || için herhangi bir durumun doğru olması yeterlidir. İlki çalışınca yoluna devam eder. Perl örnegi, #!/usr/bin/perl my deger = 123 || 234; printf("Sonuc: %d\n",$deger); çıktısı Sonuc: 123 şeklinde olacaktır. #!/usr/bin/perl my deger = 0 || 234; printf("Sonuc: %d\n",$deger); çıktısı Sonuc: 234 şeklinde olacaktır. Bilmem anlatabildim mi ? |
Power shell ![]()
Bunun direct echo yerine exec yapani vardi ama notumu bulamiyorum. ![]() |
Sadece grep ile yapabileceğiniz basit işlem için bu kadar uğraşmanıza gerek yok arkadaşlar. Aşağıdaki kodu dosya olarak kaydedip, executable yapın. Taranacak dosyayı data.txt olarak kaydedip, scripti bu dosya ile aynı dizinde "./script aranacak-kelime" şeklinde aranacak kelimeyi, scripte parametre olacak şekilde çalıştırın.
Burada kritik olan "if"li satırı doğru olarak yakalayabilmek. O nedenle daha spesifik ve her if'li satırda olduğu görünen"$HOME" kelimesini arattım. |
Benzerini yapmistim ilk mesajlarda. > cat hop.txt | grep 'Error\|if \[' if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/1 ; fi Error******************************************** if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/2 ; fi if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/1 ; fi if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/1 ; fi Sonra is goze duzgun gorunen hata ayiklayan birsey yapalim derken boyle oldu :) Yukaridaki yazdigimiz scriptlerde her satir icin grep de kullanilabilir istenirse ama az pure bash olsun derken sonuc boyle :) grep -e "$ARANAN" -e '$HOME' data.txt |grep -A1 "$ARANAN" | grep -v "$ARANAN" guzelmis bu arada. Yalniz ben solaris'de calistiramadim. -A1 i begenmedi. Linux'da calistirdim. bash-2.05a$ ARANAN=HatA bash-2.05a$ grep -e "$ARANAN" -e '$HOME' list.txt |grep -A1 "$ARANAN" | grep -v "$ARANAN" if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/4 ; fi if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/3 ; fi -- if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/8 ; fi bash-2.05a$ ARANAN=Hata bash-2.05a$ grep -e "$ARANAN" -e '$HOME' list.txt |grep -A1 "$ARANAN" | grep -v "$ARANAN" if [ -f $HOME/slab.ini ]; then $HOME/slab.ini $HOME/scripts/CronJobs/3 ; fi Fakat data az daha komplike hal alinca karisabiliyor durum. |
Güzel olmuş kod. Eline sağlık. Cron satırından sonra 3 satır aşağı if checkini sayman sanırım kalıp sürekli böyle geldiğinden. Tabi compile etme şansım olmadı ama bence Code Inspection'dan geçer ![]() 21.yy ama hala kullanılıyor Bash ne yapalım :) Bir de benim işler sürekli WRS üzerinde genelde C,C++ ve Bash. Perl bile pek kullanma fırsatım olmuyor. Arada Perl Frameworklerine yardım istenirse kod giriyorum. Yeri gelse de Ruby ve Phyton kulanılsa güzel olurdu. Ama sistem böyle :) Java sadece GUI trafında mevcut. Keşke OpenCL C++11 kullanılcak yeni piyasalar keşfedebilsem ![]() |
@seyfi84 Kastettiğini anlayabiliyorum. ![]() |
WRS(Wind River Systems) Wind River Linux diyebiliriz. http://www.windriver.com/products/linux-secure/ http://en.wikipedia.org/wiki/Wind_River_Systems OpenCL kullanmiyorum iste. Kullanicak yerim yok. Keske o yonlere kayabilcek firsatlar yakalasam diyorum ![]() |
WRS'in pazar durumu ile pek ilgilenmedim ondan su an ne durumdadir bilemiyorum. Uzerinde saglanan rpm paketlerini kullanmaca yapmaktayim. ![]() |
arkadaslar bu harika kod icin tesekkürler. sayenizde bash script hakkinda temel bir bilgi sahibi oldum ve birseyler ögrendim Benim yapmak istedigim bu kodu crontab ile hergün 1 kez arkaplanda calistirip, aranilan kelimeleri iceren mailleri kontrol edip buna ait if satirlarini bir dosyaya yazmak...Crontab'a eklemek ve sonucu dosya icine yazma isini hallettim lakin bu harika script simdilik sadece elle calisip parametre bekliyor. Ben ise bu scripti crontab ile otomatik cagiracagim icin parametre vermeden script icinde aranan kelimeleri belirlemek istiyorum. Yani script simdiye kadar yaptigi görevi bizden parametre beklemeden yapmali aranacak kelimeler Error permission not found (iki kelime) refused failed can not open (üc kelime) ilerleye zamanlarda yeni kelimelerde gelebilir.Simdilik bu aranacak kelimeleri script icine nasil ekleyebilirimki script simdiye kadar oldugu gibi bizden parametre olarak aldigi tek bir kelimeyi degilde tüm bu kelimeler icin bir arama yapsin ve sonucu ayni sekilde göstersin. (Sonuc satirina aranan kelimeyide gösterirsem harika olur) Hatirlatma olarak en son calisan ve benimde azda olsa degistirdigim kodumuz su sekilde
|
Daha onceki mesajimda soylemistim. direk iki kelime veya fazlasini verebiliyorsun zaten.
Bu versiyon son matched istegin icin az modifiye edildi bu arada. |
Matched Words() seklinde olan versiyonu posten yapmadin herhalde.Benim görebildigim en son versiyonda bu yok cünkü |
Evet dusunmeye baslasam iyi olabilir. Iste onun icinde yeni bir sektore atilmak gerekiyor. Tesekkur ederim. |
Sadece --all icin ekleme yaptim. Sen de geri kalanini kullanacaksan buna gore benzetebilirsin diye dusunuyorum. ./finder.sh --all hop.txt 'Error|permission|not\ found|refused|failed|can\ not\ open'
Uzerinde islem yaptigim ornek dosya.
Mail hata check icin, echo "Error : Line($counter) : Reached end of mail but could not find cron command" satirinin ustune, echo "Matched Words($match_counter) : ${matched_words[@]}" matched_words=( ) ekleyebilirsin. Bu durum da cikti,
seklinde olucak. |
son haliyle su sekilde ./script.sh --all /var/mail/tdst.txt 'Error|permission|not\ found|refused|failed|can\ not\ open' calistirdigimda sadece
Error ve failed hatalarini gösterdi. Oysaki txt icerisinde permission hatalarininda oldugundan eminim. Onu neden göstermedi? |
Inceledigin dosyayi ve scripti dropbox gibi bir yere koyabilir misin ? bir de sadece --all kullanacaksan --last opsiyonu silinebilir. Ben ilk anladigim oyle birsey istiyorsun sanmistim. Sonra hepsini duyunca all ekledim. |
simdilik fena görünmüyor.birkac ufak degisiklik yaptim.aranan her bir kelime icin parametre sayisini artirdim. |
GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.
Benim boyle. Ben bir sekilde kurtrarmisim. Sizde durum nedir simdi ? Calismiyor mu ? compat31 olayini ben de daha onceden okumustum. 3.2 icin ne yapmak lazim acaba ?
Bunu buldum ...
< Bu mesaj bu kişi tarafından değiştirildi garui -- 20 Eylül 2012; 19:00:21 >