bonjour. j'ai un peu de mal avec des script shell. je voudrais écrire un script monPATH.sh qui analyse le contenu de la variable $PATH.
Lancé sans option, il doit afficher le nombre de répertoires qui le constitue ainsi que sa longueur.
bonjour. j'ai un peu de mal avec des script shell. je voudrais écrire un script monPATH.sh qui analyse le contenu de la variable $PATH.
Lancé sans option, il doit afficher le nombre de répertoires qui le constitue ainsi que sa longueur.
Bonjour, tu récupères ta variable, path, tu utilise un grep sur celle-ci pour matcher tes chemins , tu finis par un wc pour compter les chaines matchés. Tu bloques ou?
Bonjour,
Pour le coup, grep et wc sont inutile...
Mais la demande n'est pas clair:
Que veux-tu dire par le nombre de répertoire qui le constitue ?
est-ce que par exemple:
est constitué de 2 répertoire ou de 4 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part PATH=/usr/bin:/usr/local/bin
Et la longueur ? (nombre de caractère ? )
Tu as cherché un tout petit peu ? Tu en es où ? Tu bloques où ?
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
Bonjour
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo ${#PATH}
J'espère que tu auras appris un truc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo $PATH | sed 's/[^:]//g' | wc -c
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
Donc, on sort l'artillerie lourde:
Et pourquoi pas en java non précompilé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -E 'say "nb dir:",1+ $ENV{"PATH"} =~ s/:/:/g,"\ntaille:",$ENV{"PATH"} =~ s/.//g'
Comme je disais plus au haut, pas besoin de grep, wc ou sed, perl,...
Flodelarab a donné une partie de la solution simple (Merci).
salut,
je comprends l'idée, et en même temps ça ne dépend que de lui/d'elle, pas de ceux qui aident sans pour autant être enseignants ou tuteurs agréés, et qui restent néanmoins bénévoles
pour compléter je propose :
ou encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part awk -F: '{print NF}' <<< $PATH
Edit: un autre pour disedorgue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IFS=: read -a toto <<< $PATH echo ${#toto[@]}
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -lne 'print 1+(s/:/:/g)' <<< $PATH
Tant qu'on y est, une spéciale sed:
Au moins, je n'utilise pas wc pour compter
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo $PATH | sed -e 's/^/:/;x;s/.*/0/;:bcl;x;/:/!{x;b;};s/://;x;/[^0-9]/ d;:d;s/9\(_*\)$/_\1/;td;s/^\(_*\)$/1\1/; tn;s/8\(_*\)$/9\1/; tn;s/7\(_*\)$/8\1/; tn;s/6\(_*\)$/7\1/; tn;s/5\(_*\)$/6\1/; tn;s/4\(_*\)$/5\1/; tn;s/3\(_*\)$/4\1/; tn;s/2\(_*\)$/3\1/; tn;s/1\(_*\)$/2\1/; tn;s/0\(_*\)$/1\1/; tn;:n;y/_/0/;bbcl'
Pour info, l'incrément utilisé, n'est pas de moi, je l'ai juste repris dans la doc de gnu sed...
Pour les non frileux:
Et encore une petite rigolote
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 set ${PATH//:/ } echo $#:
Code : Sélectionner tout - Visualiser dans une fenêtre à part sh -c 'echo $#' ${PATH//:/ } "et ici bob retourne à la plage"
Exact, je me suis trompé, c'est charlie qui voudrait retourner à la plage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part sh -c 'echo $#' -- ${PATH//[^:]/ } "et charlie retourne a la plage"
Partager