:oops: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.
Version imprimable
:oops: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: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ù ?
Bonjour :coucou:
Code:echo ${#PATH}
J'espère que tu auras appris un truc. :?
Code:echo $PATH | sed 's/[^:]//g' | wc -c
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 encoreCode:awk -F: '{print NF}' <<< $PATH
Edit: un autre pour disedorgue :mrgreen:Code:
1
2 IFS=: read -a toto <<< $PATH echo ${#toto[@]}
Code:perl -lne 'print 1+(s/:/:/g)' <<< $PATH
Donc, on sort l'artillerie lourde:
Et pourquoi pas en java non précompilé...Code:perl -E 'say "nb dir:",1+ $ENV{"PATH"} =~ s/:/:/g,"\ntaille:",$ENV{"PATH"} =~ s/.//g'
:dehors:
Comme je disais plus au haut, pas besoin de grep, wc ou sed, perl,...
Flodelarab a donné une partie de la solution simple (Merci).
Tant qu'on y est, une spéciale sed:
Au moins, je n'utilise pas wc pour compter :aie:Code: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 :ptdr::Code:
1
2 set ${PATH//:/ } echo $#
Code:sh -c 'echo $#' ${PATH//:/ } "et ici bob retourne à la plage"
Exact, je me suis trompé, c'est charlie qui voudrait retourner à la plage:
Code:sh -c 'echo $#' -- ${PATH//[^:]/ } "et charlie retourne a la plage"
gg 8-)