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 28/12/2011, 17h51   #1
 
Elodie BARDAJI
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Elodie BARDAJI

Informations forums :
Inscription : novembre 2010
Messages : 15
Points : -1
Points : -1
Par défaut Compter le nombre de / dans une chaîne de caractère

Bonjour,

Je suis dans un script Shell .sh
J'ai une variable qui est un path, par exemple : $LINK=src/include/checkSpeed/toto.h
Je souhaite savoir combien il y a de / dans cette variable.
En effet mon but est de créer le dossier src puis le dossier src/include puis le dossier src/include/checkSpeed mais de m'arrêter là et de ne pas créer un dossier /src/include/checkSpeed/toto.h

Merci pour votre aide.

Elodie
Elodie11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 18h05   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
1
2
3
4
5
6
7
$ echo ${LINK}
src/include/checkSpeed/toto.h
 
$ echo ${LINK} | grep -o '/' | wc -l
3
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 21h17   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 072
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 072
Points : 4 155
Points : 4 155
Code :
$ LINK=src0001/include/check_Speed/to-to.h
comme ça aussi :
Code :
1
2
3
$ clean=$(echo "$LINK" | sed 's/[^/]*//g')
$ echo ${#clean}
3
comme ça aussi :
Code :
1
2
$ expr length $(echo "$LINK" | sed 's/[^/]*//g')
3
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 28/12/2011, 22h26   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
Envoyé par N_BaH Voir le message
comme ça aussi :
Code :
$ expr length $(echo "$LINK" | sed 's/[^/]*//g')
Ou comme ça :

Code :
1
2
$ expr length "${LINK//[a-z.]/}"
3
ou mieux :
Code :
1
2
$ expr length "${LINK//[^\/]/}"
3
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 22h59   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 072
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 072
Points : 4 155
Points : 4 155
si on passe au bash, alors plus besoin de expr :
Code :
1
2
3
4
LINK=src0001/include/check_Speed/to-to.h
tmp="${LINK//[^\/]/}"
echo ${#tmp}
3
edit: mais pour en revenir au problème principal :
Citation:
créer le dossier src puis le dossier src/include puis le dossier src/include/checkSpeed mais de m'arrêter là
mkdir -p "${LINK%/*}" sera bien mieux qu'un calcul du nombre de séparateurs.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/12/2011, 12h43   #6
 
Elodie BARDAJI
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Elodie BARDAJI

Informations forums :
Inscription : novembre 2010
Messages : 15
Points : -1
Points : -1
Par défaut HP-UX

Bonjour,

En effet cela fonctionne sur mon serveur RedHat.
Sauf que sur mon serveur HP-UX cela ne passe pas.
L'option "-o" n'existe pas pour le grep...

Merci pour ta réponse rapide cependant, mais si vous avez une solution pour le HP-UX je suis preneuse.

Merci,

Elodie
Elodie11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 13h03   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
T'as essayé les solutions de N_BaH ?
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 14h32   #8
 
Elodie BARDAJI
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Elodie BARDAJI

Informations forums :
Inscription : novembre 2010
Messages : 15
Points : -1
Points : -1
Par défaut HP-UX

En effet je n'avais pas vu toutes les propositions.
Elles fonctionnent, mais j'ai trouvé entre temps à le faire également avec un
Merci beaucoup

Elodie
Elodie11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 15h24   #9
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 072
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 072
Points : 4 155
Points : 4 155
oui, c'est mieux que d'utiliser sed pour une simple chaîne.

et après, tu vas faire une boucle en fonction du nombre retourné ?
c'est lourd.
HP-UX ne dispose pas de l'option -p pour mkdir ?
ce serait étonnant, c'est une option POSIX.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2011, 16h29   #10
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par N_BaH Voir le message
mkdir -p "${LINK%/*}"
Salut

En avant pour un nouveau concours de "celui qui a la plus grosse"

Code bash :
mkdir -p $(dirname $LINK)
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h20.


 
 
 
 
Partenaires

Hébergement Web