Bash est un langage de shell de linux.
Il est installé par défaut sur Ubuntu.
====== UI ======
* [[http://eriwen.com/bash/effective-shorthand/|Utiliser efficacement bash]]
====== Cheat Sheet ======
* [[bash_cheatsheet|Bash parameters & history cheatsheet]]
===== 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: [[http://www.cyberciti.biz/faq/bash-for-loop/|For loop examples]]
===== Tests =====
[ $var1 = $var2 ]
Strings:
[ "$var1" = "$var2" ]
==== Ressources doc ====
* [[http://www.ibm.com/developerworks/library/l-bash-test.html]]
* [[http://fr.wikibooks.org/wiki/Programmation_Bash/Tests]]
* [[http://abs.traduc.org/abs-5.0-fr/ch07.html]]
* [[http://tldp.org/LDP/abs/html/comparison-ops.html|Opérateurs de comparaison]]
===== 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: [[http://www.arachnoid.com/linux/shell_programming.html|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 :
* les [[shell:alias|alias]]
* les [[shell:export|exports]]
* l'[[shell:inputrc|inputrc]]
* l'[[shell:history|historique]]
===== 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 =====
[[http://doc.ubuntu-fr.org/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 $@
* [[http://www.ibm.com/developerworks/library/l-bash-parameters.html?ca=drs-]]
* [[http://unix.sjcc.edu/cis157/BashParameters.htm]]
* [[http://www.c-sait.net/cours/scripts.php]]
* [[http://www.iut-orsay.fr/dptinfo/Pedagogie/Roger.Astier/app_unix/analOptions.html]]
===== Ressources doc =====
* [[http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP2003/tp03.html]]
* [[http://www.commentcamarche.net/faq/sujet-5444-bash-les-parametres]]
* [[http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/shell-programmation.html]]
* [[http://www.museum.state.il.us/ismdepts/library/linuxguides/abs-guide/]]
* [[http://www.arachnoid.com/linux/shell_programming.html]]
===== Mes scripts =====
* [[Aruba scripts]]
* [[avatar switcher]]
* [[ip_forwarding]]
* [[rhythmbox-load]]
===== Commandes Unix =====
* #Backup a USB Key
# To list partitions: fdisk -l (with root privilegies)
dd if=/dev/sdc1 of=/home/user/usb4go_bak.iso bs=16065b
===== Useful =====
* Convertir les html entities dans les noms de fichier (ex. : ''%20'' en ''_'') : for f in $(ls -1); do mv $f ${f//%20/_} ; done