<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.livois.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Bash</id>
	<title>Bash - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.livois.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Bash"/>
	<link rel="alternate" type="text/html" href="https://wiki.livois.com/mediawiki/index.php?title=Bash&amp;action=history"/>
	<updated>2026-05-25T04:48:28Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.livois.com/mediawiki/index.php?title=Bash&amp;diff=209&amp;oldid=prev</id>
		<title>Christophe : 1 version</title>
		<link rel="alternate" type="text/html" href="https://wiki.livois.com/mediawiki/index.php?title=Bash&amp;diff=209&amp;oldid=prev"/>
		<updated>2012-05-28T20:31:59Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 28 mai 2012 à 20:31&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Christophe</name></author>
	</entry>
	<entry>
		<id>https://wiki.livois.com/mediawiki/index.php?title=Bash&amp;diff=208&amp;oldid=prev</id>
		<title>Christophe : /* awk */</title>
		<link rel="alternate" type="text/html" href="https://wiki.livois.com/mediawiki/index.php?title=Bash&amp;diff=208&amp;oldid=prev"/>
		<updated>2012-02-10T06:58:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:prog]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/bash/manual/bashref.html&lt;br /&gt;
* http://abs.traduc.org/abs-3.0-fr/&lt;br /&gt;
* http://cli.asyd.net/home/&lt;br /&gt;
 sh -x script liste toutes les étapes du script&lt;br /&gt;
&lt;br /&gt;
==Expression &amp;quot;rationnelles&amp;quot;==&lt;br /&gt;
 .  1 caractère quelconque&lt;br /&gt;
 *  0+ caractère de la regexp qui précède &lt;br /&gt;
 [] regroupe un ensemble da caractères&lt;br /&gt;
 /  caractère d&amp;#039;échapemment des caractères spéciaux&lt;br /&gt;
 ^  correspond à une ligne si la chaîne est située au début&lt;br /&gt;
 $  en fin de ligne &lt;br /&gt;
 {} nombre d&amp;#039;occurences &lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
