Nowe posty

Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości -

Strony: [1] 2 3 4
1
Języki skryptowe / [Perl] suma liczb (wyciągniętych z pliku)
« dnia: 2014-04-20, 19:10:06 »
Dzięki Wielkie :) Z 3 razy miałem przygotowanego dużego posta, ale za każdym razem wracałem do kodu, aż się sam z nim uporałem. Miałem błąd z
my $sum = 0;
który siedział w pętli i analogicznie od nowa była przypisywana ta zmienna dlatego potem cały czas otrzymywałem:
a) w pętli wszystkie liczby po kolei
b) poza pętlą ostatnią liczbę.
Tylko jeszcze nie rozumiem do końca:
strict;
przy tej bibliotece musimy deklarować zmienne (tworzymy zmienne lokalne) i ja myślałem, że wtedy nasze zmienne lokalne będą działały przez cały program no i tutaj się myliłem. Ponieważ jak chciałem wydrukować tekst za pętlą to otrzymywałem, że $sum nie istnieje. Poszukałem w google i znalazłem our i na samym początku mam:
our ($sum);
i teraz ładnie skrypt działa, ale dlaczego? Dlaczego zmienna lokalna działa tylko w danym bloku? Czyli w tym przypadku tylko w pętli while? Rozumiem, że to ma nam pomóc, aby nie nakładać na siebie zmiennych (większy program X zmiennych i żeby nie mieć tych samym z innymi wartościami). Ale dlaczego ona zamyka się w danym miejscu? A our informuje, że zmienna X, Y, Z mają działać po całości tak? Cały kod wygląda tak:
#!/usr/bin/env perl
use strict;
use warnings;
open(DATA, "our (@aa, @nums, $sum);
while () {
chomp;
my @aa = split;
my @nums = $aa[-1];
foreach (@nums) {
        $sum += $_;
}
}
print $sum . "\\n";
Jeszcze raz dzięki za pomoc :)

2
Języki skryptowe / [Perl] suma liczb (wyciągniętych z pliku)
« dnia: 2014-04-19, 22:08:33 »
Mam pewien problem i nie mogę sobie z nim poradzić. A dokładnie mam plik, a w nim liczby (kilka kolumn, ale tylko we 2 są liczby) i normalnie wyciąga liczby z kolumny numer 1 i otrzymuje je w takim formacie (print) :
123123129312312312312312312
gdy dam
print $zmienna . "\\n";
otrzymam już normalny wynik
123
123
123
123
321
123
ale gdy chce to dodać to cały czas wypluwa to samo (czyli wynik taki jak wyżej), a ich nie dodaje.
Tak wygląda kod na wyciąganie liczb
#!/usr/bin/env perl
use strict;
use warnings;
open my $file, '<', '/home/info.txt';
while( <$file> ) {
  chomp;
  my @fields = split;
  print $fields[-1] . "\\n";
}
A tutaj kod jak próbowałem to dodać:
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util 'sum';
open my $file, '<', '/home/info.txt';
while( <$file> ) {
  chomp;
  my @fields = split;
  my @acc1 = $fields[-1];
  my $sum;
  map { $sum += $_ } @acc1;
  print $sum . "\\n";
}
wynik
123
123
321
itd.
Drugi kod:
#!/usr/bin/env perl
use strict;
use warnings;
open my $file, '<', '/home/info.txt';
while( <$file> ) {
  chomp;
  my @fields = split;
  my $acc = 0;
  my @acc1 = $fields[-1];
  foreach (@acc1) {
       $acc += $_;
 }
 print $acc . "\\n";
}
wynik taki sam jak wyżej.
Jakaś podpowiedź jak to dodać? W AWK składnia podobna i wszystko ładnie podliczyło, a perl coś nie może tego dodać. Mi się wydaje, że on to widzi jaki jeden ciąg (to co wyrzuca print bez \\n) i dlatego tego nie może dodać. Próbowałem rozbić ciąg tych liczb split, ale tutaj również to samo. Jedyne co uzyskałem to, że liczby były pojedyncze:
1
2
3
4
5
1
2
3

