====== Szkriptelés ====== ==== Gyors uniq awk-val ==== awk '!x[$0]++' ==== Fájlba beszúrás minta után, ha még nincs ==== sed -i '/^EZENSTRINGUTAN /{N; /\nBEILLESZTENDO$/b; s/\n/\nBEILLESZTENDO\n/}' /etc/resolv.conf ==== Futási logok archiválása havi lebontású .zip-be, és az 1 hónapnál régebbiek törlése ==== zip -9rv ${LOG}/$(date +%Y%m)_archived_backup_logs.zip ${LOG}/${LOGFILE##*/} find ${LOG}/*.log -type f -mtime +60 -exec rm {} \; ==== Háttérben futunk-e? ==== case $(ps -o stat= -p $$) in *+*) echo "Running in foreground" ;; *) echo "Running in background" ;; esac ==== crontab-ból futunk-e? ==== CRON=$(pstree -s $$ | grep -q cron && echo true || echo false) ==== nohup-pal futunk-e? ==== if egrep -q "SigIgn:\s.{15}[13579bdf]" /proc/$$/status ; then echo "Ignores SIGHUP (runing via nohup)" else echo "Doesn't ignore SIGHUP (NOT running via nohup)" fi ==== Fájl rendezése több soros csoportosításban ==== Pl: 4 oszlopos bemeneti fájl 3 soros csoportokban. A 3 sort egymás után rakjuk, lerendezzük az 5. oszlopra, majd újra eltördeljük paste - - - < input.file | sort -k5 | xargs -n4 ==== Szkript kimeneteinek automatikus logolása fájlba ==== A_CURR_SHELL=$(ps -o args= -p "$$" | sed 's/ .*$//' | sed 's#^.*\/##g') if [[ "$A_CURR_SHELL" == "bash" ]]; then exec > >(tee -ia $A_TMP_FILE) exec 2> >(tee -ia $A_TMP_FILE >&2) elif [[ "$A_CURR_SHELL" == "ksh" ]]; then mkfifo /tmp/$$-out-fifo ( exec tee -ia $A_TMP_FILE < /tmp/$$-out-fifo >&2 ) & exec 1>/tmp/$$-out-fifo exec 2>/tmp/$$-out-fifo rm -f /tmp/$$-out-fifo fi forrás [[https://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself]] ==== Ismétlődő sorok számolása ==== cat file | sed 's/([^(]*)$/,&/' | awk -F'[,]' '{a[$2]++}END{for(k in a) print $1,k,$3,"("a[k]"x)"}' ==== User input default értékkel ==== DEFAULT="Semmit" read -e -p "Mit akarsz?" -i "$DEFAULT" VALTOZO VALTOZO="${VALTOZO:-$DEFAULT}" ==== Terminálról olvasás ciklusban ==== read input >(while read line; do echo -e "\e[01;31m$line\e[0m"; done) Bash színkódok törlése szövegből: sed -r "s/\x1B(\[[0-9;]*[JKmsu]|\(B)//g" Színkódok és sorvég karakterek kivágása szövegből: A ^M-et így: CTRL+V, CTRL+M !! sed -i -e 's/\x1b\[[0-9;]*m//g' -e 's/^M//g' file Váltott soroz színezés: | awk '{if (NR%2 != 1) {print "\033[48;5;235m" $0 "\033[0m"; next;} {print "\033[38;5;239m" $0 "\033[0m";}}' ==== Dátumos prompt képernyőmentéses dokumentáláshoz ==== export PS1='[\u@\h \W] \D{%F %T}\n\$ ' ==== Terminál doboz rajzolás ==== env printf '\u2502' Karakterek: https://en.wikipedia.org/wiki/Box-drawing_character ==== Terminál kurzor pozícionálás ==== - Position the Cursor: \033[;H Or \033[;f puts the cursor at line L and column C. - Move the cursor up N lines: \033[A - Move the cursor down N lines: \033[B - Move the cursor forward N columns: \033[C - Move the cursor backward N columns: \033[D - Clear the screen, move to (0,0): \033[2J - Erase to end of line: \033[K - Save cursor position: \033[s - Restore cursor position: \033[u ==== "Homokóra" - progress ikon ==== v1: a=1 sp="/-\|" echo -n ' ' while true do printf "\b${sp:a++%${#sp}:1}" done v2: spinner() { local pid=$1 local delay=0.75 local spinstr='|/-\' while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do local temp=${spinstr#?} printf " [%c] " "$spinstr" local spinstr=$temp${spinstr%"$temp"} sleep $delay printf "\b\b\b\b\b\b" done printf " \b\b\b\b" } ==== Parancsok csoportosítása ==== Új shellben: (parancs1) Aktuális shellben: { parancs1; } [[https://devhints.io/bash|Bash scripting cheatsheet]]