=== 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