Skip to content

Chuleta de Comandos Bash

Terminal window
A=10
echo $A
echo ${A}DIOS
echo ${#A} // devuelve 2 (longitud)
unset A
b=“HOLA”; echo ${#b) -> longitud de la variable (4)
local A -> variable local dentro de una función
readonly A
A=20
-bash: A: readonly variable

Para ver todas las variables que están definidas se puede utilizar el comando env

Terminal window
chmod u+x nombre_script.sh

Terminal window
$0 -> nombre script
$# -> número de parámetros
$* -> todos los parámetros vistos como una palabra
$@ -> todos los parámetros posicionales, cada uno está entrecomillado
Terminal window
ls 2> fichero ls 2>/dev/null -> Redirección salida error
ls 2>&1 -> Redirección salida error a estándard (muestra el error, como si no estuviese el 2)
ls /aa &> fich -> todas las salidas a fich
ls /aa &> /dev/null -> Ocultar todas las salidas, error y OK
ls /saa < fich // redirección entrada
ls /saaa &>fich // redirección salida estándar y errores
ORDEN DE EVALUACIÓN
Redirecciónes E/S
Sustitución, expansión variables
Sustitución, expansión nombres ficheros
cmd < fichero -> coge como entrada standard un fichero
cat << end
Escriure el que vols…
end
Terminal window
echo ­n "Escriu DNI i lletra separats per un espai"
read DNI LLETRA
read -p "Type something: " text // -p mostrar prompt -e linea entera
Type something: josep garcia // se guarda en $text
read -p "PASS" -s VAR // s-> silence
PASS: // no se muestran caracteres que se escriben, guarda en VAR
Terminal window
seq valor_inicio valor_fin
seq valor_inicio incremento valor_fin
for i in $(seq 1 10); do echo $i; done #1 2 3 4 5 6 7 8 9 10
for i in $(seq 1 2 10); do echo $i; done #1 3 5 6 9

Se utilizan bucles para leer ficheros y salidas de comandos

Terminal window
# Leemos /etc/password
FILE='/etc/passwd'
while read line; do
echo "--> $line"
done < $FILE
# Leemos la salida de un comando
find /tmp -type f -name "*txt" | while read FILE
do
echo "--> $FILE"
done
Terminal window
TR (significa: translate o transliterate)
-s sustituye conjunto carácteres repetidos por uno solo
-c sustituye carácteres específicos: tr -c “[a-z]” x -> traduce a x
-d borra: tr -d [a-z]
cat datos_demo.txt | tr -s " " | cut -f6 -d "#"
# Cambia espacios por \n
echo “a b c d e” | tr \n
# BORRA la aparición de localhost en el fich
# cat /etc/hosts | tr -d ‘localhost'
# Deja un solo :
# echo “AA::::::::B” | tr -s “:” -> AA:B
# convertir a minúsculas
echo "EaaaEM" | tr '[:upper:]' ‘[:lower:]’
echo "EaaaEM" | tr "a-z" "A-Z"
#
y="this Is A test"
echo "${y^^}" -> THIS IS A TEST
echo "${y,,}" -> this is a test
Terminal window
sed ’s/a_sustitutir/a_sustituto/g’ fich.txt
** SED reemplaza cadenas, TR carácteres
echo "good good" | sed 's/good/bad/g'
bad bad
echo "good good" | tr ’good’ ‘x'
xxxx xxxx
Obtener línea 2: sed -n 2l fich.txt
Obtener todos menos 12 y 18: sed 12,18d fich.txt
Borrar líneas en blanco: sed ’s/^$ /d’ fich.txt
No mostrar líneas que tengan hola: sed ‘/hola/d’ fich.txt
Terminal window
CUT
-d carácter delimitador
-b,-c,-f corta por bytes, carácteres o campos
cut -f6- -d “#” -> saca la 6 y la siguiente
cut -f1-6 -d “#" -> de la 1 a la 6
cut -f1,6 -d “#" -> la 1 y la 6
# cat datos_demo.txt | cut -f1-3 -d “#"
1#josep#garcia
2#ana#martin
3#olivia#garcia
Terminal window
HEAD -> Muestra 10 primeras lineas
Head -n2 fich.txt -> muestra 2 primeras líneas
Terminal window
Muestra las 10 últimas líneas
Tail -n3 fich.txt -> muestra las 3 últimas
Terminal window
SORT -> ordenar
-f no distingue Mayús/minús
-b (ignora blancos al principio línea)
-r (orden inverso)
Fitxer:
aa aabb:x
aaa abb:y
aaa aaa:z
cat fich | sort -k3n -t”:”
n-> compara con campo numérico ->> orden numérico
K3 -> según tercer campo (campos según espacios)
-t”:” -> campos delimitados por dos puntos
Terminal window
# cat ordenar.txt | sort -k1
aa aabb:x
aaa aaa:z
aaa abb:y
# cat ordenar.txt | sort -k2
aaa aaa:z
aa aabb:x
aaa abb:y
# cat ordenar.txt | sort -k2 -t":"
aa aabb:x
aaa abb:y
aaa aaa:z

Descarta repeticiones de línea sucesivas

Terminal window
Fitxer:
aaa
asf
aaa
asfasdf
asdff
aaa
aaa
# cat unicos.txt | uniq
aaa
asf
aaa
asfasdf
asdff
aaa
Terminal window
# cat unicos.txt | uniq -c -> cuenta ocurrencias
1 aaa
1 asf
1 aaa
1 asfasdf
1 asdff
2 aaa
# cat unicos.txt | uniq -u -> muestra líneas únicas
aaa
asf
aaa
asfasdf
asdff
Terminal window
gzip fichero.txt -> fichero.txt.gz
bzip bigfile -> bigfile.bz2
tar cfz bigfile.tgz bigfile
zip ./bigfile.zip bigfile
tar -czvf archive.tar.gz /home/ubuntu --exclude=*.mp4
#Varios directorios i ficheros
tar -czvf archive.tar.gz /home/ubuntu/Downloads /usr/local/stuff /home/ubuntu/Documents/notes.txt
Terminal window
tar xf bigfile.tgz
tar -xzvf archive.tar.gz
unzip bigfile.zip
gunzip bigfile.gz
bunzip2 bigfile.gz2
Terminal window
# Creamos un fichero si no existe
[ -f $FILE ] || touch $FILE
# Variables de solo lectura
readonly A
A=20
     -bash: A: readonly variable

Comando shift

Terminal window
#shift 3  \\ Con el comando shift indicamos que ahora el parámetro primero sea $4, pues hemos hecho que empiece inmediatamente después de la tercera posición
while [ $1 ]; do
      echo “parametro $1
      shift
done