powrót

Ćwiczenia 4

;

Przykład:

$ cd; ls

&&

Przykład:

grep XX plik && more plik

||

Przykład:

grep XX plik || echo "XX nie znaleziono"

( )

Przykład:

$ (date; who; pwd) > plik_log

echo

$ echo <napis>

Przełączniki:

-n
-e

Przykład:

$ echo -e "napis\n"

'

Przykład:

$ echo 'Książka "Systemy Operacyjne"'

"

Przykład:

$ echo "Wartością \$HOME jest $HOME"

\

Przykład:

$ echo "Książka \"Systemy Operacyjne\""

`

Przykład:

$ echo "Masz `ls | wc -l` pliki w `pwd`"
$ grep XX `cat lista`

Zmienne

$

Przykład:

$ ZM=2
$ echo $ZM

HOME

Przykład:

$ echo $HOME

PATH

Przykład:

$ echo $PATH

PS1 PS2

Przykład:

$ echo $PS1

env

Przykład:

$ env | less

set

Przykład:

$ set | less

unset

Przykład:

$ unset zm
$ set | less

export

Przełączniki:

-n

Przykłady:

$ zm=1
$ bash
$ echo $zm
$ exit
$ export zm
$ bash
$ echo $zm
$ exit
$ export -n zm

#

Przykłady:

Utwórz plik plik.sh
#!/bin/bash
# komentarz
echo "Cześć"
$ ./plik.sh

Zmienne specjalne

$#

$@

$0-9

$?

$$

Zmienne tablicowe

Przykłady:

t=(1 2 3)
echo $t
echo $t[1]
echo ${t[1]}
echo ${t[*]}
echo ${#t[@]}

Przydatne programy

test

-f <plik>
-d <plik>
-r <plik>
-w <plik>
-x <plik>
-e <plik>
-z <łańcuch>
-n <łańcuch>
<liczba> -eq <liczba> # =
<liczba> -ne <liczba> # !=
<liczba> -lt <liczba> # <
<liczba> -le <liczba> # <=
<liczba> -gt <liczba> # >
<liczba> -ge <liczba> # >=
! <wyrażenie>
<wyrażenie> -a <wyrażenie>
<wyrażenie> -o <wyrażenie>

Przykłady:

$ test -d <katalog> && echo 'katalog'

expr

Przykłady:

$ expr 2 + 2
$ expr 2 + 2 * 2 # błąd!

seq

Przykłady:

$ seq 1 10

eval

Przykłady:

$ x=zm
$ y=3
$ zm3=brawo
$ echo \$$x$y
$ eval "echo \$$x$y"

Instrukcje sterujące

if

if <warunek1>
then
	<instrukcja 1>
elif <warunek2>
then
	<instrukcja 2>
else
	<instrukcja 3>
fi

Inna notacja

if `test -f plik`
	echo "Jest"
fi

if [ -f plik ]
	echo "Jest"
fi

echo `expr 2 + 2`

echo $((2 + 2))

echo $[2 + 2]

case

case <zm> in
	"wzorzec 1") <instrukcja 1> ;;
	"wzorzec 2") <instrukcja 2> ;;
	*) <instrukcja domyślna> ;;
esac

while

while <warunek>
do
	<instrukcje>
done

for

for <zmienna> in <lista>
do
	<instrukcje>
done

Wejście/wyjście dla skryptów

read

Przełączniki:

-p ">"
-a #tablica
-e #do zmiennej REPLY

Przykłady:

read a
read -p ">" b
read -a T
read -e

shift

Przykłady:

#!/bin/bash
echo $@
shift
echo $@

exit

Przykłady:

exit 7

$ echo $?

Zadania:

  1. Napisz skrypt, który wypisze liczbę argumentów.
  2. Napisz skrypt, który policzy kwadrat sumy kolejnych n liczb, gdzie n podane jako argument.
  3. Napisz skrypt, który pomnoży wszystkie podane argumenty.
  4. Napisz skrypt, który wypisze parzyste argumenty.
  5. Napisz skrypt, który zachowa się jak timer. Przyjmujący dwa argumenty (liczbę sekund i słowo alarmu) , a w przypadku braku drugiego argumentu wypisze na koniec słowo "ALARM!".
  6. Napisz skrypt, który dla każdego z plików podanych jako argumenty wywołania posortuje jego zawartość.
  7. Napisz skrypt, który dla każdego z plików podanych jako argumenty wywołania wyświetli w kolejnych liniach 3 najczęściej powtarzające się w nim słowa.
  8. Napisz skrypt, który będzie kopiował plik podany jako pierwszy argument do wszystkich katalogów podanych jako kolejne argumenty wywołania.