Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 02/01/2010, 00h32   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 79
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juillet 2009
Messages : 79
Points : 11
Points : 11
Par défaut chaine de caractere et arguments d'une commande

salut tout le monde!
je suis encore débutant en programmation UNIX,excusez mes questions débiles!
ère question:
comment tester si la chaine de caractère A se termine par une autre chaine de caractère B
j'ai tenté de le faire ainsi:
ceci ne donne pas d'erreurs mais ça donne pas le résultat que je veux
2ème question:
si je veux tester une commande avec 2 arguments,comment faire?
par exemple la commande test sur un repertoire,je veux tester qu'il est autorisé en lecture et qu'il est bien un répertoire alors j'ai utilisé ca:
ou "a"contient le nom du répertoire,mais ça marche pas
merci d'avance les amis!
vamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 02h14   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Bonjour vamos,

1- La substitution de * n'est pas opérée entre guillemets, ou entre crochets droits.
Pour savoir si une chaîne contenue dans une variable commence, se termine, ou contient une autre variable,
il faut utiliser les doubles crochets droits ([[), et comparer les variables avec égal tilde.
Cela permet d'évaluer des expressions rationnelles :
Code :
1
2
3
[[ "$A" =~ ^"$B" ]] && echo "$A commence par $B" || echo "$A ne commence pas par $B"       
[[ "$A" =~ "$B" ]] && echo "$A contient $B" || echo "$A ne contient pas $B"       
[[ "$A" =~ "$B"$ ]] && echo "$A se finit par $B" || echo "$A ne se finit pas par $B"
cf. man bash - GRAMMAIRE DE L'INTERPRÉTEUR - Commandes composées - [[ expression ]] - 2ème paragraphe


2- les options de la commande interne/intégrée test (pour laquelle [ est équivalent) ne sont pas "cumulables".
l'option -a vérifie que les deux (ou plus) conditions sont remplies
l'option -o vérifie que l'une des conditions est vraie
Code :
1
2
test -d $a -a -r $a && echo "$a est un répertoire et est accessible en lecture" || echo "$a n'est pas un répertoire ou n'est pas accessible en lecture" 
[ -d $a ] && [ -r $a ] && echo "$a est un répertoire et est accessible en lecture" || echo "$a n'est pas un répertoire ou n'est pas accessible en lecture"
cf. man bash - CONDITIONS
help test
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 16h39   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 79
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juillet 2009
Messages : 79
Points : 11
Points : 11
merci N_BAH pour tes reponses,ca marche tres bien!
en restant dans les chaines de caracteres, j'ai un probleme avec expr ,on me dit :
Citation:
expr:argument non numerique
quand j'ecris cette commande:
ou n est un nombre entier ,est ce qu'il considere "1" comme une chaine de caracteres ?comment puis-je corriger ce probleme?
merci pour tout
vamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 17h25   #4
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
hmm,si n est vraiment un entier, il n'y a pas de problème.

Quel shell utilises-tu ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 17h58   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 79
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juillet 2009
Messages : 79
Points : 11
Points : 11
Citation:
Envoyé par N_BaH Voir le message
hmm,si n est vraiment un entier, il n'y a pas de problème.

Quel shell utilises-tu ?
salut!
j'utilise le bourne shell sh
en fait,la commande entiere est exactement ca:
est ce que le probleme est ailleurs?
merci mon ami
vamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 18h44   #6
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Citation:
Envoyé par vamos
est ce que le probleme est ailleurs?
sans doute.

que retourne :de toute façon, fais :
Code :
1
2
3
unset n
n=`expr $n + 1`
echo $n
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 18h58   #7
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 79
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juillet 2009
Messages : 79
Points : 11
Points : 11
Salut !
echo $n retourne un nombre normalement

et en utilisant le unset ca donne aussi la meme erreur
vamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 20h59   #8
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Bon (enfin, non, pas bon), ajoute set -x avant de passer tes commandes, ça nous en dira plus...

si il y a un script autour de ces commandes, il peut ne pas être inutile de nous le montrer.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2010, 21h01   #9
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 79
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juillet 2009
Messages : 79
Points : 11
Points : 11
Salut!
j'ai regle le probleme,c'etait un probleme d'espaces,
c'etait ecrit comme ca:
n=[espace]`expr $n +1`
il fallait supprimer l'espace et ajouter un autre avant le caractere "`"
vamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 01h04.


 
 
 
 
Partenaires

Hébergement Web