Ahogy, fentebb olvashattuk, a nyelv gyengén típusos, de implicit konverzió azért történik. Így különböző „típusú” operátorokról beszélhetünk.
Általános értékadás operátor az „=”-jel. Működik egyaránt string és számértékekre egyaránt. Amire oda kell figyelni, hogy nem megengedett az operátor mögött és előtt a space karakter. Ez talán nehézséget okozhat, ha valaki más nyelvekben megszokta, hogy a tagolás és a jól olvashatóság kedvéért az operátorok és értékek közé space-t szokás tenni.
Matematikai műveletek elvégzésére.
Műveleti jel | Művelet | Példa | Eredmény |
+ | összeadás | a=2+3 | 5 |
- | kivonás | a=5-1 | 4 |
* | szorzás | a=5*2 | 10 |
/ | egész osztás | a=10/3 | 3 |
** | hatványozás | a=2**10 | 1024 |
% | maradékos osztás (modulo) | 10%3 | 1 |
+= | plusz-egyenlő | a+=5 | a=a+5 |
-= | mínusz-egyenlő | a-=2 | a=a-2 |
*= | szor-egyenlő | a*=2 | a=a*2 |
/= | per-egyenlő | a/=4 | a=a/4 |
%= | modulo-egyenlő | a%=2 | a=a%2 |
++ | növelés 1-el | a++ | a=a+1 |
-- | csökkentés 1-gyel | a-- | a=a-1 |
Bitműveletek elvégzésére.
Műveleti jel | Művelet | Példa | Eredmény |
<< | léptetés jobbra | 5<<2 | 20 |
<<= | léptetés jobbra egyenlő | a<<=2 | a=a<<2 |
>> | léptetés balra | 12>>2 | 3 |
>>= | léptetés balra egyenlő | a>>=3 | a=a>>3 |
& | és | 5&3 | 1 |
&= | és egyenlő | a&=5 | a=a&5 |
| | vagy | 5|3 | 7 |
|= | vagy egynelő | a|=2 | a=a|2 |
~ | negálás | ~5 | -6 |
^ | nem vagy | 5^3 | 6 |
^= | nem vagy egyenlős | a^=3 | a=a^3 |
Logikai összehasonlításokhoz.
Operátor | Jelentés | Példa |
! | tagadás | if [ ! -f $FILENAME ] |
&& | és | if [ $cond1 ] && [ $cond2 ] |
|| | vagy | if [ $cond1 ] || [ $cond2 ] |
Operátor | Jelentés | Példa |
-eq | egyenlőség | if [ "$a" -eq "$b" ] |
-ne | nem egyenlő | if [ "$a" -ne "$b" ] |
-gt | nagyobb | if [ "$a" -gt "$b" ] |
-ge | nagyobb egyenlő | if [ "$a" -gt "$b" ] |
-lt | kisebb | if [ "$a" -lt "$b" ] |
-le | kisebb egyenlő | if [ "$a" -le "$b" ] |
Operátor | Jelentés | Példa |
=, == | egyenlő (whitespace kell!) | if [ "$a" = "$b" ] |
!= | nem egyenlő | if [ "$a" != "$b" ] |
< | kisebb | (("$a" < "$b")) |
<= | kisebb egyenlő | (("$a" <= "$b")) |
> | nagyobb | (("$a" > "$b")) |
>= | nagyobb egyenlő | (("$a" >= "$b")) |
-z | null(0 hosszúságú) | if [ -z "$String" ] |
-n | nem null | if [ -n "$String" ] |
Operátor | Jelentés | Példa |
-a | logikai és | exp1 -a exp2 (igazat ad vissza ha expr1 és expr 2 is igaz) |
-o | logikai vagy | exp1 -o exp2 (igazat ad vissza expr1 vagy expr2 igaz) |
A vessző operátor (,) összekapcsol egy vagy több aritmetikai kifejezést. Az összes aritmetikai kifejezés kiértékelésre kerül egymás után (itt felléphetnek mellékhatások). Leginkább a for ciklusnál alkalmazzák.
Operátor | Teszteset |
-e | Létezik-e fájl |
-f | Reguláris-e a file |
-d | A fájl könyvtár |
-h | A fájl szimbólikus link |
-L | A fájl szimbólikus link |
-b | A fájl egy block device |
-c | A fájl egy karakter device |
-p | A fájl egy pipe |
-S | A fájl egy socket |
-s | A fájl nem 0 méretű |
-r | A fájl olvasási engedéllyel rendelkezik |
-w | A fájl írási engedéllyel rendelkezik |
-x | A fájl futtatási engedéllyel rendelkezik |
-g | sgid flag be van állítva |
-u | suid flag be van állítva |
-k | "sticky bit" be van állítva |
-t | A fájl hozzá van rendelve a terminálhoz |
-N | A fájl módosítva lett az utolsó olvasás óta |
-O | Saját magam vagyok a fájl tulajdonosa |
-G | A csoport id megegyezik a sajátommal |
F1 -nt F2 | Az F1 fájl újabb mint az F2 |
F1 -ot F2 | Az F1 fájl régebbi mint az F2 |
F1 -ef F2 | Az F1 és F2 fájlok hard linkek ugyanarra a fájlra |
! | Tagadás, invertálja a fenti teszteseteket |
A reguláris kifejezés (regular expression) egy olyan, bizonyos szintaktikai szabályok szerint leírt string, amivel meghatározható stringek egy halmaza. Nevének rövidítésére gyakran aregexp vagy regex kifejezés használatos.Az ilyen kifejezés valamilyen minta szerinti szöveg keresésére (esetleg cseréjére) használható.
A bash is támogatja reguláris kifejezések használatát, egy reguláris kifejezés egy vagy több részt tartalmazhat a következőkből:
A gyakorlatban főleg string manipulációra és keresésre használhatjuk fel a reguláris kifejezéseket. Nézzünk pár gyakran használ jelet és példát.
Jel | Illeszkedés | Példa |
* | minden szám szoros előfordulásra, beleértve a zéró előfordulást | "1133*" illeszkedik a 11 + egy vagy több 3-asra |
. | bármilyen karakterre, kivéve az újsor karaktert | "13." illeszkedik a 13 + legalább egy bármilyen karakterre, de a 13-ra (tehát amikor hiányzik a bármilyen karakter). |
$ | a reguláris kifejezés végén meghatározza, hogy ez kell hogy legyen a találat vége | "^$" az üres sorokra illeszkedik. |
^ | sor elejére, de néha a kontextustól függően jelentheti egy karakterhalmaz negáltját is | "^a*" az a-val kezdődőekre illeszkedik |
[] | közrezár egy meghatározott karaktersorozatot, melyből valamelyiknek illeszkednie kell | "[xyz]" illeszkedik a x, y, vagy z karakterek egyikére. "[c-n]" ileszkedik a c-től az n-ig bármelyik karakterre. |
\ | escape karakter, amely azt jelenti, hogy a karaktert eredeti jelentése szerint kell vizsgálni | A "\$" a dollár jelet mint karakter értelmezi, nemmint speciális karakter |
<...\> | szóvég határokat jelöl | "\ |
? | nulla vagy egy előfordulásra az előző reguláris kifejezésből | "?a" maximum 1 db a-t tartalmaz |
+ | legalább egy előfordulásra az előző reguláris kifejezésből | "?b" legalább egy b-t tartalmaz |
\{n\} | pontosan n-db előfordulásra az előző reguláris kifejezésből | "c{3}" pontosan az "aaa"-ra illeszkedik |
( ) | közrezárnak reguláris kifejezés csoportokat | kifejezésekben hasznos |
| | vagy-nak felel meg | alternatívákban használatos (a|b|c) |
Ez egy alternatív megadása mintáknak, melyekre a reguláris kifejezésünknek illeszkednie kell. Sokkal beszédesebb és áttekinthető reguláris kifejezést eredményez a használatuk. Általában a gyakran használt kifejezések helyettesítésére lettek létrehozva.
[:alnum:] | alfabetikus karakterek és számok. Megegyezik az A-Za-z0-9 kifejezéssel. |
[:alpha:] | csak alfabetikus karakterek. Megegyezik az A-Za-z kifejezéssel. |
[:blank:] | space és tabulátor karakterek. |
[:cntrl:] | kontroll karakterek. |
[:digit:] | decimális számok. Megegyezik a 0-9 kifejezéssel. |
[:graph:] | grafikus nyomtatható karakterek. ASCII 33 – 126 tartományú karakterekre illeszkedik. Megegyezik a [:print:] kifejezéssel, de nem fogadja el a space karaktert |
[:lower:] | kisbetűs alfabetikus karakterek. Megegyezik az a-z kifejezéssel. |
[:space:] | whitespace karakterek(space és horizontális tab). |
[:upper:] | nagybetűs alfabetikus karakterek. Megegyezik az A-Z kifejezéssel. |
[:xdigit:] | hexadecimális számok. Megegyezik a 0-9A-Fa-f kifejezéssel. |