Sistema Operatiu Linux

Unitat: programació d'scripts

Tema: estructures de control de flux d'execució del shell


Estructura for

Sintaxi:

   for variable in llista_de_valors
   do
     comandaments
   done
 

Normalment la llista de valors és el resultat de l'execució d'algún comandament. Per exemple:

for i in `who | sed 's/ .*//'`
 do
  echo $i
  echo ================
 done

La instrucció who filtrada per sed retorna els noms dels usuaris connectats, que es pren com a llista de valors per la variable d'entorn. El bucle escriu els noms dels usuaris connectats separats per una línia de signes "=".


Estructura if

Sintaxi:

if [ condició ]; then
   comandaments
else
   comandaments
fi

La condició ha d'anar entre claudàtors [ ] i separat d'ells per espais en blanc. Podem utilitzar els següents operadors lògics:

 
operador lògic significat
-ne diferent de
-gt mès gran que (>)
-ge mès gran o igual que (>=)
-lt mès petit que (<)
-le mès petit o igual que (<=)
-eq igual (=)

Exemple:

if [ $* -ne 3 ]; then
   echo 1>&2 calen 3 parametres
   exit 127
fi

Estructura While

Sintaxi:

 
while [ condició ]; do
   comandaments
done

Exemple: el següent script accepta un número indeterminat de noms de directoris com a paràmetres i llista el contingut de tots ells:

#mostra el contingut dels directoris especificats
while [ $# -ge 1 ]; do ls $1 shift #elimina parametre actual done

Estructura Case

Sintaxi:

case valor in
  conjunt1)
	comandaments1
    ;;

  conjunt2)
	comandaments2

    ;;
	(...)
  *)
	comandaments

    ;;
esac

Exemple:

#calcula els anys de diferencia entre el paràmetre i l'any 1980
  #el parametre pot estar en format aa o bé aaaa
  #
  case "$1" in
  0[0-9])
  ANY=20${1}
  ;;
  200[0-9])
  ANY=$1
  ;;
  [8-9][0-9])
  ANY=19${1}
  ;;
  19[8-9][0-9])
  ANY=$1
  ;;
  *)
  echo 1>&2 any fora de rang
  exit 127
  ;;
  esac
  ANYS=`expr $ANY - 1980`
  echo han passat $ANYS des de 1980