Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
824 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Code et Script][bash] test et arguments

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Code et Script][bash] test et arguments

n°1407326
Profil sup​primé
Posté le 31-08-2017 à 21:57:58  answer
 

Bonjour,
Je voudrais vérifier quelque condition avant d'exécuter une commande et retourner le code de retour de la commande.
 
Voici mon code :
 

+---------------------------------------------------------------------------[X]+
|#!/bin/bash                                                                   |
|# hello                                                                       |
|echo -e "\033[035mhello \033[032m$USER \033[0m"                               |
|if [ $# > 2 ]; then                                                           |
|    if [ -n $1 ]; then                                                        |
|        if [ $2=="test" ]; then                                               |
|            /bin/echo -e "[$0] test $2";                                      |
|            test $2;                                                          |
|            if [ $? -eq 0 ]; then                                             |
|                exit 0;                                                       |
|            else                                                              |
|                echo $?;                                                      |
|                exit $?;                                                      |
|            fi;                                                               |
|        fi;                                                                   |
|    fi;                                                                       |
|fi;                                                                           |
|exit 0                                                                        |
+------------------------------------------------------------------------------+


 
Voici le résultat de l'appel suivant : ./hello
 

Citation :

hello sens  
[./hello] test  
1


 
dois y a voir une erreur de syntaxe ou un truc à configurer avant, j'en sais rien mais c'est pas probant.
 
Le premier test est censé tester si le nombre d'argument est supérieur à 2.
 
Un coup de main sera bien venu, s'il vous plaît. Merci.


Message édité par Profil supprimé le 31-08-2017 à 21:58:54
mood
Publicité
Posté le 31-08-2017 à 21:57:58  profilanswer
 

n°1407329
Profil sup​primé
Posté le 31-08-2017 à 23:30:03  answer
 

j'ai corriger un peu enfin...
 

Code :
  1. #!/bin/bash
  2. # hello
  3. echo -e "\033[035mhello \033[032m$USER \033[0m";
  4.  
  5. if [ $# > 2 ]; then
  6.     if [ -n "$1" ]; then        
  7.        if [ "$1" = "test" ]; then
  8.            /bin/echo -e "[$0] test $2";
  9.            test $2;
  10.            if [ $? -eq 0 ]; then
  11.                exit 0;
  12.            else
  13.                exit $?;
  14.            fi;
  15.        else
  16.            exit 125;
  17.        fi;
  18.     else
  19.         exit 126;
  20.    fi;
  21.  
  22. else
  23.    exit 127;
  24. fi;

n°1407344
Profil sup​primé
Posté le 01-09-2017 à 20:56:02  answer
 

Citation :

j'ai corriger un peu enfin...


et ?
 
attention, > n'est pas un opérateur arithmétique.  
le test est donc toujours vrai, et tu as désormais un fichier nommé 2. :/
 
et $2 doit aussi être entre guillemets, au cas où il serait composé de plusieurs mots.

n°1407345
francoisp3​1
Posté le 01-09-2017 à 21:29:45  profilanswer
 

soit on fait $var soit $"var" ou plus ${var}  
 
> a été expliqué par watael donc  ;  il a raison ;)  
 
les ";" sur tes fi sont facultatifs  
 
 
par contre oui ; grand OUI ; tu as indenté et ça c'est bien !!!!!  
 
 
 

n°1407346
Profil sup​primé
Posté le 01-09-2017 à 23:33:16  answer
 

${var} n'évitera pas l'échec du test, il n'y a que les guillemets qui permettront à test de considérer la chaîne testée comme une seule "entité" :

Code :
  1. $ var="foo bar baz"
  2. $ test $var
  3. bash: test: bar : opérateur binaire attendu
  4. $ test ${var}
  5. bash: test: bar : opérateur binaire attendu
  6. $ test "$var"
  7. $ echo $?
  8. 0

n°1407348
francoisp3​1
Posté le 01-09-2017 à 23:35:38  profilanswer
 

je ne prétend pas ça :) attention ! :)  
 

n°1407358
Profil sup​primé
Posté le 02-09-2017 à 12:40:05  answer
 

Merci pour vos réponse.
 
Comment je fais un teste de comparaison arithmétique ?
 
J'ai pourtant lu le man de bash ils disent bien d'employer "< | > |<= | >=" :/


Message édité par Profil supprimé le 02-09-2017 à 12:40:45
n°1407363
zipe31
Posté le 02-09-2017 à 14:30:20  profilanswer
 

Salut,
 

Citation :

J'ai pourtant lu le man de bash ils disent bien d'employer "< | > |<= | >=" :/


 
T'as du louper cette partie :
 

