BASH SCRIPT SHELL JEGYZETEK
1
TARTALOM Paraméterek ....................................................................................................................................................................................... 4 Változók .............................................................................................................................................................................................. 4 Környezeti változók ......................................................................................................................................................................... 4 Szűrők ................................................................................................................................................................................................. 4 grep ................................................................................................................................................................................................. 4 sed ................................................................................................................................................................................................... 5 cut ................................................................................................................................................................................................... 5 head, tail ......................................................................................................................................................................................... 5 Reguláris kifejezések ........................................................................................................................................................................... 6 * ...................................................................................................................................................................................................... 6 + ...................................................................................................................................................................................................... 6 ? ...................................................................................................................................................................................................... 6 {m,n}................................................................................................................................................................................................ 6 (elemi_kifejezes_1|elemi_kifej_2) ................................................................................................................................................. 6 Vezérlési szerkezetek .......................................................................................................................................................................... 6 if ...................................................................................................................................................................................................... 6 case ................................................................................................................................................................................................. 7 for.................................................................................................................................................................................................... 8 while................................................................................................................................................................................................ 8 until ................................................................................................................................................................................................. 8 Egyéb parancsok ................................................................................................................................................................................. 8 expr ................................................................................................................................................................................................. 8 wc .................................................................................................................................................................................................... 9 sort .................................................................................................................................................................................................. 9 Megoldott feladatok ........................................................................................................................................................................... 9 until menü ....................................................................................................................................................................................... 9 Online felhasználók kiírása............................................................................................................................................................ 10
2
Számjegyek összeadása ................................................................................................................................................................ 10 Faktoriális kiszámító ...................................................................................................................................................................... 11 E-mail készítő ................................................................................................................................................................................ 11
3
PARAMÉTEREK #!/bin/sh #echo $1 $2 $3 echo "Paraméterek száma:" $# echo "Összes paraméter:" $@ #i=8 #echo "az $i-ik paraméter ${!i}"
VÁLTOZÓK #!/bin/sh echo -n "Adja meg a változó értékét: " read VALTOZO echo ”A változó értéke $VALTOZO”
KÖRNYEZETI VÁLTOZÓK #!/bin/sh echo $HOME
#A HOME könyvtárad elérési útját írja ki
echo $PATH
#A PATH változó azt tárolja, hogy milyen abszolút
echo $PWD
#útvonalakon keresse a Linux a futtatható állományokat #Az aktuális könyvtár elérési útvonala
echo $USER
#Az aktuális felhasználó
echo $TERM
#A terminális típusa
echo $SHELL #A shell típusát tárolja
SZŰRŐK GREP A grep parancs segítségével fájlokban vagy könyvtárakban kereshetünk megadott szavakat, szórészleteket.
KAPCSOLÓK -c
Kiírja az illeszkedést mutató sorok számát.
-num
Az illeszkedést mutató sorok környezetükkel együtt lesznek kinyomatatva, azaz ezen sorok előtt és utáni num számú sor is nyomtatásra kerül.
-eminta
A mintá-t használja mintának. Hasznos, ha a minta-jellel kezdődik.
-ffáj
A mintát a fájl-ból veszi.
-i
Nem különbözteti meg a kis- és nagybetűket sem a mintá-ban, sem a bemeneti fájlban.
4
-L
Elhagyja a szokásos kimenetet, és csak azon fájlok neveit adja meg, amelyekből nem származna kimenet.
-l
Elhagyja a szokásos kimenetet, és csak azon fájlok neveit adja meg, amelyekből származna kimenet.
-v
Megfordítja az illeszkedés értelmét: a mintához nem illeszkedő sorokat választja ki.
-w
Csak azokat a sorokat választja ki, amelyekben az illeszkedés teljes szavakból származik. Azaz az illeszkedést mutató szövegrész előtt és után nem állhat betű, szám vagy aláhúzásjel.
-x
Csak teljes sorokkal való illeszkedést vizsgál.
SED Stream editor, azaz folyamszerkesztő. A bemenetet a kimenetre másolja, de közben egy parancsokat tartalmazó szkriptnek megfelelően megszerkeszti. A leggyakrabban cserére használjuk, ilyenkor így kell megadni: sed 's/mit/mire/g'
# a bemeneten bejön, kicseréli, a kimenetre kerül az eredmény
sed 's/mit/mire/g' fajl
# a fájlt olvassa be, kicseréli és a kimenetre kerül az eredmény
KAPCSOLÓK sed 's/mit/mire/i' sed 's/mit/mire/gi'
# Kis- és nagybetűk között nincs különbsé, minden sorban legfeljebb egyszer cserél # Kis- és nagybetűk között nincs különbség, a teljes sorban akár többször is cserél
sed 's/mit/mire/'
# Van különbség a kis- és nagybetűk között; minden sorban legfeljebb egyszer cserél
sed 's/mit/mire/g'
# Van különbség a kis- és nagybetűk között; a teljes sorban akár többször is cserél
CUT A bemenet (standard input) vagy a paraméterben megadott fájlok minden sorának egy adott részét vágja ki. $ cut -f2 $ cut -f4,2
# 2. mező (határolójel: tabulátor karakter) # 2.,4. mező - sorrend nem számít
$ cut -f-4,6-
# 4. mezőig és a 6.-tól
Mező kivágása, a mezőelválasztó karakter megadásával: $ cut -f2 -d:
# 2. mező, kettőspont az elválasztó
$ cut -f2,6- -d' '
# szóköz az elválasztó karakter
Oszlopok kivágása $ cut -c-3,6-
# pontosan úgy, mint a -f opcióval, minden sor 3. karakteréig aztán a 6.-tól
HEAD, TAIL A head a kapott szöveg elejét, a tail a végét adja tovább. head -n10 fájl
# kiírja a fájl első 10 sorát
cat fajl | tail -n 10
# kiírja a fájl utolsó 10 sorát 5
REGULÁRIS KIFEJEZÉSE K Egy olyan, bizonyos szintaktikai szabályok szerint leírt kifejezés, amivel meghatározható szövegek egy halmaza.
* Az elemi_egyseg egymás utáni 0, 1, 2, ... előfordulása. A „0*” reguláris kifejezésnek az üres szöveg vagy egy akárhány nullából álló jelsorozat felel meg.
+ Az elemi_egyseg egymás utáni 1, 2, ... előfordulása a „ +” reguláris kifejezésnek egy vagy több egymás utáni a betű felel meg. A + jel a kiterjesztett reguláris kifejezés karakterek közé tartozik, a grep parancs nem ismeri.
? Az elemi_egyseg egymás utáni 0 vagy 1 előfordulása a „-?28” reguláris kifejezésnek a „28” és a „-28” sztringek felelnek meg. A ? jel a kiterjesztett reguláris kifejezés karakterek közé tartozik, a grep parancs nem ismeri.
{M,N} Az elemi_egyseg egymás utáni, legalább m-szeres, legfeljebb n-szeres előfordulása. Ha m=n, akkor elég „{m}”-et írni. Ha „n” nincs megadva (de a vessző igen), akkor „végtelen”. A dolog (sajnos) nem egységes, ugyanis előfordulnak olyan regkif megvalósítások, amikben a „{” és „}” helyett a „\{” és „\}” párokat kell használni.
(ELEMI_KIFEJEZES_1|ELEMI_KIFEJ_2) A () zárójelek között az elemi kifejezések (amelyek száma végtelen is lehet) csoportot alkot. Ezeket | jellel szokás elkülöníteni egymástól melynek jelentése „vagy”, azaz vagy az egyik elemi_kifejezes vagy a másik elemi_kifejezes teljesül.
MEGJEGYZÉS [] belsejében elvesztik speciális jelentésüket az egyéb, a reguláris kifejezés speciális jelei. A [.*] regkif-nek (csak) egy pont vagy egy csillag felel meg.
VEZÉRLÉSI SZERKEZETE K IF #!/bin/sh # Beolvasunk egy számot, és eldönti a script, hogy kisebb, nagyobb vagy # egyenlő-e 10-zel. echo -n "Adjon meg egy számot: " read N if [ $N -lt 10 ] then 6
echo "$N kisebb 10-nél." else if [ $N -eq 10 ] then echo "$N egyenlő 10-zel." else echo "$N nagyobb 10-nél." fi fi
MŰVELETI JELEK -eq
equal (egyenlő)
-ne
not equal (nem egyenlő)
-lt
less than (kevesebb mint)
-le
less than or equal kevesebb (mint vagy egyenlő)
-gt
greater than (nagyobb mint)
-ge
greater than or equal (nagyobb mint vagy egyenlő)
=
equal string (két szöveg megegyezik)
!=
not equal string (két szöveg nem egyezik)
!
not (a kifejezés eredményének negáltja)
-a
and (és)
-o
or (vagy)
CASE #!/bin/sh case $1 in "-d") date ;; "-w") who ;; "-l") ls ;; *) echo "Rossz paraméterrel futtatod." esac
7
FOR #!/bin/sh # 5-ször írja ki, hogy Hajrá Csepel! for i in {1..5} # vagy for i in `seq 5` do echo "Hajrá Csepel!" done
WHILE #!/bin/sh # 5-ször kiírja, hogy Hajrá Csepel! i=1 while [ $i -le 5 ] do echo "Hajrá Csepel!" i=$(( $i + 1 )) #i=`expr $i + 1` done
UNTIL #!/bin/sh # 5-ször kiíratunk valami szöveget i=1 until [ $i -gt 5 ] # until [ ! $i -lt 5 ] do echo "Hajrá Csepel!" i=`expr $i + 1` done
EGYÉB PARANCSOK EXPR Matematikai műveletek elvégzése echo `expr 5 + 3`
# Eredmény: 8
MŰVELETI JELEK +
Összeadás
8
-
Kivonás
\*
Szorzás
\/
Osztás
\%
Osztási maradék
WC Megszámolja a bemenetben lévő karakterek/szavak/sorok számát.
KAPCSOLÓK -m
A fájlban lévő karakterek száma.
-c
A fájlban lévő bájtok száma.
-w
A fájlban lévő szavak száma.
-l
A fájlban lévő sorok száma.
$ echo "egy kettő három" | wc –w
#Eredmény: 3
SORT Rendezi a bemenetét.
KAPCSOLÓK -r
Rendezi a fájl sorait fordított sorrendben
-n
A sorok elején álló számok szerint rendezi
-u
Az azonos sorokat csak egyszer írja ki
MEGOLDOTT FELADATOK UNTIL MENÜ #!/bin/sh # Menürendszer készítése until ciklussal until clear echo "Válasszon az alábbi menüpontok közül!" echo echo "1. Másolás" echo "2. For ciklus példa" echo "3. While ciklus példa" 9
echo "4. Until ciklus példa" echo "0. Kilépés" echo echo -n "Adja meg a megfelelő számot: " read szam [ $szam -eq 0 ] do case $szam in 1) ./masol.sh ;; 2) ./hajra_for.sh ;; 3) ./hajra_while.sh ;; 4) ./hajra_until.sh ;; *) echo "Ejnye-bejnye, rossz menüpontot adtál meg." esac sleep 3 done echo "Örültem, hogy engem választott!"
ONLINE FELHASZNÁLÓK KIÍRÁSA #!/bin/sh # Írjuk ki az éppen bejelentkezett felhasználókat! for i in `who | cut -f1 -d" " | sort -u` do echo "$i bejelentkezett!" done
SZÁMJEGYEK ÖSSZEADÁSA #!/bin/sh # Bekér egy számot, majd összeadja a számjegyeket. echo -n "Írjon be egy számot: " read n sum=0 while [ $n -gt 0 ] do sum=`expr $sum + \( $n \% 10 \)` n=`expr $n \/ 10` done echo "A számjegyek összege: $sum."
10
FAKTORIÁLIS KISZÁMÍT Ó #!/bin/sh # Kiírja egy szám faktoriálisát. A szám paraméter. 0!=1 i=$1 faktorialis=1 while [ $i -gt 0 ] do faktorialis=`expr $faktorialis \* $i` i=`expr $i - 1` done echo "A $1 szám faktoriálisa: $faktorialis."
E-MAIL KÉSZÍTŐ #!/bin/sh cat $1 | sed 's/[ _]kukac[ _]/@/g; s/[ _]nospam[ _]/@/g; s/[ _]at[ _]/@/g; s/[ _]pont[ _]/./g; s/[ _]dot[ _]/./g;'
11