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
Idź do wersji pełnej