Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#26 16-03-2014 12:41:02

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

Ben moi aussi j'essaie d'apprendre en autodidacte et parfois c'est plutôt dur dur, ça m'encourage de savoir que d'autres sont parvenus à des résultats. Merci smile
Je prends un morceau par ci, un morceau par là, et je réunie en fonction de ma machine, donc hasardeusement selon l'installation que je n'ai pas choisie sans connaissance de causes.

Je ne m'étais pas demandée si debian wheezy 7.4 se configurait après installation par rapport de cette question de POSIX dont je n'avais pas idée !

Et bien on dirait que si : Installion.co.uk .

Ce qui ramène peut-être au sujet suivant : est-ce forcément introduire du non-libre que de se conformer aux normes POSIX ?

Ce qui serait bizarre, c'est que le "libre" n'ait pas sa "libre" ? Et encore plus qu'une norme soit non-libre ! Enfin moi, je suis trop débutante pour me faire une idée des conséquences mais est-ce que la norme libre ce ne serait pas BASH ou SH ? (Ce qui y fait penser c'est que man csh et man ksh n'ont pas d'entrée.)

Enfin, si posix est bien du non-libre, est-ce une menace, pour le "libre" que se baser sur la norme posix ?

Merci

Dernière modification par Hypathie (16-03-2014 12:42:03)

Hors ligne

#27 16-03-2014 14:59:30

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

Au contraire, se baser sur posix c'est s'assurer que son script marchera partout smile

C'est comme la norme C ANSI. Si tu fais du C ANSI, ben il passera partout. Si tu fais du C qui utilise des fonctionnalités propres à ton compilateur, alors ton code ne passera bien que là où ton compilateur est porté.

Se conformer à POSIX pour les scripts est une « bonne pratique », mais pas une règle (sachant que bash est presque installé sur toutes les machines.)
Cependant, rester proche d'un standard aide à la lecture pour ceux qui connaissent le standard. Si tu rajoutes des éléments de BASH dedans, alors il faut connaître BASH en plus pour pouvoir lire le code.

De ce point de vue, utiliser une basherie alors qu'une posixerie existe, c'est une vacherie. smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#28 16-03-2014 15:13:45

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

D'accord, j'installe ...   wink

Hors ligne

#29 16-03-2014 18:57:19

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

Là franchement je suis un peu perdu... il semble que ce que j'ai appris n'est pas tout à fait correct et que je fais tout et n'importe quoi avec l'écriture de mes scripts. sad
Si je comprends bien je peux écrire des scripts Bash mais en fait une partie du script ne correspondrait pas à la norme POSIX ???
Comme par exemple lors des test il faudrait utilisé if [ ... ] et pas if [[ ... ]] hmm

Je sens que je vais devoir repartir à zéro et tout réapprendre... sad

neutral Slyfox

Dernière modification par Slyfox (16-03-2014 18:58:22)

Hors ligne

#30 16-03-2014 19:18:52

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

Ben, l'important est de comprendre la différence entre « faire un script bash » et « faire un script shell ».
bash, c'est le shell interactif le plus répandu au monde (si on oublie cmd.exe).

En revanche il est lent et complexe (et donc potentiellement buggué), bien plus que dash, le shell minimaliste utilisé par défaut par Debian.

Si tu écris un script shell qui utilise une syntaxe propre à bash comme [[ ]], ce script ne sera pas portable, il ne fonctionnera que sous bash.
Si tu écris un script shell qui respecte la spécification POSIX, ce script sera portable et fonctionnera sur tous les shells l'implémentant (bash, dash, zsh, etc.).

Un script shell qui ne nécessite pas d'instructions propre à bash pour fonctionner peut être écrit de manière à respecter POSIX, et à être portable et exécutable par un shell minimaliste tel que dash (d'où gain de temps à l'exécution, gain de stablilté, meilleure prédictibilité du comportement, etc.)

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#31 16-03-2014 20:11:31

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

@ captnfab

Merci pour cet éclaircissement ! smile
Donc je vais devoir revoir en partie ma façon d'écrire en Bash mais cette fois en respectant la dite norme POSIX ! big_smile

Je me répète que sur le net on trouve tout est n'importe de quoi !!! pfff tongue

smile Slyfox

Hors ligne

#32 22-03-2014 14:22:34

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : [résolu]shell : test pour fichier vide/non vide : IF et option -s

Bonjour Slyfox,
tout cela pourrait t'intéresser :