Citation :

      arg1 OP arg2
              OP  is  one  of  -eq,  -ne,  -lt, -le, -gt, or -ge.  These arithmetic binary operators
              return true if arg1 is equal to, not equal to, less  than,  less  than  or  equal  to,
              greater  than,  or  greater than or equal to arg2, respectively.  Arg1 and arg2 may be
              positive or negative integers.


 
 ;)  


---------------
$ man woman
n°1407364
Profil sup​primé
Posté le 02-09-2017 à 14:45:27  answer
 

Merci, mais non je l'ai pas loupé, le l'utilise d'ailleurs...
 
 
Man un peu plus haute dans la man de bash.
 

Citation :

|ARITHMETIC EVALUATION                                                                                                                                                                                                                                                   |
|       The shell allows arithmetic expressions to be evaluated, under certain circumstances (see the let and declare builtin commands and Arithmetic Expansion).  Evaluation is done in fixed-width integers with no check for overflow, though division  by  0  is     |
|       trapped and flagged as an error.  The operators and their precedence, associativity, and values are the same as in the C language.  The following list of operators is grouped into levels of equal-precedence operators.  The levels are listed in order of     |
|       decreasing precedence.                                                                                                                                                                                                                                           |
|                                                                                                                                                                                                                                                                        |
|       id++ id--                                                                                                                                                                                                                                                        |
|              variable post-increment and post-decrement                                                                                                                                                                                                                |
|       ++id --id                                                                                                                                                                                                                                                        |
|              variable pre-increment and pre-decrement                                                                                                                                                                                                                  |
|       - +    unary minus and plus                                                                                                                                                                                                                                      |
|       ! ~    logical and bitwise negation                                                                                                                                                                                                                              |
|       **     exponentiation                                                                                                                                                                                                                                            |
|       * / %  multiplication, division, remainder                                                                                                                                                                                                                       |
|       + -    addition, subtraction                                                                                                                                                                                                                                     |
|       << >>  left and right bitwise shifts                                                                                                                                                                                                                             |
|       <= >= < >                                                                                                                                                                                                                                                        |
|              comparison                                                                                                                                                                                                                                                |


Message édité par Profil supprimé le 02-09-2017 à 14:46:30
n°1407365
zipe31
Posté le 02-09-2017 à 15:05:01  profilanswer
 

Donc, change ton

Code :
  1. if [ $# > 2 ]; then

par :

Code :
  1. if [ $# -gt 2 ]; then


---------------
$ man woman
mood
Publicité
Posté le 02-09-2017 à 15:05:01  profilanswer
 

n°1407366
Profil sup​primé
Posté le 02-09-2017 à 15:36:06  answer
 

Citation :

J'ai pourtant lu le man de bash ils disent bien d'employer "< | > |<= | >="

oui, dans une Évaluation arithmétique, mais pas dans un test.
 
une évaluation arithmétique est initiée par des parenthèses doubles :

Code :
  1. if (( $# > 2 )); then


 
 
et quand tu voudras faire une comparaison lexicale dans un test, en utilisant ces opérateurs donc, il faudra les protéger pour inhiber la redirection.

Code :
  1. if test "$a" \> "$b"; then


Message édité par Profil supprimé le 02-09-2017 à 15:45:06
n°1407367
Profil sup​primé
Posté le 02-09-2017 à 15:38:43  answer
 

Thank you !

n°1413796
alokkin
tourner 7 fois la langue ...
Posté le 29-01-2018 à 23:39:41  profilanswer
 

Et attention également à l'utilisation de $?.
 
En effet, quand tu fais par exemple :  
echo $?
exit $?
 
Lors de la 2e instruction, exit $? utilisera le code retour de l'instruction "echo $?" soit 0 logiquement.
 
En général, il est préférable de "capturer" un code retour dans une variable pour s'en servir par la suite. C'est trompeur ;)


---------------
Burn the museum, wipe your ass with the Mona Lisa, this way, at least, God will know your name.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Code et Script][bash] test et arguments

 

Sujets relatifs
slinuxjjhjscript montage lecteur réseau apres commande kinit
bash : wtf ?centos7 lancer un script au démarage
Serveur sur WSL(Bash Ubuntu @Windows) ou VM/DebianAide sur script Synology DS216j
[CRYPTOLOCKER] - Script pour empêcher la modif des fichiers ciblés ?[bash] faire une boucle for sur une seul ligne
Script ajout d'une extension sur plusieurs fichier 
Plus de sujets relatifs à : [Code et Script][bash] test et arguments


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR