Logo


Kurs programowania w Bash'u

Nowości       Porady      

Parametry wejściowe

Wywołując skrypt można przekazać parametry np.

dodaj_liczby 2 3

Zmienne używane w skryptach wykorzystujących parametry

$0 nazwa wywołanego skryptu
$1 pierwszy parametr
.....
$9 dziewiąty parametr
$@ lista wszystkich parametrów
$* wszystkie parametry złączone w jeden łańcuch znaków
$# liczba parametrów
- napis pusty
$? stan ostatnio wykonanego polecenia (0 - poprawnie, nie 0 - błędnie)
$$ numer procesu aktualnie wykonywanej powłoki
$! numer procesu ostatnnio wykonywanego w tle

Przy wywołaniu skryptu:

nagrywaj 4 cd-rw obraz.iso

kolejne parametry będą wynosiły:

$0 = nagrywaj
$1 = 4
$2 = cd-rw
$3 = obraz.iso
$# = 3
$@ = 4 cd-rw obraz.iso

Prosty skrypt z wykorzystaniem powyższych informacji


#!/bin/bash
echo "Uruchomiono skrypt o nazwie $0"
echo "Pierwszy parametr to $1"
echo "Drugi parametr to $2"
echo "Trzeci parametr to $3"
echo "Liczba parametrow: $#
echo "Wszystkie parametry wywolania: $@"

Sprawdzenie czy użytkownik podał co najmniej dwa parametry przy wywoływaniu skryptu:

#!/bin/bash
if [ $# -lt 2 ]
then
echo "Podałeś za mało paramerów"
else
echo "OK"
fi

Sprawdzenie czy dwa wyrazy podane jako argumenty wywołania są równe:

#!/bin/bash

if [ $1 = $2 ]
then
echo "wyrazy są rowne"
else
echo "wyrazy są rozne"
fi

Sprawdzenie która liczba jest większa

#!/bin/bash

if [ $1 -gt $2 ]
then
echo "pierwsza liczba jest większa"
elif [ $1 -le $2 ]
echo "druga liczba jest wieksza"
else
echo "liczby są równe"
fi

Skrypt dodaje dwie liczby podane jako parametry

#!/bin/bash

wynik = `expr $1 + $2`
echo "$wynik"

Skrypt zamienia nazwy plików w bieżącym katalogu na liczby 1..n

#!/bin/bash

for i in *
do
mv $i $numer
numer=$[ numer + 1 ]
done
echo "Zmienionych plików: $numer"

Skrypt tworzący katalogi, których nazwy podajemy jako parametry

#!/bin/bash

# Jesli brak parametrów wyjdź
if [ $# -eq 0 ]
then
echo "Nie podano parametów"
exit
fi

for i in $@
# dla każdego parametru
do

# informuje jeśli katalog podany jako parametr istnieje

if [ -d $i ]
then
echo "Katalog $i juz istnieje"

else
# jesli nie istnieje tworzy go
mkdir $i
echo "Utworzono katalog $i"
fi

# ustawienie praw dostępu utworzonym katalogom na drwxr-x--x

chmod 751 $i

done

Skrypt sortuje alfabetycznie parametry

#!/bin/bash

for i in $@
do
echo $i >> /tmp/sortuj.tmp
done

echo `sort /tmp/sortuj.tmp`

rm -f /tmp/sortuj.tmp

Wyświetla tyle gwiazdek ile podano jako parametr

#!/bin/bash

i=1
while [ $i -le $1 ]
do
echo -n '*'
i=$[i+1]
done

echo

Program oblicza sumę kolejnych liczb naturalnych w zakresie ograniczonym parametrami

#!/bin/bash

max=$1
suma=$1

while [ 1 ]
do
max=$[ max + 1 ]
suma=$[ suma + max ]

if [ $max -eq $2 ]
then
break
fi
done

echo "Suma liczb naturalnych w zakresie $1 - $2 wynosi $suma"

Parametry specjalne

Numer procesu ostatnio uruchomionego programu można odczytać następująco:

[mariusz@unix mariusz]$ mozilla &
[1] 3563
[mariusz@unix mariusz]$ echo $!
3563

Odczytując zmienną $? sprawdzamy czy program zakończył się bez błędów:

cd nie_ma

bash: cd: nie_ma: Nie ma takiego pliku ani katalogu

echo $?


1

cd /
echo $?

0

Powłoka zwraca 1 gdy wystąpił błąd, 0 gdy wszystko przebiegło pomyślnie.

Skrypt podaje liczbę słów, linii i bajtów w pliku podanym jako parametr

#!/bin/bash

if [ ! $# -eq 1 ]
# jesli liczba paramerow rozna od 1 - wyjdz
then
echo "Nieprawidlowa liczba parametrow"
exit
elif [ ! -e $1 ]
# jezeli plik podany jako parametr nie istnieje - wyjdz
then
echo "Plik podany jako parametr nie istnieje"
exit
elif [ ! -r $1 ]
# jeśli pliku nie mozna czytac, wyjdz
then
echo "Nie masz uprawnien do czytania tego pliku"
exit
fi

slowa=`wc -w $1 | awk '{print $1}'`
linie=`wc -l $1 | awk '{print $1}'`
bajty=`wc -c $1 | awk '{print $1}'`

echo "Informacje o pliku $1:"
echo
echo "Liczba slow: $slowa"
echo "Liczba linii: $linie"
echo "Liczba bajtow: $bajty"

Polecenia "| awk '{print $1}'`" dodane są tylko po to aby skrypt nie wyświetlał nazwy pliku po każdym komunikacie programu wc. Bez przetwarzania wyniki wyglądałyby następująco:


Liczba slow: 15 plik

Skrypt uruchamia podane polecenie i informuje czy zakonczyło sie powodzeniem czy porazka
(przykladowe polecenie: skrypt rm plik)

#!/bin/bash

# $@ - wszystkie parametry
# &> - stdout i stderr przekierowane na urzadzenie puste
# (brak jakichkolwiek komunikatow)

$@ &> /dev/null


# jesli kod ostatniego polecenia = 0 to znaczy ze wykonano poprawnie

if [ $? -eq 0 ]
then
echo "Polecenie wykonano poprawnie"
else
echo "Wystapil blad"
fi

Ostatnio dodano

O stronie

Stronę najlepiej oglądać w rozdzielczości 1024x768. Strona optymalizowana dla przeglądarki Mozilla.

Prośba

Jeśli chciałbyś coś zmienić lub uważasz że czegoś brakuje pisz. Odpiszę na każdy list.

Subskrypcja

Jeśli chcesz być informowany o nowościach na stronie wpisz tu swój e-mail i kliknij Wyślij.

O mnie

O autorze
Autorem kursu jest Mariusz Majerowski
Ostatnia aktualizacja: 23 VI 2004.