1. Fonctionnalités courantes

   Les fonctionnalités suivantes sont standard dans tout Shell. Notez que les
   commandes stop, suspend, jobs, bg et fg sont disponibles seulement sur les
   systèmes qui permettent le contrôle des travaux (job control).

   Tableau A.1. Fonctionnalités courantes du Shell

   +------------------------------------------------------------------------+
   | Commande | sens                                                        |
   |----------+-------------------------------------------------------------|
   | >        | Redirige la sortie                                          |
   |----------+-------------------------------------------------------------|
   | >>       | Ajoute en fin de fichier                                    |
   |----------+-------------------------------------------------------------|
   | <        | Redirige l'entrée                                           |
   |----------+-------------------------------------------------------------|
   | <<       | Document en ligne (redirige l'entrée)                       |
   |----------+-------------------------------------------------------------|
   | |        | Sortie par un tube                                          |
   |----------+-------------------------------------------------------------|
   | &        | Place le travail en tâche de fond.                          |
   |----------+-------------------------------------------------------------|
   | ;        | Sépare des commandes sur une même ligne                     |
   |----------+-------------------------------------------------------------|
   | *        | Correspond à n'importe quel(s) caractère(s) dans un nom de  |
   |          | fichier                                                     |
   |----------+-------------------------------------------------------------|
   | ?        | Correspond à n'importe quel caractère unique dans un nom de |
   |          | fichier                                                     |
   |----------+-------------------------------------------------------------|
   | [ ]      | Correspond à n'importe quels caractères inclus              |
   |----------+-------------------------------------------------------------|
   | ( )      | S'exécute dans un sous-Shell                                |
   |----------+-------------------------------------------------------------|
   | ` `      | Substitue le contenu par le résultat de la commande incluse |
   |----------+-------------------------------------------------------------|
   | " "      | Guillemets ou citation partielle (permet l'expansion de     |
   |          | variables et de commandes)                                  |
   |----------+-------------------------------------------------------------|
   | ' '      | Apostrophes ou citation totale (pas d'expansion)            |
   |----------+-------------------------------------------------------------|
   | \        | Citation du caractère qui suit (NdT : emploi du caractère   |
   |          | dans son sens littéral->échappement)                        |
   |----------+-------------------------------------------------------------|
   | $var     | Emploie la valeur de la variable                            |
   |----------+-------------------------------------------------------------|
   | $$       | Identifiant du processus                                    |
   |----------+-------------------------------------------------------------|
   | $0       | Nom de la Commande                                          |
   |----------+-------------------------------------------------------------|
   | $n       | Nième argument (N entre 0 et 9)                             |
   |----------+-------------------------------------------------------------|
   | #        | Commence un commentaire                                     |
   |----------+-------------------------------------------------------------|
   | bg       | Exécution en tâche de fond                                  |
   |----------+-------------------------------------------------------------|
   | break    | Sortir d'une instruction de boucle                          |
   |----------+-------------------------------------------------------------|
   | cd       | Change de répertoire                                        |
   |----------+-------------------------------------------------------------|
   | continue | Passe à l'itération suivante d'une boucle dans un programme |
   |----------+-------------------------------------------------------------|
   | echo     | Affiche le résultat                                         |
   |----------+-------------------------------------------------------------|
   | eval     | Evalue les arguments                                        |
   |----------+-------------------------------------------------------------|
   | exec     | Exécute un nouveau processus Shell                          |
   |----------+-------------------------------------------------------------|
   | fg       | Exécution dans la session en cours                          |
   |----------+-------------------------------------------------------------|
   | jobs     | Affiche les travaux en cours                                |
   |----------+-------------------------------------------------------------|
   | kill     | Termine un travail en cours                                 |
   |----------+-------------------------------------------------------------|
   | newgrp   | Change de groupe l'utilisateur                              |
   |----------+-------------------------------------------------------------|
   | shift    | Décale les paramètres positionnels                          |
   |----------+-------------------------------------------------------------|
   | stop     | Suspend un travail en tâche de fond                         |
   |----------+-------------------------------------------------------------|
   | suspend  | Suspend un travail en cours dans la session                 |
   |----------+-------------------------------------------------------------|
   | time     | Chronomètre une commande                                    |
   |----------+-------------------------------------------------------------|
   | umask    | Donne ou liste les permissions sur les fichiers             |
   |----------+-------------------------------------------------------------|
   | unset    | Supprime une variable ou une fonction                       |
   |----------+-------------------------------------------------------------|
   | wait     | Attend qu'une tâche de fond se termine                      |
   +------------------------------------------------------------------------+

2. Fonctionnalités spécifiques

   La table suivante montre les principales différences des Shell courants
   (sh), Bourne Again SHell (bash), Korn shell (ksh) et le C shell (csh).

   [42][Note] Compatibilité des Shell
              Parce que Bash est un sur-ensemble de sh, toutes les commandes
              sh fonctionnent en Bash - mais pas vice versa. Bash a bien plus
              de possibilités qui lui sont propres, et, comme le montre la
              table suivante, beaucoup de possibilités venant d'autres Shell.

              Parce que le Turbo C Shell est un sur-ensemble de csh, toutes
              les commandes csh fonctionnent en tcsh, mais l'inverse n'est
              pas vrai.

   Tableau A.2. Différences de fonctionnalités des Shell

+----------------------------------------------------------------------------------------------------+
|sh         |Bash                              |ksh          |csh          |Signification/Action     |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|$          |$                                 |$            |%            |L'invite utilisateur par |
|           |                                  |             |             |défaut                   |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |>|                                |>|           |>!           |Force la redirection     |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|> fichier  |&> fichier ou > fichier 2>&1      |> fichier    |>& fichier   |Redirige stdout et stderr|
|2>&1       |                                  |2>&1         |             |sur fichier              |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |{ }                               |             |{ }          |Expansion des éléments de|
|           |                                  |             |             |la liste                 |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|`commande` |`commande` ou $(commande)         |$(commande)  |`commande`   |Remplace par le résultat |
|           |                                  |             |             |de la commande incluse   |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|$HOME      |$HOME                             |$HOME        |$home        |Répertoire utilisateur   |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |~                                 |~            |~            |Symbole équivalent au    |
|           |                                  |             |             |répertoire utilisateur   |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |~+, ~-, dirs                      |~+, ~-       |=-, =N       |Accède à la pile des     |
|           |                                  |             |             |répertoires              |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|var=value  |VAR=value                         |var=value    |set var=value|Affectation de variable  |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|export var |export VAR=value                  |export       |setenv var   |Publie une variable      |
|           |                                  |var=val      |val          |d'environnement          |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |                                  |             |             |Les paramètres peuvent   |
|           |${nnnn}                           |${nn}        |             |être référencés au delà  |
|           |                                  |             |             |des 9 premiers           |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |                                  |             |             |Chaque argument est connu|
|"$@"       |"$@"                              |"$@"         |             |comme une valeur         |
|           |                                  |             |             |indépendante             |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|$#         |$#                                |$#           |$#argv       |Le nombre d'arguments    |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|$?         |$?                                |$?           |$status      |Statut d'exécution de la |
|           |                                  |             |             |commande la plus récente |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|$!         |$!                                |$!           |             |PID de la tâche de fond  |
|           |                                  |             |             |la plus récente          |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|$-         |$-                                |$-           |             |Options classiques       |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|. fichier  |source fichier ou . fichier       |. fichier    |source       |Lecture de commandes     |
|           |                                  |             |fichier      |depuis un fichier        |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |alias x='y'                       |alias x=y    |alias x y    |Nom x est équivalent à la|
|           |                                  |             |             |commande y               |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|case       |case                              |case         |switch ou    |Décline différentes      |
|           |                                  |             |case         |éventualités             |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|done       |done                              |done         |end          |Fini une instruction de  |
|           |                                  |             |             |boucle                   |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|esac       |esac                              |esac         |endsw        |Marque la fin du case ou |
|           |                                  |             |             |du switch                |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|exit n     |exit n                            |exit n       |exit (expr)  |Quitte avec un statut    |
|           |                                  |             |             |d'exécution              |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|for/do     |for/do                            |for/do       |foreach      |Boucles sur plusieurs    |
|           |                                  |             |             |variables                |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |set -f, set -o                    |             |             |Ignore la substitution de|
|           |nullglob|dotglob|nocaseglob|noglob|             |noglob       |caractères dans la       |
|           |                                  |             |             |génération de fichier    |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|hash       |hash                              |alias -t     |hashstat     |Affiche les commandes    |
|           |                                  |             |             |'hash' (trace les alias) |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|hash cmds  |hash cmds                         |alias -t cmds|rehash       |Mémorise où se situe la  |
|           |                                  |             |             |commande                 |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|hash -r    |hash -r                           |             |unhash       |Annule la mémorisation   |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |history                           |history      |history      |Liste les commandes      |
|           |                                  |             |             |passées                  |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |ArrowUp+Enter ou !!               |r            |!!           |Relance la commande      |
|           |                                  |             |             |précédente               |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |                                  |             |             |Relance la commande la   |
|           |!str                              |r str        |!str         |plus récemment passée qui|
|           |                                  |             |             |commence par « str »     |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |                                  |             |             |Remplace « x » par « y » |
|           |                                  |             |             |dans la commande la plus |
|           |!cmd:s/x/y/                       |r x=y cmd    |!cmd:s/x/y/  |récemment passée         |
|           |                                  |             |             |commençant par « cmd »,  |
|           |                                  |             |             |puis exécute.            |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|if [ $i -eq|if [ $i -eq 5 ]                   |if ((i==5))  |if ($i==5)   |Echantillon de tests de  |
|5 ]        |                                  |             |             |conditions               |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|fi         |fi                                |fi           |endif        |Marque la fin de         |
|           |                                  |             |             |l'instruction if         |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|ulimit     |ulimit                            |ulimit       |limit        |Déclare une limite de    |
|           |                                  |             |             |ressource                |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|pwd        |pwd                               |pwd          |dirs         |Affiche le répertoire    |
|           |                                  |             |             |courant                  |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|read       |read                              |read         |$<           |Lecture depuis l'entrée  |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|trap 2     |trap 2                            |trap 2       |onintr       |A pour effet d'ignorer   |
|           |                                  |             |             |les interruptions        |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|           |unalias                           |unalias      |unalias      |Détruit les alias        |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|until      |until                             |until        |             |Begin until loop         |
|-----------+----------------------------------+-------------+-------------+-------------------------|
|while/do   |while/do                          |while/do     |while        |Begin while loop         |
+----------------------------------------------------------------------------------------------------+
 



Bonne continuation !

Hors ligne

Pied de page des forums