Bash - kontynuacja Bash - kontynuacja 1/36
Bash - kontynuacja 2/36 Łańcuchy znaków Łączenie napisów a=napis1 b=napis2 c=${a}${b} echo ${c} napis1napis2 Polecenia grep i tr Przykład: $ tr abc xyz $ grep abc plik.txt
Bash - kontynuacja 3/36 Operatory dopasowywania wzorców Operator ${zm#wz} ${zm##wz} ${zm%wz} ${zm%%wz} Działanie Usuwa najkrótszą część zm pasującą do wz idąc od lewej Usuwa najdłuższą część zm pasującą do wz idąc od lewej Usuwa najkrótszą część zm pasującą do wz idąc od prawej Usuwa najdłuższą część zm pasującą do wz idąc od prawej
Bash - kontynuacja 4/36 Operatory dopasowywania wzorców - przykład f=/home/cam/book/long.file.name echo ${f} # /home/cam/book/long.file.name echo ${f##/*/} # long.file.name echo ${f#/*/} # cam/book/long.file.name echo ${f%.*} # /home/cam/book/long.file echo ${f%%.*} # /home/cam/book/long
Bash - kontynuacja 5/36 Operatory zastąpienia Operator ${zm:-sl} ${zm:=sl} ${zm:?sl} ${zm:+sl} ${zm:p:d} Działanie Zwraca wartość sl, jeżeli zm jest niezdefiniowane Przypisuje zm wartość sl, jeżeli zm jest niezdefiniowane Przerywa działanie skryptu i wypisuje sl, jeżeli zm jest niezdefiniowane Jeżeli zm istnieje, zwracana jest jej wartość, w przeciwnym razie zwracana jest wartość null Zwraca podciąg znaków zmiennej (zaczynający się od p i mający d znaków)
Bash - kontynuacja 6/36 Przykłady wykorzystania operatorów zastąpienia Przykład 1 filename=${1:?"brak pliku"} howmany=${2:-10} sort -nr $filename head -$howmany Przykład 2 filename=${1:?"brak pliku"} howmany=${2} sort -nr $filename head -${howmany:=10}
Bash - kontynuacja 7/36 Pętla for for nazwa [in lista] do instrukcje używające $nazwa... Prosta pętla for for i in 1 2 3 do echo $i
Bash - kontynuacja 8/36 Pętla for pozwala na podstawianie nazw for nazwa in plik[1-5] do echo $nazwa Efekt uruchomienia powyższej instrukcji plik1 plik2 plik3 plik4 plik5
Bash - kontynuacja 9/36 Pętla for pozwala na podstawianie nazw $ ls plik1 plik2 plik3 for nazwa in * do echo $nazwa Efekt uruchomienia powyższej instrukcji plik1 plik2 plik3
Bash - kontynuacja 10/36 Przykład pętli for (kolejny) # Wyszukanie wszystkich plików o rozszerzeniu txt, # dla których ostatnia linia zawiera # napis "Autor: Jan Kowalski" for f in $(find. -name "*.txt" -type f); do if [ "$(tail -1 ${f})" == "Autor: Jan Kowalski" ]; then echo "Plik ${f} posiada już podpis" fi Pętla for w stylu C for ((inicjalizacja; warunek; post_modyfikacja)); do instrukcje
Bash - kontynuacja 11/36 Kilka przykładów pętli for for i in 1 2 3 4 5 6 7 8 9 10; do echo -n "$i " echo for i in $(seq 1 10); do echo -n "$i " echo for ((i = 1; i <= 10; i++)); do echo -n "$i " echo
Bash - kontynuacja 12/36 Instrukcja case case wyrazenie in wzorzec1 ) instrukcje ;; wzorzec2 ) instrukcje ;;... esac
Instrukcja case przykład for filename in "$@"; do pnmfile=${filename%.*}.ppm case $filename in *.jpg ) exit 0 ;; *.tga ) tgatoppm $filename > $pnmfile ;; *.xpm ) xpmtoppm $filename > $pnmfile ;; *.pcx ) pcxtoppm $filename > $pnmfile ;; *.tif ) tifftopnm $filename > $pnmfile ;; *.gif ) giftopnm $filename > $ppmfile ;; * ) echo "procfile: $filename ma nieznany format" exit 1 ;; esac outfile=${pnmfile%.ppm}.new.jpg pnmtojpeg $pnmfile > $outfile rm $ppmfile Bash - kontynuacja 13/36
Bash - kontynuacja 14/36 Pętla while while warunek do wyrazenia...
Bash - kontynuacja 15/36 Pętla while przykład path=$path: while [ $path ]; do ls -ld ${path%%:*} path=${path#*:} zm="" while [ "${zm}"!= koniec ]; do echo -n "Wpisz coś (słowo koniec aby zakończyć): " read zm echo "Wpisałeś ${zm} "
Bash - kontynuacja 16/36 Pętla until until polecenie; do wyrazenia...
Bash - kontynuacja 17/36 Pętla until przykład until cp $1 $2; do echo Próba kopiowanie nia powiodła się. Czekam... sleep 5 To samo za pomocą pętli while while! cp $1 $2; do echo Próba kopiowanie nia powiodła się. Czekam... sleep 5
Bash - kontynuacja 18/36 Instrukcje break i continue Przykład wykorzystania while true; do read a if [ "$a" = "koniec" ]; then break elif [ "$a" = "dalej" ]; then continue fi echo "Wpisałeś $a "
Bash - kontynuacja 19/36 Deklarowanie funkcji function nazwa_funkcji { instrukcje } lub nazwa_funkcji() { instrukcje }
Bash - kontynuacja 20/36 Wywoływanie funkcji i argumenty Przykład pokazujący deklarację i wywołanie funkcji wypisz_argumenty () { echo -n "Jest $# argumentów:" for i in "$@"; do echo -n " $i " echo } wypisz_argumenty wypisz_argumenty "$@" wypisz_argumenty raz dwa trzy cztery pięć
Bash - kontynuacja 21/36 Zasięg deklaracji f # błąd - funkcja nie jest zadeklarowana if [ "$USER" = bashtest ]; then f () { echo "Pierwsza wersja f" } else f () { echo "Druga wersja f" } fi f # funkcja f może być zadeklarowana na dwa sposoby, # zależnie od tego jaki użytkownik uruchomił skrypt
Bash - kontynuacja 22/36 Status wyjścia pytanie_tak_nie () { while true; do if [ $# -ge 1 ]; then echo -n "$1 (tak/nie)? " fi read odp if [ "$odp" = tak ]; then return 0 elif [ "$odp" = nie ]; then return 1 fi } if pytanie_tak_nie "Czy chcesz usłyszeć pytanie"; then until pytanie_tak_nie "Czy chcesz zakończyć ten skrypt"; do : # : jest wbudowaną pustą instrukcją fi
Bash - kontynuacja 23/36 Podshelle Tworzenie podshella ( instrukcje ) $ a=2; ( echo $a; a=3; echo $a ); echo $a 2 3 2 $ ( cd /tmp ); echo $PWD /home/sp1 $
Bash - kontynuacja 24/36 Podshelle ( if [! -d "$1" ]; then echo "$1 nie jest katalogiem exit 1 # wychodzi tylko z podshella fi cd "$1" for i in *.txt; do if [ -f "$i" ]; then echo "==== Do zrobienia w pliku $i ====" grep TODO "$i" fi ) less
Bash - kontynuacja 25/36 Grupowanie instrukcji $ a=2; { echo $a; a=3; echo $a; }; echo $a; 2 3 3
Bash - kontynuacja 26/36 Referencje Polecenie eval argumenty Przykład $ a=wartość $ echo $a wartość $ b=a $ echo $b a $ eval echo \$$b wartość $
Bash - kontynuacja 27/36 Referencje i funkcje dopisz_y () { for z in "$@"; do eval $z=\$\{$z\}y } a=dom b=kąt dopisz_y a b echo "a=$a" # wypisze a=domy echo "b=$b" # wypisze b=kąty
Bash - kontynuacja 28/36 Tablice tworzenie tab[0]=napis1 tab[2]=napis2 tab[1]=napis3 tab=([0]=napis1, [2]=napis2, [1]=napis3) tab=(napis1, napis2, napis3)
Bash - kontynuacja 29/36 Tablice dostęp Dostęp do pojedynczego elementu ${tab[i]} Przykład echo ${tab[1]} napis3 Rozwinięcie tablicy echo ${tab[@]} napis1 napis3 napis2
Bash - kontynuacja 30/36 Zarządzanie procesami Polecenia do zarządzania procesami Polecenie Opis ps wyświetlanie procesów kill/killall kończenie procesów top menadżer zadań fg/bg/jobs/^z operowanie na zadaniach w shellu
Bash - kontynuacja 31/36 Zarządzanie procesami przykłady $ ps ax... 5613? Ss 0:00 xterm 5627 pts/2 S 0:03 bash 5691 pts/0 S+ 0:00 mc 5932 pts/2 R+ 0:00 ps ax $ sleep 999 & [1] 5994 $ while true; do : ; & [2] 5995 $ jobs [1]- Running sleep 999 & [2]+ Running while true; do :; &
Bash - kontynuacja 32/36 Zarządzanie procesami przykłady $ fg 2 while true; do :; Naciskamy klawisze Ctrl-Z: [2]+ Stopped while true; do :; $ bg 2 [2]+ while true; do :; &
Bash - kontynuacja 33/36 Generowanie liczb losowych Do generowania liczb losowych służy funkcja $RANDOM. Generuje ona liczbę całkowitą pseudolosową z przedziału od 0 do 32767. Przykład: $ echo $RANDOM 25776
Bash - kontynuacja 34/36 Typowanie zmiennych Działanie instrukcji declare Opcja Działanie -a zmienna traktowana jako tablica -i zmienna traktowana jako liczba całkowita -r zmienna tylko do odczytu -x zmienna do eksportu
Bash - kontynuacja 35/36 Przykłady działania instrukcji declare $ val1=12 val2=5 $ result1=val*val2 $ echo $result1 val1*val2 $ declare -i val3=12 val4=5 $ declare -i result2 $ result2=val3*val4 $ echo $result2 60
Bash - kontynuacja 36/36 W wykładzie wykorzystano materiały Środowisko programisty, http://mediawiki.ilab.pl/index.php/%c5%9arodowisko programisty C. Newham, B. Rosenblatt, bash. Wprowadzenie, Helion, 2006