Table of Contents

Bash est un langage de shell de linux. Il est installé par défaut sur Ubuntu.

UI

Cheat Sheet

Shebang

#!/bin/bash

Commentaire

#

Structures de contrôle

If

  if test; then
    commande
  elif test; then
    commande
  else
    commande
  fi

For

  for i in 1 2 3 5
  do
    commande
  done

Voir: For loop examples

Tests

  [ $var1 = $var2 ]

Strings:

  [ "$var1" = "$var2" ]

Ressources doc

Variables

:!: pas d'espace! :

  var=5 

et non

  var = 5 

ni

  $var=5 

(pas de $ à la déclaration)

NB: le $ est un sigil: un caractère spécial permettant de distinguer une variable au sein d'une chaine de caractère.

x=5
>5
echo 'il y a $x pommes dans mon sac'
>'il y a 5 pommes dans mon sac'

Le sigil est notamment utilisé en bash, PHP et Perl.

Enregistrer le résultat d'une commande dans une variable

x=$(commande)

Pour plus de renseignements sur les opérations sur les strings, les listes, etc: arachnoid

Paramètre

$0 : nom du script
$1…$n : paramètres
$? : retour de la dernière commande
Il en existe d'autre.

Astuces

Everyday shell life

Pour se simplifier la vie :

notify-send

La commande notify-send est intallée dans le paquet libnotify dans les dépôts debian. Elle est super pratique pour notifier des choses à l'utilisateur dans les scripts.

Zenity

Zenity permet de conférer facilement un IHM graphique pour des scripts shell.

Changer la variable $PATH

export PATH=$PATH:~/.bin

Pour ajouter /home/username/.bin par exemple. De cette manière, les scripts stockés dans ~/.bin sont exécutable sans avoir besoin de spécifier de path. Pour conserver cet ajout au PATH de façon permanente, ajouter cette ligne de commande à votre ~/.bash_rc.

Options & getopts

Un petit script d'exemple :

#! /usr/bin/bash
# -*- coding: utf-8 -*-
 
echo $@
while getopts "ab:c" opt; do # a letter followed by a colon means an option expecting an operand
                             # a colon at the beginning means "no warning message"
    case $opt in
        a) a=1;;
        b) b=$OPTARG;; # OPTARG is set to the corresponding operand
        c) c=1;;
        *) echo plop;;
    esac
done
shift $(($OPTIND-1)) # OPTIND is set to the first argument not processed by getopts => command shifts to the first non optionnal arg
echo "a: $a; b: $b; c: $c"
echo $@

Ressources doc

Mes scripts

Commandes Unix

Useful