=== SHELL script alapok ===
script fájl elejére:
#!/bin/bash
#!/usr/bin/perl
egyébként az aktuálisan futó shellben fut
== "Magic" változók ==
* ''$?'' -> visszatérési érték
* ''$#'' -> paraméterek száma
* ''$@'' -> ''for valami in $@; do ... done'' #az összes parancssori argumentumon végigmegy
* ''$$'' -> az aktuálisan futó parancs pidje
* ''$!'' -> utolsó háttérben futó parancs pidje
== if then else fi ==
if [ ... ]; then ... fi
(SPACE számít a [] között!!)
== feltételek ==
* ''[ -z arg ]'' -> true, ha arg üres
* ''[ a -eq b ]''
* ''-lt, -gt, -eq, -ne''
* ''='' -> string összehasonlítás
* ''! [ ... ] && [ ... ] || [ ... ]'' -> és, vagy, negáció
== Példák ==
[ -z "$1" ] && echo "Adj meg parametert"
if [ ! -z "$1" ] && grep "^$1:" /etc/passwd; then
echo "Hello World!"
fi
== subshell mikor indul? ==
* ''`ez a fajta futtatás`''
* ''( echo 1; echo 2 )'' // ez pipe-olható //
* ''./valami.sh''
* pipe-olásnál is!
== ez nem indít subshellt, csak include-olja ==
* ''. valami.sh''
* // másképp:// ''source valami.sh''
== File olvasás ==
''read L;'' -> L változóba olvas egy sort a stdin-rõl, 0-val tér vissza, ha OK
== Fájlok, könyvtárak ==
* ''dirname'' -> kiírja a paraméterben megadott fájl könyvtárnevét (ahogy meghívták)
* ''basename'' -> ugyanez a fájlnévre
* ''tempfile'' -> létrehoz egy random fájlt a /tmp-ben és visszaadja a nevét. Pl: ''TMP=`tempfile`; ... $TMP ... ; rm -f $TMP''
* ''mkdir -p'' -> a teljes könyvtárstruktúrát létrehozza, ha nem létezik még
* ''rm -f'' -> ha létezik, akkor töröl, hibakódot nem ad
== ""set"" parancs ==
* ''set -x'' -> bekapcsolja, hogy minden végrehajtott parancsot kiír helyettesítés után
* ''set +x'' -> kikapcsolja, ...
* ''bash -x ...'' -> ilyen módban futtatja a parancsot
* ''set -e'' -> mód: ha egy parancs visszatérési értéke hamis, leállítja a parancs futását.
* ''set +e'' -> kikapcsolja ezt a módot
== sed ==
sed 's/what/for/g'
* ?* -> non-greedy * (alk. +-ra is).
* alapból greedy operátort alkalmaz..
== Példák ==
cat /etc/passwd | sed 's/\([^:]\+\):x:[0-9]\+:[0-9]\+:\([^:]*\).*$/\1 \2/'
cut -f1,5 -d: /etc/passwd
cut -c (karakterszám alapján)
cat /etc/passwd | awk 'BEGIN{FS=":";} {printf("%s %s\n",$1,$5);}'
== SHELL Függvények ==
valami() {függvény kódja... ; return 0}
== Billentyűparancsok ==
CTRL C -> TERM signal
CTRL D -> stream vége (EOF)
CTRL \ -> QUIT signal
CTRL Z -> STOP
CTRL S -> Scroll Lock, fagyasztja a terminált, Q-val felold
CTRL R -> Elõzõ parancsok között keres
== Job management ==
jobs -> minden processzhez index
bg [index]
fg [index]
CTRL-Z
== SCREEN ==
* CTRL-a,? -> help
* CTRL-a,a -> legutóbbi ablak
* CTRL-a,BACKSPACE -> köv. ablak
* CTRL-a,c -> create
* CTRL-a,d -> detach
* CTRL-a,[ -> COPY mód, scrollozni lehet, esc a kilépés
Paraméterek:
* screen -d -> detach all
* screen -R -> reattach
== AWK++ ==
cat /etc/passwd | awk 'BEGIN{FS=":";} {printf("%s %s\n",$1,$5);}'
Ne tedd:
#!/bin/awk
De:
#!/bin/bash
cat fn | awk '
BEGIN{
FS=":"
}
{
print $1
}
'
== GREP ==
* -v negált
* -i case-insensitive
=== Példa programok ===
#!/bin/bash
if [ "`pidof -x $0 | wc -w `" -gt 1 ]; then
echo "Futok"
fi
#!/bin/bash
for i in $(seq 15);do
echo $i;
done
#!/bin/bash
[ -z "$1" ] && echo "Adj meg parametert"
if [ ! -z "$1" ] && grep -q "^$1:" /etc/passwd; then
echo "Hello World!"
fi
#!/bin/bash
cat /etc/passwd | while read L; do
T_USER=`echo $L | cut -f1 -d:`
T_NAME=`echo $L | cut -f5 -d:`
echo $T_USER $T_NAME $a
done
echo $T_USER # ez nem ír ki semmit, mert forkol a while a pipe-olások miatt