3
Skompilowałem sobie php jako fpm i teraz po każdej zmianie w konfiguracji nie chciałbym restartować php (aby strony działały) i tutaj przychodzi z pomocą reload. W /etc/init.d/ jest plik skeleton, zmieniłem w nim ścieżki, uruchomiłem (ok działa, ale nie tworzy .PID). Gdy przeładowałem to otrzymałem poprawny komunikat, ale tak naprawdę nic się nie zmieniło. Więc komendą
apt-get source
pobrałem php5-fpm i wyciągnąłem z niego plik .init, ale nadal to samo. Dopisałem więc do funkcji start parametr -m (aby utworzyło .PID) i ok utworzyło. Ale jak daję reload to otrzymuje komunikat, że proces o takim numerze nie istnieje. I to prawdę bo takiego nie ma (jest to numer daemona, ale on nigdzie nie istnieje). Uruchomiony jest tylko php o swoim numerze. A gdy podam numer PHP to reload go zabija (ale tylko rodzica, dziecko nadal działa, ale w starej konfiguracji). Próbowałem nawet ręcznie (start działa, ale reload to samo co wyżej zabija rodzica i koniec). Jakiś pomysł? Próbowałem z parametrem -b i bez. Cały czas to samo. Najdziwniejsze jest to, że nawet plik od twórców skeleton nie działa w pełni.

4
Bash, skrypty powłoki / [BASH] MySQL problem (skrypt)
« dnia: 2014-01-09, 16:58:29 »
Mam sobie skrypt, który w pętli while wyciąga dane z bazy mysql (rekordy) i ok wszystko działa, ale chce aby po wyświetleniu rekordu został on usunięty z bazy danych.
Kod wygląda tak:
#!/bin/bash
mysql -u root --password=password -h localhost test --skip-column-names -e 'select commain from test limit 1;' | while read -r data
do
echo `$data`
mysql -u root --password=password -h localhost test --skip-column-names -e 'DELETE FROM test WHERE commain'
done
i teraz nie wiem jak poprawnie napisać usuwanie rekordu. Próbowałem coś takiego:
mysql -u root --password=password -h localhost test --skip-column-names -e 'DELETE FROM test WHERE commain = $data'
ale cały czas error:
ERROR 1054 (42S22) at line 1: Unknown column 'ls' in 'where clause'
Nawet jak dam
ls
zamiast
$data
jakaś podpowiedź?

Edit:
Udało mi się:
"DELETE FROM test WHERE commain='$data'"

5
Języki skryptowe / [Python] Problem z if-em (error syntax)
« dnia: 2013-12-21, 21:26:59 »
Mam prosty skrypt w pythonie:
#!/usr/bin/env python
import os
import sys
#os.system("sh /root/xx.sh Wyraz1 Wyraz2")
f = os.popen("sh /root/xx.sh Wyraz1 Wyraz2")
now = f.read()
#print now,
if now == notgood:
        print "Error BASH!"
else:
        print "ok"
Skrypt SH wygląda tak:
#!/usr/bin/bash
if [ $1 = "Damian" ]; then
        echo "notgood"
        exit 0
        else
        echo "good"
fi
I teraz to ma działać na takiej zasadzie:
jeśli skrypt .sh wyrzuci error (notgood) to skrypt python powinien wypisać (error bash), ale tak się nie dzieje. Otrzymuje błąd:
Traceback (most recent call last):
  File "xx.py", line 8, in
    if now == notgood:
NameError: name 'notgood' is not defined
szukałem w google i nie mogłem znaleźć rozwiązania na swój problem. Znalazłem jedynie coś na temat funkcji
raw_input
ale z tego co widzę jest to funkcja, która "czyta" naszą odpowiedź (coś jak read w bashu). A tutaj nic takiego nie mogę użyć bo odpowiedź dostaje ze skryptu SH funkcja os. Dzięki za jakąś odpowiedź.

6
Bash, skrypty powłoki / Plik .sh uruchomiony poprzez daemon
« dnia: 2013-12-16, 22:58:41 »
A w takim wypadku jest możliwość napisania tego inaczej czy jedyne wyjście to pętla?

7
Bash, skrypty powłoki / Plik .sh uruchomiony poprzez daemon
« dnia: 2013-12-16, 16:10:52 »
Dzięki Ci za wyjaśnienie :) Czyli sam daemon nic nie robi. Działa na podobnej zasadzie jak screen/nohup tak? Uruchamia nasz plik i trzyma go przy życiu (a skrypt wykonuje dane polecenia)?

Editos: Czyli 'serwerem' możemy nazwać 2 skrypt (polecenie które zostało wrzucone w pętle while)? Ponieważ po uruchomieniu działa ciągle tak?

8
Bash, skrypty powłoki / Plik .sh uruchomiony poprzez daemon
« dnia: 2013-12-15, 20:16:38 »
Chce stworzyć skrypt i uruchomić go poprzez program daemon (aby jego zawartość cały czas było odtwarzana). I tutaj mam problem mam taki skrypt (testowy):
#!/bin/bash
echo "Hello world" > /home/xx.log
odpalam go daemonem:
daemon -u root.root -n example -O /home/xx.log -E /home/xx.err --pidfile /home/xx.pid /root/xx.sh
i ok skrypt się uruchamia, widać go w procesach, nie znika, ale problem jest taki, że skrypt wykona się 5 razy i koniec. Cały czas siedzi w procesach, ale już się nie wykonuje. Próbowałem tam dopisać sleep, ale to też nie skutkuje. I teraz pytanie da się to zrobić, aby skrypt cały czas był wykonywany?

