bash. Llibreria s'scripts útils

:tagbashútils,tagllibreria,tagllib,taglib:

Última actualització: desembre de 2019

Arrays: Manipulació d'arrays

Backups: Backups

Bucles

Cridar/incorporar/afegir script extern

source calcula_rutes.sh

Compressió

Comprimir tots els fitxers d'un directori

#!/bin/bash

for i in $( ls -1 ); do

tar cvzf \(i.tar.gz pwd/\)i

#echo $i

done

Dia i hora: Manipulacio de dates i hores

Noms de fitxers amb data

Podem fer servir els accents oberts per enviar variables a la línia de

commandaments. Per exemple podem crear directoris que continguin la data amb

l'expressió:

mkdir `date +%Y-%m-%d`

Calendari perpetu

date -d "9/24/2004" +"%a" és un divendres (dv). Si volem el resultat en número: date -d "9/24/2004" +"%w"

Dialog: Interacció amb l'usuari

Ets root?

IDUSER=id -u if (( $IDUSER != 0 )); then echo "Ho sento, has de ser root per a poder executar això." exit fi

Encoding: Encoding and decoding strings

Find: cerques, substitucions...

==== Buscar fitxers

Buscar una expressió a un directori i següents subdirectoris:

grep -nr '192.1.200.251' .

Buscar a partir d'una carpeta tots els directoris buits i esborrar-los

Ho fa el programari fslint

Buscar tots els fitxers que comencen per punt (ocults) a un directori i subdirectoris

Per a poder trobar-los hem de fer servir aquesta expressió regular:

.[^.]*

Llistar els fitxers modificats les últimes 24 h

find /var/log -mtime 0

Trobar i copiar a la carpeta "NOMESZIP" tots els fitxers zip que trobem al directoris i subdirectoris

find . -name '*.zip' -exec sh -c 'exec cp -f "$@" NOMESZIP/' X '{}' +

==== Cercar i/o obtenir text a dintre de fitxers

Obtenir d'un fitxer de text les línies que no comencin per ; o #

grep "[#;]" smb.conf

Comprovar si està un literal en un fitxer

SILINIA=grep elmeutextquevulltrobar ~/.vimrc

    1. comprovem caràcters tornats per grep
    2. if [ ${#SILINIA} -ge 58 ]; then
    3. echo "OK"
    4. else
    5. echo "no l'he trobat"
    6. fi

Llegir un fitxer, línia a línia, amb while

while read linea; do

echo "$linea"

done < /ruta/al/fichero.txt

==== Substitucions de text en fitxers

Reemplaçar una cadena a un fitxer file.txt

while read LINIA ; do echo ${LINIA//abc/XYZ} ; done < /tmp/file.txt > /tmp/file.txt.t ; mv /tmp/file.txt{.t,}

Reemplaçar un text buscant a tots els fitxers d'un directori (en aquest cas buscarem a tots els fitxers *.sh)

find . -name '*.sh' | xargs perl -pi -e 's/textantic/textnou/g'

Fitxers

Comprovar si no existeix un fitxer o un directori

Farem servir d pels directoris i l pels enllaços simbòlics:

if [ ! -f '/home/bmw/KeePassX/passwords2.kdbx' ]; then if [ ! -d '/home/bmw/KeePassX' ]; then

chmod només a fitxers i no a carpetes

find . -type f -print0 | xargs -0 chmod +x find . -type f -print0 | xargs -0 chmod 755

Internet: (veure "Xarxa")

Launchers: Llençadors

Missatges: Mostrar missatges i generació de logs

Guardem només els logs dels últims 15 dies

cp /usr/mylogs/dailyBackup/logs.backup.tgz /usr/mylogs/dailyBackup/histo_logs_backups/date +%Y-%m-%d.tar.gz

find /usr/mylogs/dailyBackup/histo_logs_backups_/*.tar.gz -mtime +14 -exec rm -f {} \;

Paràmetres: Parseig paràmetres

Sistema: Interacció amb el sistema

Matar tots els processos d'un programa

killall -9 -r -v evolution

Matar una aplicació

kill -SIGHUP $(pidof telegram-desktop)

Monitor de memòria (Hem de tenir instal.lat watch i vmstat)

watch vmstat -sSM

Si existeix un fitxer apaga la màquina

#!/bin/bash

if [ -e /zxspec.jpg ]; then

rm /zxspec.jpg systemctl poweroff

else

exit 0

fi

Alies per defecte a RedHat

Alies de "seguretat" per a no eliminar coses sense voler, quan fem moviments o eliminacions.

alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i'

Llavors si per exemple volem fer un rm sense que ens pregunti, em de fer:

\rm

grep de ps -aux sense que surti la meva instrucció grep

ps -aux | grep [v]im

Strings: Manipulating strings

Passar de string a integer

BTCUSD="1230.00"

    1. Trunco decimals
    2. BTCUSDR=${BTCUSD%.*}
    3. De string a num
    4. BTCUSDR=\(((\)BTCUSDR + 0))

Hem de tenir present sempre que bash només treballa amb integer. Si volem treballar amb decimals, tenim zsh p.e.

Variables: Manipulació de variables

Testing: Coses pendents de testejar

Xarxa

Compartir un fitxer pel port 80 sense tenir instal.lat un servidor web (hem de tenir instal.lat netcat)

nc -w 50 -v -l -p 82 < fitxer.txt

Penjar un fitxer a un ftp des d'un script (hem de tenir instal.lat curl)

curl -u user:passwd -T fitxer_a_penjar.txt ftp://servidor_iremot/subdirectori/

També podem obtenir un llistat del directori remot a l'ftp:

curl -u user:passwd ftp://servidor_remot/subdirectori/

Descarregar totes les URL que tenim a un fitxer

cat url-list.txt | xargs wget –c

Localitzar IP duplicades a una xarxa (hem de tenir instal·lat arping

j=1

while [ $j -lt 254 ]; do

arping -d -i eth0 -c 2 192.168.1.$

j=\([\)j+1]

done

Si rebem varies respostes des de diferents MACs, tenim un problema.