Affectation directe : variable=valeur&lt;br /&gt;
&lt;br /&gt;
read : prend la ligne suivante de l&amp;#039;entrée et l&amp;#039;assigne à une variable&lt;br /&gt;
&lt;br /&gt;
Substitution de la sortie d&amp;#039;une commande : variable=`commande`&lt;br /&gt;
&lt;br /&gt;
Paramètres de la ligne de commande ($0, $1, $2, ...)&lt;br /&gt;
&lt;br /&gt;
$# = nombre de paramètres (naturellement modifié par shift)&lt;br /&gt;
&lt;br /&gt;
$* = tous les paramètres (utilisé avec shift permet de récupérer la fin)&lt;br /&gt;
&lt;br /&gt;
$?Le statut de sortie d&amp;#039;une commande est représenté par la variable $?&lt;br /&gt;
&lt;br /&gt;
$$ est le n° de processus&lt;br /&gt;
&lt;br /&gt;
local a; définit une variable locale a&lt;br /&gt;
&lt;br /&gt;
${variable:-defaut} équivaut à variable si elle est définie, défaut sinon.&lt;br /&gt;
&lt;br /&gt;
$(date +%Y%m%d)&lt;br /&gt;
&lt;br /&gt;
1 fd pour stdout&lt;br /&gt;
&lt;br /&gt;
2 fd pour stderr&lt;br /&gt;
&lt;br /&gt;
grep da * 1&amp;gt;&amp;amp;2 stdout -&amp;gt; stderr&lt;br /&gt;
&lt;br /&gt;
${variable#motif} est remplacé par la valeur de la variable de laquelle on ôte la chaîne initiale la plus courte qui corresponde au motif.&lt;br /&gt;
&lt;br /&gt;
${variable##motif} sert à éliminer le plus long préfixe correspondant au motif transmis&lt;br /&gt;
&lt;br /&gt;
${#string} : longueur de la variable string&lt;br /&gt;
&lt;br /&gt;
===Tableaux===&lt;br /&gt;
Arrive avec bash2&lt;br /&gt;
&lt;br /&gt;
${tableau[$n]} #c&amp;#039;est la valeur n du tableau&lt;br /&gt;
&lt;br /&gt;
${tableau[*]} et ${table[@]} = liste de ts les membres du tableau&lt;br /&gt;
&lt;br /&gt;
${#tableau[$n]} = longueur de la valeur n&lt;br /&gt;
&lt;br /&gt;
${#tableau[@]}= nombre de membre&lt;br /&gt;
&lt;br /&gt;
==Structures de contrôle==&lt;br /&gt;
&lt;br /&gt;
===case===&lt;br /&gt;
 case $var in&lt;br /&gt;
 var1) commande1;&lt;br /&gt;
       commmande2;;&lt;br /&gt;
 var2) commande;;&lt;br /&gt;
 *)    commande;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
===if ===&lt;br /&gt;
 if [ ];then&lt;br /&gt;
 else&lt;br /&gt;
 elif [ ];then&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 if [ ] ; then     =&amp;gt; non&lt;br /&gt;
 &lt;br /&gt;
 if [ 0 ] ; then   =&amp;gt; oui&lt;br /&gt;
&lt;br /&gt;
Pour le script suivant $DEBUG=1 =&amp;gt; debug $DEBUG=0 =&amp;gt; no_debug&lt;br /&gt;
&lt;br /&gt;
 if [ &amp;quot;$DEBUG&amp;quot; = &amp;quot;1&amp;quot; ] ; then&lt;br /&gt;
  echo &amp;quot;debug&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
  echo &amp;quot;no_debug&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
===for===&lt;br /&gt;
 for i in quelque*chose ;do&lt;br /&gt;
  prog($i)&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 for i in $( ls ) ;do&lt;br /&gt;
 &lt;br /&gt;
 for i in `seq 1 10`;&lt;br /&gt;
&lt;br /&gt;
===while===&lt;br /&gt;
 while&lt;br /&gt;
  do&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 while [ $counter -lt 10 ]; do&lt;br /&gt;
  let counter=counter+1&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
===test===&lt;br /&gt;
 # fichiers (OK si)		valeurs numériques (à mettre entre valeurs)&lt;br /&gt;
 -f existe + ordinaire		-e   =&lt;br /&gt;
 -d répertoire			-ne !=&lt;br /&gt;
 -r existe + lisible		-ge &amp;gt;=&lt;br /&gt;
 -s existe + non vide		-gt &amp;gt;&lt;br /&gt;
 -w existe + modifiable		-le &amp;lt;=&lt;br /&gt;
 -x existe + exécutable		-lt &amp;lt;&lt;br /&gt;
&lt;br /&gt;
 [ -z ${home_size[$uid]} ] &amp;amp;&amp;amp; home_size[$uid]=0&lt;br /&gt;
Si la valeur n&amp;#039;existe pas, elle est mise à 0.&lt;br /&gt;
&lt;br /&gt;
==fonctions==&lt;br /&gt;
&lt;br /&gt;
 function nom_fonction&lt;br /&gt;
 {&lt;br /&gt;
   code&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==inclusion de fichier==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
. nom_fichier&lt;br /&gt;
&lt;br /&gt;
==commandes==&lt;br /&gt;
===read FN LN===&lt;br /&gt;
 echo $FN $LN&lt;br /&gt;
&lt;br /&gt;
===sed===&lt;br /&gt;
http://sed.sourceforge.net/sed1line.txt&lt;br /&gt;
&lt;br /&gt;
$&amp;gt;sed -i &amp;#039;s/to_be_replaced/replaced/g&amp;#039; /tmp/dummy # -i permet d&amp;#039;effectuer le changement ds le fichier, sinon l&amp;#039;affiche&lt;br /&gt;
&lt;br /&gt;
$&amp;gt;sed s/&amp;#039;\\&amp;#039;/&amp;#039;\/&amp;#039;/g fichier.txt pour remplacer les \\ par des //&lt;br /&gt;
&lt;br /&gt;
cat /etc/mysusar/hosts/home.conf | sed -n -e &amp;#039;s/^hostname \(.*\)/\1/p&amp;#039;&lt;br /&gt;
&lt;br /&gt;
sed &amp;#039;/DPT=138/d&amp;#039; /var/log/gw/2005/02/26/firewall.log supprime les lignes avec le port 138&lt;br /&gt;
&lt;br /&gt;
sed &amp;#039;/DPT=138/!d&amp;#039; /var/log/gw/2005/02/26/firewall.log supprime les lignes ss le port 138&lt;br /&gt;
&lt;br /&gt;
===awk===&lt;br /&gt;
(cf paragraphe correspondant à la fin)&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
http://pegasus.rutgers.edu/~elflord/unix/grep.html&lt;br /&gt;
&lt;br /&gt;
 grep &amp;quot;test de grep&amp;quot; /tmp/dummy -c donne le nombre d&amp;#039;occurences&lt;br /&gt;
 grep -v &amp;quot;xxxx&amp;quot; /tmp/dummmy affiche les lignes qui ne contiennent pas xxxxxx&lt;br /&gt;
 grep &amp;quot;alpha\|beta&amp;quot; fichier.text (recherche alpha ou beta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===getopts===&lt;br /&gt;
 getopts optstring name [args]&lt;br /&gt;
 while getopts &amp;quot;abc:d:&amp;quot;;do&lt;br /&gt;
  case $option in &lt;br /&gt;
    a) &lt;br /&gt;
    b)&lt;br /&gt;
    c) var=&amp;quot;$OPTARG&amp;quot;;;&lt;br /&gt;
  esac&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
===cut===&lt;br /&gt;
 mail_size[$uid]=$(echo $i | cut -d &amp;quot;:&amp;quot; -f 2)&lt;br /&gt;
 &lt;br /&gt;
===wc===&lt;br /&gt;
 (compte lignes, mots et octets)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===tr===&lt;br /&gt;
 echo \&amp;quot;test\&amp;quot; | tr -d &amp;#039;&amp;quot;&amp;#039; pour supprimer les &amp;quot;&lt;br /&gt;
&lt;br /&gt;
===sort===&lt;br /&gt;
 sort +4 -r -n -t &amp;quot;:&amp;quot; /tmp/balsize2.$$&lt;br /&gt;
 ps -e -o comm,rss,bsdtime | awk &amp;#039;{print $1&amp;quot;:&amp;quot;$2&amp;quot;:&amp;quot;$3}&amp;#039; | awk -F &amp;quot;:&amp;quot; &amp;#039;{print $1&amp;quot;:&amp;quot;$2&amp;quot;:&amp;quot;$3*60+$4}&amp;#039; | sort -k 3 -r -n -t &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===bc===&lt;br /&gt;
 (permet des calculs mathématiques)&lt;br /&gt;
&lt;br /&gt;
 bc -l permet de faire des calculs avec des réels&lt;br /&gt;
 scale précise le nombre de décimales&lt;br /&gt;
 echo &amp;quot;scale=2;`commande`*3&amp;quot; | bc -l&lt;br /&gt;
&lt;br /&gt;
===expr===&lt;br /&gt;
(calculs simple)&lt;br /&gt;
&lt;br /&gt;
 `expr $val1 + $val2`&lt;br /&gt;
 voir aussi $(( ))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===tput===&lt;br /&gt;
 (initialise un terminal ou requête dans une base terminfo)&lt;br /&gt;
&lt;br /&gt;
===wc===&lt;br /&gt;
 donne le nombre de mots, lignes et caractères dans un fichier&lt;br /&gt;
&lt;br /&gt;
===args===&lt;br /&gt;
transforme des données arrivant dans un flux du type pipeline en information sur une ligne de commande&lt;br /&gt;
 #&amp;gt;find . -name &amp;#039;*.c&amp;#039; | xargs grep ipv6_getsockopt&lt;br /&gt;
copier le fichier zina_category dans tous les repertoires&lt;br /&gt;
 #&amp;gt;find -type d -print0 | xargs -0 -i -t cp zina_category {}    &lt;br /&gt;
&lt;br /&gt;
===tee===&lt;br /&gt;
lit les données sur son entrée standard et les copies sur sa sortie standard, tout en envoyant une copie supplémentaire dans tous les fichiers dont le nom lui est fourni en argument.&lt;br /&gt;
&lt;br /&gt;
permet de sonder le passage de données dans un pipeline.&lt;br /&gt;
&lt;br /&gt;
 #&amp;gt;commmande1 &amp;gt; tee /dev/tty | commande2 &amp;gt; capture&lt;br /&gt;
&lt;br /&gt;
===shift===&lt;br /&gt;
===trap &amp;amp; kill===&lt;br /&gt;
réception et envoi de signaux&lt;br /&gt;
&lt;br /&gt;
===awk===&lt;br /&gt;
script constitué de lignes de la forme motif { action }&lt;br /&gt;
motif =&amp;gt; expression rationnelle ex: $1~/tcp/ (tcp ds le 1er champ de la ligne)&lt;br /&gt;
action =&amp;gt; print,printf&lt;br /&gt;
&lt;br /&gt;
Tableaux&lt;br /&gt;
tableau associatif t[&amp;quot;un&amp;quot;]=1 - fonction delete permet de supprimer élément du tableau&lt;br /&gt;
tableau multidimensionnel =&amp;gt; astuce SUBSEP t[i,j]=3&lt;br /&gt;
&lt;br /&gt;
Structures de contrôle&lt;br /&gt;
if (condition) {&lt;br /&gt;
} else if () {&lt;br /&gt;
} else {}&lt;br /&gt;
&lt;br /&gt;
while (condition){}&lt;br /&gt;
for (i=0;i&amp;lt;max;i++){}&lt;br /&gt;
$&amp;gt;awk &amp;#039;/test/ {print}&amp;#039; /tmp/dummy quand awk trouve &amp;#039;test&amp;#039; il exécute &amp;#039;print&amp;#039;&lt;br /&gt;
$&amp;gt;awk &amp;#039;/test/ {i=i+1} END {print i}&amp;#039; /tmp/dummy&lt;br /&gt;
$&amp;gt;ls -al $file | awk &amp;#039;{print $3}&amp;#039; # donne les utilisateurs d&amp;#039;une liste de fichiers&lt;br /&gt;
exemple avec awk -F délimiteur (ici :)&lt;br /&gt;
for i in $(cat /etc/passwd | awk -F : &amp;#039;{print $1 &amp;quot;:&amp;quot; $3}&amp;#039;);do&lt;br /&gt;
 uid=$(echo $i | cut -d &amp;quot;:&amp;quot; -f 2)&lt;br /&gt;
  ...&lt;br /&gt;
  done&lt;br /&gt;
  Pour récupérer le uptime d&amp;#039;une machine via snmp&lt;br /&gt;
  $&amp;gt;snmpget -v 1 -Oqn -c public 127.0.0.1 .1.3.6.1.2.1.25.1.1.0 | awk &amp;#039;{print  $2};&amp;#039; | awk -F &amp;quot;:&amp;quot; &amp;#039;{printf &amp;quot;%.2f&amp;quot;,$1+$2/24+$3/1440 };&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=Exemples=&lt;br /&gt;
==Vérification du montage==&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
mount /mnt/DNS-320&lt;br /&gt;
&lt;br /&gt;
res=&amp;quot;off&amp;quot;;&lt;br /&gt;
res=`mount | grep DNS-320  | cut -d &amp;quot; &amp;quot; -f 2`;&lt;br /&gt;
if [ &amp;quot;$res&amp;quot; = &amp;quot;on&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;DNS-320 ON&amp;quot;&lt;br /&gt;
  rsync -rvv --size-only /home/chris/Musique/* /mnt/DNS-320/Musique/ | grep -v uptodate&lt;br /&gt;
  rsync -rvv --size-only /home/chris/Videos/films/* /mnt/DNS-320/films/ | grep -v uptodate&lt;br /&gt;
  rsync -rvv --size-only /home/chris/Photos/* /mnt/DNS-320/Photos/ | grep -v uptodate&lt;br /&gt;
  umount /mnt/DNS-320 &lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;DNS-320 OFF&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
{{Copy|2007-2012|Christophe de Livois|FDL}}&lt;/div&gt;</summary>
		<author><name>Christophe</name></author>
	</entry>
</feed>