1. Příkaz vrací pouze jeden řádek, chci tento výstup použít v
následujícím příkazu:
příkaz $(!!)
příkaz `!!`
dirname
2. Debugovací informaci o polích a hashíš
set | grep ^název
3. Čekání pouze na stisk jedné libovolné klávesy
read -r -s -n1 -d '' KEY
Tato stiknutá klávesa je pak uložená v proměnné $KEY
IFS= read -r -s -n1 -d '' "${1:-_KEY}"
4. Jak převádět mezi číselným vyjádřením ASCII kódu a příslušným
znakem.
printf "%d" \'A
printf \\$(printf '%03o' 65)
5. Změna chování příkazu cd (change directory)
Pokud používáme cd uvnitř skriptu, mění se aktuální adresář pouze
v rámci puštěného (sub)shellu, pokud chceme použít nějaký skript, který změní v aktuálním shellu
adresář, je nutné jej nadefinovat jako funkci a přidat do ~/.bashrc
Pro zavedení upraveného bashrc použijte source ~/.bashrc nebo ekvivalentní . ~/.bashrc.
Následující příkaz cdt, vezme argument a pokud se jedná o adresář skočí do něj,
pokud o existující soubor skočí do adresáře jeho umístění (dirname), jinak předá
parametr cd, ten pak případně vypíše chybovou hlášku.
function cdt ()
{
INPUT="$1";
if [ -d "$INPUT" ]; then
cd "$INPUT";
exit;
fi;
if [ -e "$INPUT" ]; then
cd "$(dirname $INPUT)";
else
cd $INPUT;
fi
}
6. Jak přidat nový prvek do pole?
POLE[0]="Ahoj"
POLE[1]="tohle"
POLE[2]="je"
POLE+=("pole!")
7. Použít pouze část pole
${POLE[*]:2} -- od 3. prvku do konce
${POLE[*]:2:2} -- od dva prvky od 3. prvku včetně
8.
read cucm_ip cucm_user cucm_pass <<< "${SERVER_CUCM[$host]//;/ }"
9. Načítání souborů
# cucm_ip=$(sed -ne 1p $SETUP_TMP)
# cucm_user=$(sed -ne 2p $SETUP_TMP)
# cucm_pass=$(sed -ne 3p $SETUP_TMP)
# cucm_retype=$(sed -ne 4p $SETUP_TMP)
read cucm_ip cucm_user cucm_pass cucm_retype <<< $(cat $SETUP_TMP)
10. Přesměřování deskriptorů do logů
read OLD_STDOUT OLD_STDERR<<<$(lsof -a -d1,2 -p$$ -F|sed -ne
"s/^n\(.*\)/\1/p")
ADDITIONAL_LOG=test.log
rm -f $ADDITIONAL_LOG
function __enable_detail_log() {
exec 1> >(tee -a $ADDITIONAL_LOG )
# exec 2> >(tee -a $ADDITIONAL_LOG >&2 ; echo "(STDERR)" >>
# $ADDITIONAL_LOG)
# exec 2> >(tee -a $ADDITIONAL_LOG >&2 )
exec 2> >( ( while read -t 1 -r line; do echo "ERROR: $line" ;
done ) | tee -a $ADDITIONAL_LOG >&2 )
}
function __disable_detail_log() {
exec 1>$OLD_STDOUT
exec 2>$OLD_STDERR
}
__enable_detail_log
echo $OLD_STDOUT $OLD_STDERR
ls -l
find /etc
find /proc
__disable_detail_log
echo AHOJ!
sync
11. Repeat char and center text with printf
STR="This text will be centered!"
printf "%80s\n" | tr ' ' '#'
printf "#%*s%*s#\n" $[39+${#STR}/2] "$STR" $[39-${#STR}/2]
printf "%80s\n" | tr ' ' '#'
12. Problem with variable in subshell
The $i is here exist just in subshell.
i=0
for i in {1..10}; do echo $i; done | \
while read a
do
echo $a
: $[i++]
done
The value of $i can be read after the loop is done
i=0
while read a
do
echo $a
: $[i++]
done < <( for i in {1..10}; do echo $i; done )
13. Replacing
A="AhojKoko te123\$koko "; echo $A = "${A//[[:ascii:]]/*}"
14. Jak zjistit poslední den v měsíci
DATE=$(date +%s --date "2014-01-01")
date --date @$[DATE-1]