<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Tech de Gamuza</title>
	<link>https://tech.gamuza.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://tech.gamuza.fr/spip.php?id_mot=17&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>R&#233;capitulatif sur les tests en bash...</title>
		<link>https://tech.gamuza.fr/recapitulatif-sur-les-tests-en-bash.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/recapitulatif-sur-les-tests-en-bash.html</guid>
		<dc:date>2015-11-02T21:14:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Christophe, clem</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>Linux</dc:subject>
		<dc:subject>r&#233;f&#233;rences</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;R&#233;f&#233;rence&lt;/strong&gt; : petit r&#233;sum&#233; de la syntaxe des test en bash&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-linux-+.html" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-references-+.html" rel="tag"&gt;r&#233;f&#233;rences&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Ecrire des scripts bash est un sport de combat pour le codeur peu aguerri dans ce langage complexe et susceptible...&lt;br class='autobr' /&gt;
Un petit r&#233;sum&#233; des diff&#233;rentes possibilit&#233;s de test sur des valeurs arithm&#233;tiques ou des cha&#238;nes de caract&#232;res (par ex dans une instruction &#034;if&#034;) et des erreurs &#224; &#233;viter !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Une seule condition &#224; tester :&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;cas 1)&lt;/strong&gt; tests avec op&#233;rateur &lt;strong&gt;unaire&lt;/strong&gt; : &lt;strong&gt;=&lt;/strong&gt; ou &lt;strong&gt;-eq&lt;/strong&gt;, &lt;strong&gt; !=&lt;/strong&gt; ou &lt;strong&gt;-ne&lt;/strong&gt;, &lt;strong&gt;&gt;&lt;/strong&gt; ou &lt;strong&gt;-gt&lt;/strong&gt;, &lt;strong&gt;&lt;&lt;/strong&gt; ou &lt;strong&gt;-lt&lt;/strong&gt; )&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ $var = 1 ] # OK if [ $var -gt 0 ] # OK if [$var &gt; 0] # Erreur il faut un espace apr&#232;s [ et avant ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tests avec &lt;strong&gt;variables d&#233;finies avant&lt;/strong&gt; ou non :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var=1 # d&#233;finition de $var, $nonvar n'est pas d&#233;finie if [ $var = truc ] # OK ($var d&#233;finie auparavant) if [ $nonvar = machin ] # erreur: $nonvar &#233;tant ind&#233;finie, le test revient &#224;: if [ = 1 ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;2 options pour &#233;viter l'erreur lorsque l'on ne sait pas si la variable a &#233;t&#233; d&#233;finie :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ &#034;$nonvar&#034; = 1 ] # OK: protection de la variable par &#034; &#034; if [[ $nonvar = 1 ]] # OK &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La construction&lt;strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[[ ]]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/strong&gt; est la commande &#233;tendue de [ ] dans Bash.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cas 2)&lt;/strong&gt; tests avec double op&#233;rateurs : &lt;strong&gt;==&lt;/strong&gt;, &lt;strong&gt; !==&lt;/strong&gt;, &lt;strong&gt; &gt;=&lt;/strong&gt;, &lt;strong&gt;&lt;=&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (( $var == 1 )) # OK if (( $var &lt;= 1 )) # OK if (( $var = 1 )) # erreur: = est utilis&#233; comme op&#233;rateur d'affectation avec (( )) if (( $var -gt 1 )) # erreur: op&#233;rateurs -gt, -lt... non disponibles avec (( )) if [ $var &gt;= 0 ] # erreur: double parenth&#232;se obligatoire avec ces op&#233;rateurs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La construction &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(( ))&lt;/code&gt;&lt;/strong&gt; &#233;value une expression arithm&#233;tique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cas 3)&lt;/strong&gt; tests sp&#233;cifiques des &lt;strong&gt;cha&#238;nes de caract&#232;res&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ -n &#034;$var&#034; ] # la cha&#238;ne $var n'est pas de longueur nulle if [ -z &#034;$var&#034; ] # la cha&#238;ne $var est de longueur nulle (est donc '')&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;Test deux conditions&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ $var = 0 -o $var = 1 ] # OK (-o : condition OU) if [ $var &gt; &#034;0&#034; -a $var = &#034;1&#034; ] # OK (-a : condition AND)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Variables d&#233;finies ou non :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var=oui # $var est d&#233;finie, $nonvar ne l'est pas if [ $var = non -o $var = n ] # OK if [ $nonvar = non -a $var = n ] # erreur: $nonvar pas d&#233;finie if [ &#034;$nonvar&#034; = &#034;non&#034; -o &#034;$var&#034; = &#034;n&#034; ] # OK if [[ $nonvar= &#034;non&#034; -o $var= &#034;n&#034; ]] # erreur&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans le cas d'un test double, la protection des variable par &#034; &#034; est la seule option pour &#233;viter les erreurs de variables non d&#233;finies.&lt;/p&gt;
&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;Tests sur les objets du syst&#232;me de fichiers&lt;/h2&gt;
&lt;p&gt;Les op&#233;rateurs de tests disponibles sont, pour les les objets du syst&#232;me de fichiers :&lt;br class='autobr' /&gt;
&lt;strong&gt;exemples de code :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ -e $FILE ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#034;si $FILE est un fichier&#034;&lt;br class='autobr' /&gt;
&lt;br style=&#034;clear: both;&#034;/&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ ! -d mon_rep ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#034;si le r&#233;pertoire mon_rep n'existe pas&#034;&lt;br class='autobr' /&gt;
&lt;br style=&#034;clear: both;&#034;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Liste des tests :&lt;/strong&gt;&lt;/p&gt;
&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id9e76_c0'&gt; Test &lt;/th&gt;&lt;th id='id9e76_c1'&gt; Descriptif &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-e&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE &lt;strong&gt;existe&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-s&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE &lt;strong&gt;existe et si sa taille est sup&#233;rieure &#224; z&#233;ro&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-f&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-r&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier avec la permission (read)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-w&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier avec la permission (write)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-x&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier avec la permission (execute)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-d&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un r&#233;pertoire&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-L&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un lien symbolique&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-O&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si on est le &lt;strong&gt;owner&lt;/strong&gt; de $FILE&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-G&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si on a le m&#234;me &lt;strong&gt;groupe&lt;/strong&gt; que $FILE&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-N&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si le fichier a &#233;t&#233; modifi&#233; depuis sa derni&#232;re ouverture&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;f1 -nt f2&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;le fichier f1 est plus r&#233;cent que f2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;f1 -ot f2&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;le fichier f1 est plus vieux que f2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;Tests d'appartenance &#224; une liste (=array une dimension)&lt;/h2&gt;
&lt;p&gt;Bien que &#231;a ne soit que peu utilis&#233; en bash, il est possible de cr&#233;er des tableaux &#224; une dimension (= liste) et de tester si une variable appartient &#224; une liste.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# creation de la liste (&#233;l&#233;ments s&#233;par&#233;s par un espace) ma_liste=(toto titi tata) ma_variable=tata # test d'appartenance de $variable &#224; la liste (ou pas!) if [[ &#034; ${ma_liste[@]} &#034; =~ &#034; ${ma_variable} &#034; ]]; then # instructions &#224; &#233;xecuter si $ma_variable appartient &#224; la liste fi if [[ ! &#034; ${ma_liste[@]} &#034; =~ &#034; ${ma_variable} &#034; ]]; then # instructions &#224; &#233;xecuter si $ma_variable n'appartient pas &#224; la liste fi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;R&#233;f&#233;rences :&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; man test : &lt;a href=&#034;http://ss64.com/bash/test.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://ss64.com/bash/test.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; la r&#233;f&#233;rence de base : &lt;a href=&#034;https://fr.wikibooks.org/wiki/Programmation_Bash/Tests&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://fr.wikibooks.org/wiki/Programmation_Bash/Tests&lt;/a&gt;&lt;/li&gt;&lt;li&gt; pour aller plus loin : &lt;a href=&#034;http://abs.traduc.org/abs-5.0-fr/ch07.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://abs.traduc.org/abs-5.0-fr/ch07.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; r&#233;sum&#233; des diff&#233;rents op&#233;rateurs de tests (arithm&#233;tiques, cha&#238;nes de caract&#232;res, syst&#232;me de fichiers et dossiers) : &lt;a href=&#034;http://techietent.blogspot.fr/2013/03/bash-test-operators.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://techietent.blogspot.fr/2013/03/bash-test-operators.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; la bidouille pour tester l'appartenance &#224; une liste sans it&#233;rer dessus : &lt;a href=&#034;https://stackoverflow.com/a/15394738&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://stackoverflow.com/a/15394738&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<pre>Erreur d’exécution plugins/spipr-dist/inclure/rss-item.html</pre>
<pre>Erreur d’exécution plugins/spipr-dist/inclure/rss-item.html</pre>



</channel>

</rss>
