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

$0

Nazwa skryptu

$1, $2, …​

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