Editos: OK, udało mi się wbiłem to w pętle while
while true ; do 
{funkcja}
sleep 5
done

9
Języki skryptowe / [Perl] if/else nie działa
« dnia: 2013-05-01, 23:06:37 »
Witam, mam pewien problem, a dokładnie w 1 miejscu (kawałek dalej jest podobny kod i działa) nie działa instrukcja if/else. Tak wygląda kod:

sub List {
        if( open( IN, "/var/www/text.xx" ) ){
                while( ){
                my($linia) = $_;
                        chomp;
                        print "x$linia";
                        if ($linia == "#!/usr") {
                        print "To jest /usr";
                        } elsif ($linia == "#!/var")  {
                        print "To jest /var";
                        } else {
                        print "Ani to ani to";
                        }

                }
                close( IN );
        }

}
Nie ważne czy powinno się wykonać if/elsif/else cały czas wyświetla:
To jest /usr
więc tylko i wyłącznie działa if, a dalej już nie chce iść :(
Jest to plugin do panelu ISPmanager. Kawałem dalej mam taki kod:
sub New {
        $elid = $Q->param( "elid" );
        $item = $Q->param( "item" );
                if ($item == "1") {
        if( open( ADD, ">/var/www/text.xx" ) ){
                print ADD "#!/usr";
                close( ADD );
                print "";
        } else {
                print "Item hasn`t been added";
        }
        } elsif ($item == "2") {
                if( open( ADD, ">/var/www/text.xx" ) ){
                print ADD "#!/var";
                close( ADD );
                print "";
        } else {
                print "Item hasn`t been added";
        }
        } else {
                print "UPS! Nic nie wiem. ";

        }

}
który działa prawidłowo natomiast ten pierwszy już nie chce. Z góry dziękuje za pomoc bo już próbowałem na kilka sposobów i zawsze to samo.

Edit:
Heh... Człowiek tak napiszę na forum i nagle coś do głowy wpadnie :)
==
zamieniłem na
eq
i działa. W perlu pierwszy raz piszę i mam przyzwyczajenia z BASH'a. Teraz już będę wiedział że
 == dla liczb
a
eq dla tekstu

10
Dzięki Wielkie :) Użyłem pgrep i działa idealnie.

11
Znaczy to działa tak
./shoutcast.sh start
pierwsze co robi to sprawdza czy serwer jest uruchomiony;
jeśli jest otrzymujemy
Serwer Shoutcast jest juz uruchomiony!
jeśli nie to idzie dalej i odpala go
su $USER -c $SCHOME/$SCBIN $SCHOME/$SCCONFIG 2&>>$SCHOME/$SCLOGS &
potem jest sprawdzenie czy serwer został uruchomiony bez problemu
ps --user $USER | grep $SCBIN
jeśli tak to powinno robić then
then
         ps --user $USER | grep $SCBIN | cut -c 1-9 | tr -d [:alpha:] > $SCHOME/$SCPID
         echo -e "\\E[32m[OK]\\033[0m Serwer Shoutcast zostal uruchomiony!"
a jeśli nie to otrzymujemy komunikat
Serwer nie mogl zostac uruchomiony! Sprawdz plik $SCLOGS!
czyli jest błąd w konfiguracji czy gdzieś indziej. Zmieniłem na tak
function start {
if [[ `ps --user $USER | grep $SCBIN` ]]; then
echo -e "\\E[31m[ERROR]\\033[0m Serwer Shoutcast jest juz uruchomiony!"
else
su $USER -c nohup $SCHOME/$SCBIN  $SCHOME/$SCCONFIG 2&>>$SCHOME/$SCLOGS &
                if [[ `ps --user $USER | grep $SCBIN` ]]; then
                ps --user $USER | grep $SCBIN | cut -c 1-9 | tr -d [:alpha:] > $SCHOME/$SCPID
                echo -e "\\E[32m[OK]\\033[0m Serwer Shoutcast zostal uruchomiony!"
                else
                echo -e "\\E[31m[ERROR]\\033[0m Serwer Shoutcast nie mogl zostal uruchomiony! Sprawdz plik $SCLOGS!"
                fi
fi
}
i o dziwo działało. I po chwili zmieniłem pozycję jednej zmiennej (z połowy kodu na początek) i znowu nic. Przywróciłem tą zmienną na jej stare miejsce i znowu nic.

