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]