Nowe posty

Autor Wątek: Wynik skryptu do txt  (Przeczytany 935 razy)

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 38
    • Zobacz profil
Wynik skryptu do txt
« dnia: 2019-11-08, 10:28:14 »
Witam,
mam taki skrypt:

#!/bin/sh
odbiorca="admin"
temat="Rozmiar kont użykowników na oddk.org"
tresc="/home/Pliki/mail_space.log"
cd /home/
clear
echo
echo  -e "\033[1m\tUżytkownik           Folder główny\033[0m"
echo  -e "\033[1m\t------------------------------------\033[0m"
for user in `ls`
  do
        mdir="/home/$user/"
        if test -d $mdir; then
                echo -ne "\t"
                echo -ne "$user \t "|awk '{printf "%30-s", $1}'
               du -sh $mdir |awk '{print $1}'
        fi
 done
echo
echo Rozmiar partycji /home/:
df -Th /home/ |awk '{print $5}' | tail -1

Jak zrobić, aby wynik tego skryptu zapisać do "mail_space.log" aby moża było go przesłać mailem jako monit. Np.

mail -s $temat $odbiorca < /home/Pliki/mail_space.log

beaker

  • Gość
Odp: Wynik skryptu do txt
« Odpowiedź #1 dnia: 2019-11-08, 10:58:16 »
Albo w samym skrypcie albo w wywołaniu.
W skrypcie w linijkach, które drukują przekieruj do $tresc (znaczek >>)
W wywłoaniu skrypt > plik

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2757
  • 1709
    • Zobacz profil
Odp: Wynik skryptu do txt
« Odpowiedź #2 dnia: 2019-11-08, 12:01:07 »
Odnosnie jeszcze pierwszego sposobu
Cytuj
W skrypcie w linijkach, które drukują przekieruj do $tresc (znaczek >>)

Jesli zapisze w ten sposob dane do pliku
 echo -e "\033[1m\tUżytkownik           Folder główny\033[0m" >> /sciezka/do/nazwa_pliku
to nic mi sie nie wyswietli, a zawartosc bedzie tylko w pliku
Ja w skryptach używam " tee -a /sciezka/do/nazwa_pliku "
$  echo -e "\033[1m\tUżytkownik           Folder główny\033[0m" | tee -a plik122
Użytkownik           Folder główny

$ cat plik122
Użytkownik           Folder główny
Dzieki temu wynik mam jednoczesnie wyswietlany i w pliku.


Jeszcze inny sposób to zapisywanie danych do zmiennej
$ A=$(echo -e "\033[1m\tUżytkownik           Folder główny\033[0m") ; B="4kb" ; echo -e "$A \n$B" 
Użytkownik           Folder główny
4kb
i potem na końcu zapisać do pliku np. przy pomocy "tee -a"
Ale w tym przypadku to chyba bez sensu pomysl :D bo bardziej skomplikowany.

O wiele lepszym pomyslem wydaje sie "skrypt > plik" ( czyli drugi sposob uzytkownika arecki )
- Mniej kodu musisz pisac
Dodalbym zapisywanie danych do pliku w skrypcie tylko wtedy gdy istnieje potrzeba selekcjonowania danych ktore chce zapisac do pliku.
Dodatkowo w niektorych przypadkach dodalbym zapisywanie bledow
https://stackoverflow.com/questions/7526971/how-to-redirect-both-stdout-and-stderr-to-a-file

Gdy wykonujemy skrypt recznie to i tak widzimy bledy, ale w logach bez odpowiedniego przekierowania juz nie.
Dzieki temu wiedzialbym np. skrypt zle sie wykonal bo nagle komendy zabraklo w systemie,
lub cos innego sie stalo np. brak uprawnien.
Taki przyklad:
Bez zapisywania bledow
$ bash ./t1 > file ; cat file
du: cannot read directory ‘/home/test/’: Permission denied

Użytkownik           Folder główny
------------------------------------
x                         20G
test                          4.0K

Rozmiar partycji /home/:
19G
Z zapisem bledow
$ bash ./t1 > file 2>&1  ; cat file

Użytkownik           Folder główny
------------------------------------
x                          20G
test                          du: cannot read directory ‘/home/test/’: Permission denied
4.0K

Rozmiar partycji /home/:
19G
« Ostatnia zmiana: 2019-11-08, 12:52:34 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

beaker

  • Gość
Odp: Wynik skryptu do txt
« Odpowiedź #3 dnia: 2019-11-08, 12:41:55 »
Autor nie określił, że wyjście ma być również na ekranie, dlatego zamiast tee, zwyczajnie przekierowałem wynik do pliku.
Kontrolnie można też na samym końcu użyć cat do pokazania zawartości pliku.