Powłoka (shell) Powłoka ksh

Transkrypt

Powłoka (shell) Powłoka ksh
Powłoka (shell)
Powłoka - interface mie˛dzy użytkownikiem a systemem operacyjnym.
Funkcje:
• interpreter poleceń użytkownika
• je˛zyk programowania poleceń
Najcze˛ściej stosowane powłoki:
Bourne’a
sh
Korna
ksh
C
csh
Powłoki public domain:
bash, zsh, tcsh
Powłoka ksh
Linia komentarza:
# komentarz
Słowo: cia˛g znaków mie˛dzy spacjami
Komenda: cia˛g słów postaci:
nazwa_komendy parametry
Komenda zwraca status wyjścia
Potok: cia˛g jednej lub wielu komend oddzielonych znakiem |, np.
ls | sort | more
Lista: cia˛g potoków/komend oddzielonych (i ew. zakończonych)
znakami nowej linii lub znakami:
; - wykonanie sekwencyjne
& - wykonanie asynchroniczne
Wartościa˛ zwracana˛ przez potok/liste˛ jest wartość zwracana przez
ostatnia˛ komende˛ potoku/listy
Zmienne powłoki
Zmienne powłoki definiujemy instrukcja˛ przypisania
zmienna=wartosc
Doste˛ p do wartości zmiennych powłoki
$zmienna
lub ${zmienna}
Przykłady:
system=UNIX
echo To jest system $system
N=2
nazwa=Dane
cp ${nazwa}$N kopie\
Przykłady zmiennych predefiniowanych:
#
liczba parametrów pozycyjnych
$1, $2, ... kolejne parametry pozycyjne
?
status zwrócony przez ostatnia˛ komende˛
!
numer ostatnio uruchomionego procesu w tle
$
nr procesu powłoki
PPID
nr procesu rodzicielskiego powłoki
HOME
prywatny katalog użytkownika
PWD
aktualny katalog
OLDPWD
poprzedni katalog
PATH
ścieżka doste˛ pu
PS1, PS2,
prompt
EDITOR
używany edytor ASCII (vi lub emacs)
MAIL
plik zawieraja˛ cy poczte˛
TERM
nazwa używanego terminala
SHELL
używana powłoka
RANDOM
liczba losowa
SECONDS
liczba sekund od uruchomienia powłoki
LOGNAME
nazwa użytkownika
....
Zmienne powłoki moga˛ być
• lokalne - obowia˛ zuja˛ tylko w danej powłoce
• środowiskowe (eksportowane) - obowia˛ zuja˛
powłokach potomnych
Przykłady:
$ xx=YYY
$ zsh
$ echo $xx
$
$
$
$
również
w
xx=YYY
export xx
zsh
echo $xx
YYY
Substytucje wykonywane przez powłoke˛
•
aliasy
alias lll=’ls -l -a -F | more’
lll
•
ścieżka doste˛ pu do pliku
more ~janek/doc/raport
≡ more /users/students/janek/doc/raport
~
wartość zmiennej HOME
~+
"
"
PWD
~"
"
OLDPWD
•
wynik działania komendy
ls -l | grep $(who am i)
cat ‘ls | tail -2‘
> last2
•
wyrażenia arytmetyczne
let k=2
(( m=k+3 ))
echo Wynik= $[m*k/2]
•
zmienne powłoki
more $HOME/doc/raport
(powłoka zsh)
•
generacja nazw plików
ls [ao]la b*d
*
?
[ABCa-c]
[^A-Z]
(x|y)
x#
...
dowolny cia˛ g znaków (także pusty)
dowolny znak
jeden ze znaków: A, B, C, a, b, c
dowolny znak nie be˛ da˛ cy duża˛ litera˛
x lub y
powtórzenie wzorca x
Cytowanie (quoting)
\x
’...’
"..."
znak x
cia˛ g znaków
cia˛ g znaków (za wyja˛ tkiem zmiennych powłoki i
znaku \ ’)
Przykłady:
echo \$HOME = $HOME
echo ’X > Y’
echo "$HOME ----- > YY"
Konstrukcje steruja˛ ce je˛ zyka powłoki
Instrukcja warunkowa:
if warunek
then
lista
fi
if warunek
then
lista
else
lista
fi
if warunek
then
lista
elif warunek
then
lista
...
else
lista
fi
Wyrażenia określaja˛ ce warunek
Składnia: [[ wyrażenie_warunkowe ]]
-a fname
plik fname istnieje
-d fname
fname jest katalogiem
-f fname
fname jest zwykłym plikiem
-w fname
plik fname może być zapisany
-x fname
plik fname można wykonać
napis = wzorzec
napis i wzorzec sa˛ zgodne
wyr1 -eq wyr2 wartości wyrażeń wyr1 i wyr2 sa˛ równe
(także: -ne -lt -gt -le -ge || && !)
Przykład:
if [[ -d $nn ]]
then
rm $nn/*
elif [[ -f $nn ]]
rm $nn
else
echo Nie znaleziono pliku $nn
fi
Instrukcja wyboru:
case slowo in
wzorzec1 ) lista ;;
wzorzec2 ) lista ;;
...
esac
Przykład
case $ans
y* )
n* )
* )
esac
in
echo Yes ;;
echo No ;;
echo Maybe ;;
Pe˛ tle:
for zmienna [ in słowo ... ]
do lista done
Przykłady
for plik in *.txt
do
head -1 $plik >> naglowki
done
ol=""; for i in 0 1 2 3 4 5; do ol=${i}${ol}; done; echo $ol
while warunek
do
lista
done
until warunek
do
lista
done
Przykłady
let x=0
while [[ $x -lt 10 ]]
do
echo x = $x
(( x=x+1 ))
done
while who | grep szef
do
sleep 60
done
echo Szef sie wylogowal, koniec pracy!
W liście po do można użyć komend
break
przerwanie pe˛ tli
continue
powrót do pocza˛ tku pe˛ tli
Specjalne instrukcje powłoki
( lista )
lista jest wykonywana w osobnym środowisku
{ lista; } lista jest wykonywana w tym samym środowisku
time potok
function fname { lista; }
fname () { lista; }
Skrypty
•
•
•
•
•
Sa˛ wykonywane w osobnej powłoce
Moga˛ być wykonane w aktualnej powłoce za pomoca˛ komendy
. skrypt [par1 par2 ...]
Winny mieć ustawiony atrybut x
Parametry przekazywane w linii komendy sa˛ doste˛ pne jako
zmienne powłoki $1, $2, ... .
Komenda
shift
powoduje przesunie˛ cie zmiennych pozycyjnych o jedna˛ pozycje˛
Użytkownik może narzucić powłoke˛ /interpreter:
#!/bin/ksh
lub
ksh <skrypt
Plik .profile
Użytkownik może umieścić zestaw komend, które maja˛ sie˛ wykonać
po zalogowaniu do systemu w pliku
.profile
.zprofile
(powłoki sh, ksh)
(powłoka zsh)
np.:
TERM=vt100
PATH=$PATH:$HOME/bin:.
EDITOR=vi
export TERM EDITOR
alias ll=’ls -l’
Przykład
#!/bin/zsh
# 1. Skrypt kopiuje wszystkie pliki z
#
aktualnego katalogu do katalogu
#
podanego jako argument.
# 2. Zmieniane sa nazwy plikow przez dodanie
#
przyrostka .old
# 3. Jesli katalog docelowy nie istnieje, to
#
jest tworzony
if [[ $# = 0 ]]
then
echo Blad - brak agumentu!
echo
echo Sposob uzycia skryptu:
echo
cpold katalog
else
if [[ ! -d $1 ]]
then
mkdir $1
fi
for plik in *
do
if [[ -f $plik ]]
then
cp $plik $1/${plik}.old
fi
done
fi