Linux: Sintaxis básica de Bash

1. Formato del archivo

  • Sin formato obligatorio (también .sh)

2. Software necesario

  • Editor de código
  • Terminal Shell (Linux)

3. Estructura del código

  • En caso de escribir un script, puede necesitar una etiqueta de inicio
    #!/bin/bash (puede variar según donde se encuentre el interpretador bash)
  • No se requiere terminar las sentencias con ningún carácter (se puede usar punto y coma para evitar problemas), salvo que se quieran incluir dos en la misma línea, en tal caso se separan con punto y coma
  • No se requiere indentación
  • Cuando se quiere modificar el output (salida) de un comando con otro comando, se usa | entre los comandos
  • Comentarios empiezan con # (uno por línea)
  • Los scripts necesitan tener permiso de ejecución (+x)

4. Variables

  • Se inician directamente, no se declaran
  • x=5
  • y=Hola
  • y="Hola"
  • z="Hola Mundo"
  • No se admiten espacios entre el símbolo =

5. Argumentos

  • Se indican al iniciar el script, después del nombre
  • nombrescript arg1 arg2
  • Dentro del script, se indican con $1, $2, etc.
  • echo "El primer argumento es $1"
  • echo $#: Muestra el número de argumentos
  • Para poder usar opciones (-e file):
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
    -i|--input)
    INPUT="$2"
    shift # past argument
    shift # past value
    ;;
    -o|--output)
    OUTPUT="$2"
    shift # past argument
    shift # past value
    ;;
    -c|--codec)
    CODEC="$2"
    shift # past argument
    shift # past value
    ;;
        -b|--bitrate)
    BITRATE="$2"
    shift # past argument
    shift # past value
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift # past argument
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

6. Imprimir texto - concatenación

  • echo "Hola Mundo"
  • echo "Hola $x"
  • echo "Hola ${x}"
  • echo "Contenido: `cat archivo.txt`"
  • Añade nueva línea automáticamente, salvo dentro del comando
    • echo "Hola\nMundo": No funciona
    • printf "Hola\nMundo": Funciona

7. Arrays

  • Engloban varios valores en la misma variable
  • x=(2 5 8)
  • y=(Jose Ricardo "Jose Antonio")
  • Índices empiezan en cero
    • echo ${y[1]} => Ricardo
  • Añadir elemento
    • x[3]=10
  • Mostrar número elementos de un array
    • echo ${#x[@]}

8. Operadores

  • Aritméticos
    + - * / % **
  • Booleanos
    • Para strings
      =
      ==
      !=
      -z $a ($a vacía)
    • Para números
      -eq (igual que)
      -gt (mayor que)
      -ge (mayor o igual que)
      -lt (menor que)
      -le (menor o igual que)
      -ne (no es igual que)
      
    • Otros
      &&
      ||
      

9. Condicionales

  • If
    if [ $x -eq 5 ]
    then echo "$x es igual a 5"
    fi
    if [ $y == "Hola" ]; then
    echo $y
    fi
    
    • Se requieren espacios en cada parte de la condición del if
  • Elif y Else
    if [ $y -lt 6 ]
    then echo "ok"
    elif [ $y -lt 10 ]
    then echo "not bad"
    else
    echo "wrong"
    fi
  • Case
    case $x in
    1) echo "x no es igual a 1";
    2) echo "Bien, x es igual a 2";
    esac
    

10. Bucles

  • For
    for x in array
       do echo $x
       done
    for i in {1..250};
    do cp origen/frame_`echo $i`.png ./salida/carpeta_`echo $i`/frame.png;
    done
    
  • While
    i=5
    while [$i -gt 0]
    do echo $i
    i=$(($i - 1))
    done