Programowanie > Bash, skrypty powłoki

Wynik skryptu do txt

(1/1)

:
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

arecki:
Albo w samym skrypcie albo w wywołaniu.
W skrypcie w linijkach, które drukują przekieruj do $tresc (znaczek >>)
W wywłoaniu skrypt > plik

1709:
Odnosnie jeszcze pierwszego sposobu

--- Cytuj ---W skrypcie w linijkach, które drukują przekieruj do $tresc (znaczek >>)
--- Koniec cytatu ---

Jesli zapisze w ten sposob dane do pliku

--- Kod: ---
echo -e "\033[1m\tUżytkownik           Folder główny\033[0m" >> /sciezka/do/nazwa_pliku
--- Koniec kodu ---
to nic mi sie nie wyswietli, a zawartosc bedzie tylko w pliku
Ja w skryptach używam " tee -a /sciezka/do/nazwa_pliku "

--- Kod: ---
$  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
--- Koniec kodu ---
Dzieki temu wynik mam jednoczesnie wyswietlany i w pliku.


Jeszcze inny sposób to zapisywanie danych do zmiennej

--- Kod: ---
$ 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

--- Koniec kodu ---
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

--- Kod: ---
$ 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

--- Koniec kodu ---
Z zapisem bledow

--- Kod: ---
$ 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
--- Koniec kodu ---

arecki:
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.

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej