Saltar ao contido

Bash/Guións

En Galilibros, o Wikibooks en galego.
Bash
← Volver a Executar ficheiros binarios Guións


Os guións (scripts en inglés) son ficheiros de texto que conteñen unha serie de ordes. Ditas ordes execútanse a unha tras da outra nunha consola ao executar o guión. Existen varios xeitos de executar un guión:

  • escribindo en consola a súa ruta completa ─as rutas relativas non valen─,
  • escribindo directamente o nome ─se o guión está nunha das rutas en que o sistema busca executables─ ou
  • precedendo a ruta da orde “bash” ─neste caso pódese utilizar unha ruta relativa─.

A continuación algúns exemplos:

/ruta/ao/guión.sh
./guión.sh # Supoñendo que estea no directorio de traballo actual
guión.sh # Supoñendo que estea nunha das rutas en que o sistema busca executables
bash guión.sh

Normalmente os guións levan por extensión de ficheiro .sh ou .bash.

Parámetros

[editar]

Un guión pode traballar con parámetros, é dicir, na súa chamada pode recibir argumentos e pode traballar con eles.

Os parámetros serán as palabras que se escriban tras a chamada ao guión, separadas da chamada e entre elas por espazos en branco.

Para utilizar os parámetros no guión, só teremos que facer referencia a eles mediante o símbolo do dólar ($) seguido do número correspondente á posición que ocupa o parámetro na chamada ao guión: $1, $2, $3...

Por exemplo, se temos un guión chamado treslinas tal que así:

echo $1
echo $2
echo $3

e o chamamos con $ bash treslinas liña1 liña2 liña3, obteremos:

liña1
liña2
liña3

Variables

[editar]

Ademais das variables establecidas polos argumentos cos que se chama ao guión e mailas variables de ambiente, nun guión pódense crear variables e asignarlles valores para así facilitar a escrita de valores que se repiten ao longo dun guión ou para facilitar o cambio deses valores en todo o guión. Esta é a sintaxe fundamental:

VARIABLE=valor # Establécese un valor para a variable.
...
echo $VARIABLE # Úsase a variable, precedendo o seu identificador do símbolo "$".

Por exemplo, o seguinte guión:

SAUDO="Boas!" # Vai entre comiñas por ser unha cadea de texto,
echo $SAUDO # os valores numéricos para usar en operacións non van entre comiñas.

imprimiría en pantalla:

Boas!

O valor dunha variable, ademais de ser un valor numérico ou unha cadea de texto (coma o exemplo anterior), pode ser o resultado dado por unha orde. Para isto, a sintaxe fundamental sería:

VARIABLE=$(orde)

Por exemplo, o seguinte guión:

SAUDO=$(echo "Boas!")
echo $SAUDO

imprimiría en pantalla:

Boas!

Bucles

[editar]

Nun guión podemos utilizar bucles. Vexamos un exemplo dun bucle for:

for i in {primeironumero..segundonumero}
do
...$i...
...$i...
done

Este bucle executará as ordes contidas entre o do e mailo done para todos os valores comprendidos entre primeironumero e segundonumero, ambos os dous incluídos.

Sentencias condicionais

[editar]

Podemos escribir nos guións sentencias condicionais, de xeito que, segundo se cumpra ou non unha condición, o guión faga unha ou outra cousa. Esta é a sintaxe fundamental das sentencias condicionais:

  if condición
    then ordes # Execútanse se se cumpre a condición
    else ordes # Execútanse se non se cumpre a condición
  fi # Pecha a sentencia de control condicional

Agora vexamos un exemplo real:

if [ "palabra" = "palabra" ]
  then echo "As palabras coinciden."
  else echo "As palabras non coinciden."
fi

Se executamos este guión, aparecerá na consola o texto «As palabras coinciden.». Se cambiamos unha das dúas palabras, poderemos comprobar que o resultado será a mensaxe «As palabras non coinciden.».

Comprobar se unha cadea de texto ten lonxitude

[editar]

Para comprobar se unha cadea de texto ten lonxitude, utilízase -n. Por exemplo, o seguinte guión comproba se existe algún argumento na súa chamada, e imprime unha mensaxe distinta en función diso:

if [ -n "$1" ]
  then echo "Fornecéuselle un argumento ao guión."
  else echo "O guión executouse sen ningún argumento."
fi

Comprobacións sobre ficheiros e directorios

[editar]

Podemos establecer unha condición que verifique a existencia dun ficheiro mediante -a ou -e. Vexamos un exemplo.

if [ -a "$1" ]
  then echo "O ficheiro existe."
  else echo "O ficheiro non existe."
fi

De xeito similar podemos comprobar outras cousas mediante outras opcións:

-d
Comproba se existe e é un directorio.
-f
Comproba se existe e se é un ficheiro regular.
-r
Comproba se existe e se teñen permisos de lectura.

Sentencias condicionais aniñadas

[editar]

As sentencias condicionais en bash pódense aniñar. Véxase o seguinte exemplo:

if [ -n "$1" ]
  then 
    if [ "$1" = "opción" ]
      then echo "Seleccionou a opción."
      else echo "Non se coñece a opción seleccionada."
    fi
  else
    echo "Non introduciu opción algunha."
fi

Comparación de números enteiros

[editar]
Menor que (<)
if [ "$a" -lt "$b" ]

Funcións

[editar]

Para utilizar unha función en Bash, abonda con declarala seguindo a seguinte sintaxe fundamental:

function NomeDaFuncion ()
{
  ...
}

E a continuación no guión pode utilizarse chamándoa coma se se tratase dun executable calquera. Ademais pódenselle pasar argumentos á función, que só traballa con argumentos locais, é dicir, para ela os valores de $1 ou $2 son aqueles con que se lle chame dende o guión, non os globais con que se chama ao guión.

Véxase o seguinte exemplo de uso dunha función nun guión:

function Mensaxe ()
{
  echo $1
  echo -n "Primeiro argumento: "
  echo $2
  echo -n "Segundo argumento: "
  echo $3
}

Mensaxe "A continuación lístanse os dous primeiros argumentos fornecidos ao guión:" $1 $2

Nótese que para evitar problemas ao utilizar guións en Bash con funcións (especialmente como superusuario) cómpre engadir sempre ao principio dos guións a seguinte liña:

#!/bin/bash


Bash
← Volver a Executar ficheiros binarios Guións