Expression (Shell -script)

momsse -  
 momsse -
Bonsoir,

J'aurais besoin d'aide pour l'eclaircissement de ce test:

if


En fait je ne comprend pas en particulier ce que j'ai mis en gras, je remercie d'avance tous ceux qui prendront du temps pour m'expliquer un peu l'expression !

Merci d'avance
A voir également:

9 réponses

momsse
 
Donc si je résume :

-lt (inférieur)

-le (inférieur ou égale)

De quelle manière teste t'on :

superieur et superieur ou égale ?

Encore une fois merci d'être là !
5
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Re-

-lt = plus petit que (less than)
-le = plus petit ou égal (less or equal)
-ne = pas égal à (not equal)
-gt = plus grand que (greater than)
-ge = plus grand ou égal (greater or equal)

Tiens je crois que ça te sera très utile : http://abs.traduc.org/abs-4.2.01-fr/
Si la traduction n'est pas terminée, se rabattre vers la version antérieure : http://abs.traduc.org/abs-4.1-fr/

La VO : https://tldp.org/LDP/abs/html/
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

il n'en manque pas un bout ???

;-)))
1
momsse
 
Ok, je viens de comprendre, tous shell-script est lancée dans un sous shell, et ne peut donc pas modifier le shell parent, en revanche la command source permet de modifier le shell courant !

Ca c'est bon à savoir, je te remercie pour l'explication avec les scripts !
1
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Copier/Coller de l'expression de momsse...

Note : L'espace entre les 2 crochets fermants de l'expression est à supprimer. Il n'est ici que pour palier au désagrément de certaines balises de mise en forme du site CCM.
if [[ ( $(wc -l < $2) -lt $1 ) || ( $1 -le 0 ) ] ] 

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Re-

Apparemment on teste ( [[ ) que la valeur du résultat du nombre de ligne (wc -l) contenu dans le fichier passé en paramètre ($2) est inférieur (-lt) au 1er paramètre ($1), et dans le cas contraire (||) on teste si le 1er paramètre est inférieur ou égal à zéro (-le).
0
momsse
 
Merci !

Je n'arrive pas à comprendre le résultat de ce script (donnée en exercice)

#!/bin/sh

mkdir $1
cd $1


Théoriquement il est censé crée un repertoire avec comme nom pour s'y deplacer, en pratique il ne fait que le creer et ne s'y déplace pas...

C'est pourtant un script simple !
0
momsse
 
comprendre "avec comme nom le premier argument"
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Jette un oeil aux sous-shells.
0
momsse
 
Je ne comprend pas vraiment, je pense avoir compris le mécanisme de sous-shell, hors ici, je n'utilise pas de parenthèse donc, en théorie cela devrait modifier le bahs courant, de plus, le script semble équivalent à la commande suivante:

$ mkdir toto; cd toto

Comment faudrait-il appeler mon script pour qu'il ,puisse fonctionner ?

Merci de ton aide !
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Re-

Pour bien comprendre le mécanisme, crées ces 2 petits scripts :
script 1
#! /bin/bash
# foo.sh

echo -e "Répertoire actuel :\c "
pwd
echo
{
echo -e "Création du répertoire $1\n"
mkdir $1
echo -e "Déplacement dans le répertoire $1\n"
cd $1
}
echo -e "Nous sommes dans le répertoire :\c "
pwd
echo -e "\nBye bye."
script 2
#! /bin/bash
# bar.sh

echo -e "Répertoire actuel :\c "
pwd
echo
(
echo -e "Création du répertoire $1\n"
mkdir $1
echo -e "Déplacement dans le répertoire $1\n"
cd $1
)
echo -e "Nous sommes dans le répertoire :\c "
pwd
echo -e "\nBye bye."
et lances-les respectivement comme suit :
sh foo.sh mon_rep
source foo.sh mon_rep
sh bar.sh
source bar.sh
entre chaque commande n'oublie pas de détruire "mon_rep" ou alors change de nom de répertoire à chaque fois ;-))

la commande "source" (voir le man bash) peut aussi s'écrire "." :
source foo.sh
est équivalent à :
. foo.sh
Pour voir directement le paragraphe concernant la commande "source" dans le man bash tapes :
man bash -P 'less -p "^       source"'
;-))
0