Właśnie uruchomiłem skrypt i znowu zadziałało, ale tylko jeden raz!. Zatrzymałem serwer i chciałem powtórzyć start i już znowu od razu error, ale serwer się uruchamia. W ogóle o co chodzi? Raz działa, a raz nie.

snajper_8383 ta komenda działa prawidłowo bo mam ją też w funkcji status która działa idealnie.

12
Witam, mam pewien problem, a dokładnie piszę sobie skrypt i chce zrobić coś takiego
if [[ `komenda` ]]
then
echo "Cos nie tak"
else
echo "Czekaj sprawdze cos jeszcze"
   if [[ `komenda2` ]]
   then
   {komenda3}
   echo "Tak działa :)"
   else
   echo "Jednak nie"
   fi
fi
i zawsze pokazuje drugie else, a drugiego then nawet nie wykonuje. Gdzie może być problem?
Tak to wygląda
function start {

if [[ `ps --user $USER | grep $SCBIN` ]]
then
echo -e "\\E[31m[ERROR]\\033[0m Serwer Shoutcast jest juz uruchomiony!"
else
su $USER -c $SCHOME/$SCBIN $SCHOME/$SCCONFIG 2&>>$SCHOME/$SCLOGS &
        if [[ `ps --user $USER | grep $SCBIN` ]]
        then
         ps --user $USER | grep $SCBIN | cut -c 1-9 | tr -d [:alpha:] > $SCHOME/$SCPID
         echo -e "\\E[32m[OK]\\033[0m Serwer Shoutcast zostal uruchomiony!"
        else
         echo -e "\\E[31m[ERROR]\\033[0m Serwer nie mogl zostac uruchomiony! Sprawdz plik $SCLOGS!"
        fi
fi
}
Czyli nie wykonuje tego
then
         ps --user $USER | grep $SCBIN | cut -c 1-9 | tr -d [:alpha:] > $SCHOME/$SCPID
         echo -e "\\E[32m[OK]\\033[0m Serwer Shoutcast zostal uruchomiony!"
od razu przechodzi do else i pokazuje błąd. A tak naprawdę serwer uruchomił się poprawnie.

13
Bash, skrypty powłoki / Sprawdzanie wersji pliku (curl'em?)
« dnia: 2012-06-29, 23:03:54 »
Cytat: jk33
Jesteś świadomy że istnieje
http://pl.wordpress.org/latest-pl_PL.zip
który przekierowuje na właściwą wersję?
Nie i dziękuje bardzo za ten link, ale to tylko przykład. Do tego dochodzą inne skrypty typu MyBB, phpBB3, joomla, drupal, a dla wszystkich chyba coś takiego nie istnieje? A co do pythona to nie znam w bashu tego nie da się zrobić?

14
Bash, skrypty powłoki / Sprawdzanie wersji pliku (curl'em?)
« dnia: 2012-06-29, 16:43:53 »
Witam, mam pewien problem chce zrobić skrypt który ściąga dany plik dajmy na to WordPress i na dzień dzisiejszy jest to wersja 3.4.1 i link wygląda tak;
http://pl.wordpress.org/wordpress-3.4.1-pl_PL.zip
ale np. jutro może wyjść wersja 3.5.0 i muszę ręcznie to zmieniać w pliku .sh, a chciałbym otrzymać coś takiego;
{sprawdzenie wersji pliku http://pl.wordpress.org/wordpress-*.*.*-pl_PL.zip}
skrypt otrzymał wersję 3.5.0 więc
link=http://pl.wordpress.org/wordpress-3.5.0-pl_PL.zip
wget $link
I teraz nie wiem jak sprawdzić tą wersje próbowałem zmienić trochę ten kod
#!/bin/bash
curl http://www.wp.pl/ | grep -o -e 'http://www.wp.pl/.\\{1,50\\}\\jpg' > spis_plikow.txt
ale to nic nie dało. No i czy można to zrobić curlem czy może czegoś innego użyć?
Z góry dziękuje za jakąkolwiek pomoc.

15
Bash, skrypty powłoki / Bash kodowanie hasła
« dnia: 2012-04-09, 20:51:45 »
Witam, mam pytanie ponieważ pisze sobie mały skrypt i trzeba tam wpisać hasło i standardowo widać wpisywane hasło
echo "Podaj hasło"
read haslo
[...]
i teraz pytanie czy jest możliwość, aby hasło było nie widoczne tak jak to jest gdy logujemy się na serwer (np. VPS), albo po wpisaniu komendy
passwd
szukałem ale znaleźć nie mogłem. Z góry dziękuje za pomoc.

Strony: [1] 2 3 4