Sprawdzenie daty ostatniej modyfikaji pliku
date -r nazwa_pliku.txt
Fri 19 Apr 2019 08:41:11 AM CEST
Do wyświetlenia możemy użyć standardowego formatowania polecenia data
.
date -r nazwa_pliku.txt "+%F %s"
2019-04-19 1555656071
Działania arytmetyczne na datach
date_-d_"09/27/2019_08:53:52_AM_CEST_+2_days_+2_hours"_"+%F_%T"
date_-d_"Tue_22_Oct_2019_08:53:52_AM_CEST_+2_days_+2_hours"_"+%F_%T"
Argumenty wywołania skryptu
Identyfikator wywołania | Opis |
---|---|
|
Nazwa skryptu |
|
Kolejne argumenty przekazane do skryptu |
|
Liczba argumentów przekazanych do skryptu |
|
Wszystkie argumenty przekazane do skryptu |
Przykłady:
Wyświetlenie katalogu w którym znajduje się skrypt
dirname $(readlink -f $0)
Porównanie dwoch ciągów znaków
Tutaj sprawdzenie czy wynik polecenia type ls
zawiera słowo alias
if [[ $(type ls) == *"alias"* ]]; then
echo alias
fi
Wywołanie konkretnej funkcji w zależności od nazwy skryptu
case $(basename $0) in
bc2sd.mount)
mount_sd
;;
bc2sd.umount)
umount_sd
;;
bc2sd.include|bc2sd.inc)
backup_sd include
;;
bc2sd.exclude|bc2sd.exc)
backup2sd exclude
;;
bc2sd|backup2sd|backup2sd.sh)
run
;;
esac
Usunięcie rozszerzenia pliku
Polecenie find
wyszukuje wszystkich plików w katalogu ~/.password-store/otp/
a następnie
wyświetla znalezione pliki usuwając rozszerzenie .gpg
. Polecenie wyświetla wyłącznie
nazwę pliku.
find ~/.password-store/otp/ -name ".gpg" -exec basename {} .gpg \;
Wersja wyświetlająca pełną ścieżkę pliku
find ~/.password-store -name "*.gpg" -exec sh -c 'printf "%s\n" "${0%.*}"' {} \;
Ten sam efekt uzyskamy za pomocą komendy sed
, pytanie co łatwiej zapamiętać :D
find ~/.password-store -type f -iname "*.gpg" | sed 's/\.gpg$//1'
Rozszerzenie i nazwa pliku bez rozszerzenia
Nazwa pliku
file=~/bin/backup2sd.config
echo ${file%.*}
>>> /home/user/bin/backup2sd
inny przykład
file=backup2sd.config
echo ${file%.*}
>>> backup2sd
Rozszerzenie pliku
file=~/bin/backup2sd.config
echo ${file##*.}
>>> config
Wyszukanie plików rekursywnie
Wyszukanie plików z rozszerzeniem *.md
w bieżącej lokalizacji
find $PWD -type f -name "*.md"
Wersja bez użycia parametru -name
Zapis /*/
określa że w danej ścieżce bedą przetwarzane wszystkie podkatalogi, polecenie
wyświetla pełną ścieżkę pliku np. /home/user/.passord-store/email@example.pl
find ~/.password-store/*/*.gpg -type f
Data w formacie ISO
Wyświetlenie daty w formacie YYYY-MM-DD
date +%F
Warunkowe utworzenie katalogu
Polecenie mkdir
zostaje wykonane jeśli podany katalog nie istnieje
DATE=$(date +%y%m%d)
[ -d /mnt/nfs/sarg/$DATE ] || mkdir /mnt/nfs/sarg/$DATE
Sprawdzenie czy użytkownikiem wykonującym skrypt jest root
if [[ $EUID -ne 0 ]]; then
echo "Skrypt musi być uruchomiony z uprawnieniami użytkownika root" 1>&2
exit 1
fi
lub wersja sprawdzająca czy skrypt jest wykonany za pomocą sudo
if [ $(id -u) = 0 ]
then
if [ ! -z $SUDO_COMMAND ]
then
echo '--- ---'
echo Skrypt uruchomiony za pomocą komendy sudo
echo Uruchom skrypt jako użytkownik root
echo '--- ---'
exit 1
fi
else
echo '--- ---'
echo Uruchom skrypt jako użytkownik root!
echo '--- ---'
exit 1
fi
Wyszukiwanie kilku wyrażeń na raz
Komenda wyświetli wszystkie wiersze zawierające ls oraz ntfs
ls /bin | grep -e ls -e ntfs
Usunięcie starszych plików niż X dni
Uwaga polecenie usuwa pliki rekursywnie
find /home/user/tmp/* -mtime +14 -exec rm {} \;
Zapisanie wyniku polecenia do pliku oraz wyświetlenie na ekranie
Przykład użycia polecenia tee
watch -n 15 'skrypty/proc_temp.sh | tee -a cpu_temp.txt && date | tee -a cpu_temp.txt'
Wynik:
Sat Mar 26 17:05:49 UTC 2019 temp=38.5'C
Wersja zapisująca wynik dwóch poleceń do pliku w jednej linii.
watch -n 15 "echo -n '$(date): ' | tee -a cpu_temp.txt && skrypty/proc_temp.sh | tee -a cpu_temp.txt"
Wynik:
Sat Mar 26 17:10:58 UTC 2019: temp=39.0'C
Sprawdzanie zawartości pliku
Często w plikach systemowych jest zapisywana tylko wartość 0 lub 1 aby sprawdzić tą wartość można wykonać następujący test. W tym przykładzie sprawdzana jest zawartość pliku test.
if [ $(< test) == 0 ]
then
echo Wartosc 0
else
echo Inna wartosc
fi
Usunięcie zawartości pliku
Ten rodzaj komendy nie działa w ZSH, a raczej wymaga naciśnięcia Ctrl-d
> plik.txt
lub dłuższa wersja, działa również w ZSH
:> plik.txt
Za pomocą komendy >
lub :>
możemy nie tylko wyczyścić zawartość pliku, ale również
utworzymy nowy plik.
Wyszukanie ostatnio edytowanych plików
find $HOME/git -type f -mtime -12 -mtime +3
Listy - wyświetlanie elementów w osobnych liniach
Za pomocą komendy printf
możemy formatować wyświetlany tekst, tutaj dodajemy
znak końca linii \n
.
printf '%s\n' "${LISTA[@]}"
LISTA = (
$HOME/.aliases
$HOME/.config/alacritty/alacritty.yml
$HOME/.bashrc
$HOME/.ssh/config
)
ZMIENNA=$(printf '%s\n' "${LISTA[@]}"|fzf)
if [ $ZMIENNA ]; then
vim $ZMIENNA
fi
Date: 2020-10-24T13:20:08+02:00 |