Expression (Shell -script)

Fermé
momsse - 7 mai 2007 à 23:55
 momsse - 8 mai 2007 à 11:30
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

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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2007 à 09:27
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2007 à 00:01
Salut,

il n'en manque pas un bout ???

;-)))
1
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2007 à 00:17
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2007 à 00:30
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
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
comprendre "avec comme nom le premier argument"
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2007 à 10:49
Jette un oeil aux sous-shells.
0
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2007 à 11:22
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