Problème script shell
Fermé
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
-
4 mai 2011 à 15:44
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016 - 16 mai 2011 à 16:48
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016 - 16 mai 2011 à 16:48
A voir également:
- Problème script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
5 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
4 mai 2011 à 17:17
4 mai 2011 à 17:17
Salut,
A adapter :
;-))
A adapter :
$ cat freeman.sh #! /bin/bash #set -xv tabDSM=( p_fr_01 p_fr_02 p_fr_03 p_gr_01 p_gr_02 p_es_01 ) egrep -qo "${1}[^ ]*" <<<${tabDSM[@]} if [ "$?" -eq 1 ] then echo "Le répertoire n'existe pas, création en cours." echo "mkdir ${1}_01" else NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f3) NUM=$(( $NUM + 1 )) NUM=$(echo ${NUM} | sed 's/^.$/0&/') echo "Le répertoire existe déjà, incrémentation de la valeur." echo "mkdir ${1}_${NUM}" fi $ ./freeman.sh p_us Le répertoire n'existe pas, création en cours. mkdir p_us_01 $ ./freeman.sh p_fr Le répertoire existe déjà, incrémentation de la valeur. mkdir p_fr_04 $ ./freeman.sh p_it Le répertoire n'existe pas, création en cours. mkdir p_it_01 $ ./freeman.sh p_gr Le répertoire existe déjà, incrémentation de la valeur. mkdir p_gr_03 $
;-))
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
5 mai 2011 à 13:51
5 mai 2011 à 13:51
je crois quand faite je vais te montrer exactement mon code tu pourra mieux m'aider comme sa.
la commande pdls me retorune le nom de mes serveur et je les stockes dans le tableau tabDSM
et les commandes config_server me permette de crée mes serveur avec le code comme ceux-ci sa m'ajoute bien mon premier serveur dsm_fr_01 ou dsm_gr_01
mais par contre en retapant "fr ou "gr" ben il arrive plus a lire le dernier numéro et donc à l'incrémenté et il essai de le rajouté donc avec 01 mais vu qu'il existe déja sa me met une erreur
et je t'avoue que j'ai du mal a comprendre tes lignes donc pour comprendre l'erreur c'est trés dur lol
merci d'avance et encore désolé de te déranger
#!/bin/bash #set -xv B='pdls -c server -a none -x"-server-type destination-manager" ids_ccm:' tabDSM=( ${B} ) echo ${tabDSM[*]} C='egrep -qo "${1}[^ ]*" <<<${tabDSM[@]}' echo $Ccontenu de tabDSM = dsm_car_01 dsm_fr_01 dsm_gr_01
if [ "$?" -eq 1 ] then echo "Le serveur n'existe pas, création en cours." dsm="dsm_"${1}"_01" config_server -t dsm $dsm else NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f3) NUM=$(( $NUM + 1 )) NUM=$(echo ${NUM} | sed 's/^.$/0&/') echo "Le serveur existe déjà, incrémentation de la valeur." dsm="dsm_"${1}"_"${NUM} echo $dsm config_server -t dsm $dsm fi
la commande pdls me retorune le nom de mes serveur et je les stockes dans le tableau tabDSM
et les commandes config_server me permette de crée mes serveur avec le code comme ceux-ci sa m'ajoute bien mon premier serveur dsm_fr_01 ou dsm_gr_01
mais par contre en retapant "fr ou "gr" ben il arrive plus a lire le dernier numéro et donc à l'incrémenté et il essai de le rajouté donc avec 01 mais vu qu'il existe déja sa me met une erreur
et je t'avoue que j'ai du mal a comprendre tes lignes donc pour comprendre l'erreur c'est trés dur lol
merci d'avance et encore désolé de te déranger
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
5 mai 2011 à 14:09
5 mai 2011 à 14:09
Mes explications en #3 ne font pas l'affaire ?
Honnêtement d'après ce que tu dis et que tu as fait ça devrait fonctionner ;-\
Essaye de décommenter la ligne "set -xv" et de relancer le script (avec un exemple qui foire) et poste le résultat...
Honnêtement d'après ce que tu dis et que tu as fait ça devrait fonctionner ;-\
Essaye de décommenter la ligne "set -xv" et de relancer le script (avec un exemple qui foire) et poste le résultat...
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
5 mai 2011 à 14:55
5 mai 2011 à 14:55
voila c'est fait:
voici le retour
voici le retour
B='pdls -c server -a none -x"-server-type destination-manager" ids_ccm:' pdls -c server -a none -x"-server-type destination-manager" ids_ccm: ++ pdls -c server -a none '-x-server-type destination-manager' ids_ccm: + B='dsm dsm_car_01 dsm_es_01 dsm_fr_01 dsm_gr_01' tabDSM=( ${B} ) + tabDSM=(${B}) echo ${tabDSM[*]} + echo dsm dsm_car_01 dsm_es_01 dsm_fr_01 dsm_gr_01 dsm dsm_car_01 dsm_es_01 dsm_fr_01 dsm_gr_01 egrep -qo "${1}[^ ]*" <<<${tabDSM[@]} + egrep -qo 'es[^ ]*' if [ "$?" -eq 1 ] then echo "Le serveur n'existe pas, création en cours." dsm="dsm_"${1}"_01" config_server -t dsm $dsm else NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f3) echo "NUM 1: $NUM" NUM=$(( $NUM + 1 )) echo "NUM 1: $NUM" NUM=$(echo ${NUM} | sed 's/^.$/0&/') echo "NUM 1: $NUM" echo "Le serveur existe déjà, incrémentation de la valeur." dsm="dsm_"${1}"_"${NUM} echo $dsm config_server -t dsm $dsm fi + '[' 0 -eq 1 ']' egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f3 ++ cut -d_ -f3 ++ tail -1 ++ sort -n ++ egrep -o 'es[^ ]*' + NUM= + echo 'NUM 1: ' NUM 1: + NUM=1 + echo 'NUM 1: 1' NUM 1: 1 echo ${NUM} | sed 's/^.$/0&/' ++ sed 's/^.$/0&/' ++ echo 1 + NUM=01 + echo 'NUM 1: 01' NUM 1: 01 + echo 'Le serveur existe déjà, incrémentation de la valeur.' Le serveur existe déjà, incrémentation de la valeur. + dsm=dsm_es_01 + echo dsm_es_01 dsm_es_01 + config_server -t dsm dsm_es_01 config_server : Could not create server dsm_es_01 because it already exists
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
5 mai 2011 à 15:25
5 mai 2011 à 15:25
Ok, j'ai pigé ;-))
Bon je suppose que tu lances ton script avec juste "es" en paramètre ?
Si oui, change :
par
Bon je suppose que tu lances ton script avec juste "es" en paramètre ?
Si oui, change :
NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f3)
par
NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f2)
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
5 mai 2011 à 15:37
5 mai 2011 à 15:37
sa marche divinement bien merci j'ai juste changer une ligne
NUM=$((10#$NUM + 1 ))
parceque sinon apres 08 il planté maintenant niquel
MERCI encore pour ton aide!!!
NUM=$((10#$NUM + 1 ))
parceque sinon apres 08 il planté maintenant niquel
MERCI encore pour ton aide!!!
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
16 mai 2011 à 08:38
16 mai 2011 à 08:38
Désolé de te redéranger. mais je viens de basculer mon script sur un AIX et l'option "-o" ne marche pas sous AIX du coup le cript ne marche plus.
es ce que tu aurais une solution pour contourner ce problème???
Merci
es ce que tu aurais une solution pour contourner ce problème???
Merci
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 mai 2011 à 09:42
16 mai 2011 à 09:42
Essaye avec :
en remplacement de :
egrep -o "${1}[^ ]*" <<<${tabDSM[@]}
sed 's/ /\n/g' <<<${tabDSM[@]} | sed -n 's/.*\('"${1}"'.*\)/\1/p'
en remplacement de :
egrep -o "${1}[^ ]*" <<<${tabDSM[@]}
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
16 mai 2011 à 10:36
16 mai 2011 à 10:36
sa ne me m'est pas de message d'erreur à ce niveaux la mais il rentre obligatoirement dans le else avec cette ligne. meme quand il doit crée le premier il ne rentre pas le then.
et apre dans mon "IF" j'ai un message d'erreur pour les egrep
et apre dans mon "IF" j'ai un message d'erreur pour les egrep
egrep: not a recognized flag: o Usage : egrep [-r]...................................................
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
16 mai 2011 à 10:44
16 mai 2011 à 10:44
echo "Execution Order pdls -c server -a none -x"-server-type destination-manager" ids_ccm: " >> $LOG B='pdls -c server -a none -x"-server-type destination-manager" ids_ccm:' writeLog $? "110" tabDSM=( ${B} ) #checks if the name entered in this parameter is in table echo "Execution Order egrep -qo "${1}[^ ]*" <<<${tabDSM[@]} " >> $LOG egrep -qo "${1}[^ ]*" <<<${tabDSM[@]} if [ "$?" -eq 1 ] then dsm="dsm_"${1}"_01" echo "Execution Order config_server -t dsm $dsm" >> $LOG config_server -t dsm $dsm writeLog $? "120" else #extract from the table containing the names enterd in the parameter extracted the highest number NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f2) NUM=$((10#$NUM+ 1 )) NUM=$(echo ${NUM} | sed 's/^.$/0&/') dsm="dsm_"${1}"_"${NUM} echo "Execution Order config_server -t dsm $dsm" >> $LOG config_server -t dsm $dsm writeLog $? "121" fi
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
16 mai 2011 à 10:45
16 mai 2011 à 10:45
sa c la version sans la modif avec le sed
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 mai 2011 à 10:52
16 mai 2011 à 10:52
Essaie comme ça :
echo "Execution Order pdls -c server -a none -x"-server-type destination-manager" ids_ccm: " >> $LOG
B='pdls -c server -a none -x"-server-type destination-manager" ids_ccm:'
writeLog $? "110"
tabDSM=( ${B} )
#checks if the name entered in this parameter is in table
echo "Execution Order egrep -qo "${1}[^ ]*" <<<${tabDSM[@]} " >> $LOG
grep -q "_${1}_" <<<${tabDSM[@]}
if [ "$?" -eq 1 ]
then
dsm="dsm_"${1}"_01"
echo "Execution Order config_server -t dsm $dsm" >> $LOG
config_server -t dsm $dsm
writeLog $? "120"
else
#extract from the table containing the names enterd in the parameter extracted the highest number
NUM=$(sed 's/ /\n/g' <<<${tabDSM[@]} | sed -n 's/.*\('"${1}"'.*\)/\1/p' | sort -n | tail -1 | cut -d'_' -f2)
NUM=$((10#$NUM+ 1 ))
NUM=$(echo ${NUM} | sed 's/^.$/0&/')
dsm="dsm_"${1}"_"${NUM}
echo "Execution Order config_server -t dsm $dsm" >> $LOG
config_server -t dsm $dsm
writeLog $? "121"
fi
echo "Execution Order pdls -c server -a none -x"-server-type destination-manager" ids_ccm: " >> $LOG
B='pdls -c server -a none -x"-server-type destination-manager" ids_ccm:'
writeLog $? "110"
tabDSM=( ${B} )
#checks if the name entered in this parameter is in table
echo "Execution Order egrep -qo "${1}[^ ]*" <<<${tabDSM[@]} " >> $LOG
grep -q "_${1}_" <<<${tabDSM[@]}
if [ "$?" -eq 1 ]
then
dsm="dsm_"${1}"_01"
echo "Execution Order config_server -t dsm $dsm" >> $LOG
config_server -t dsm $dsm
writeLog $? "120"
else
#extract from the table containing the names enterd in the parameter extracted the highest number
NUM=$(sed 's/ /\n/g' <<<${tabDSM[@]} | sed -n 's/.*\('"${1}"'.*\)/\1/p' | sort -n | tail -1 | cut -d'_' -f2)
NUM=$((10#$NUM+ 1 ))
NUM=$(echo ${NUM} | sed 's/^.$/0&/')
dsm="dsm_"${1}"_"${NUM}
echo "Execution Order config_server -t dsm $dsm" >> $LOG
config_server -t dsm $dsm
writeLog $? "121"
fi
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
16 mai 2011 à 16:30
16 mai 2011 à 16:30
j'ai reussi à modifier et simplifier mon script grace au tiens et maintenant sa marche.
Merci encore
J'aurai une petite question pour ma culture personnel par contre
j' ai jamais vu 3"<<<" je me demandé si tu aurais m'y expliquer du coup?
Merci encore
J'aurai une petite question pour ma culture personnel par contre
sed 's/ /\n/g' <<<${tabDSM[@]}
j' ai jamais vu 3"<<<" je me demandé si tu aurais m'y expliquer du coup?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 mai 2011 à 16:35
16 mai 2011 à 16:35
C'est un peu l'équivalent de la redirection d'un fichier avec "< fichier" ou de "<< EOF", mais appliquer à une chaine de caractère, en fait c'est la syntaxe pour lire depuis la ligne de commande :
$ echo "il fait beau" | wc -c 13 $ wc -c <<<'il fait beau' 13 $
lefreeman63
Messages postés
136
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
11 février 2016
16 mai 2011 à 16:48
16 mai 2011 à 16:48
Ben Merci encore pour ton aide
5 mai 2011 à 13:15
j dois avouer que sa me dépasse la... et que j'ai du ma a y réadapter a mon code
:-/
5 mai 2011 à 13:41
On initialise le tableau
egrep -qo "${1}[^ ]*" <<<${tabDSM[@]}
On vérifie que le paramètre ($1) existe (ou non) dans la variable.
S'il existe la commande retournera un code retour égal à 0 (vrai) sinon elle retournera 1 (faux).
man grep pour les explications sur les options "-o et -q"
if [ "$?" -eq 1 ]
On teste le code retour contenu dans la variable "$?".
S'il est égal à 1 (faux)
then
echo "Le répertoire n'existe pas, création en cours."
echo "mkdir ${1}_01"
On crée un répertoire 01
else
Sinon s'il est égal à 0 (vrai)
NUM=$(egrep -o "${1}[^ ]*" <<<${tabDSM[@]} | sort -n | tail -1 | cut -d'_' -f3)
On récupère dans la variable "NUM" le numéro le plus élevé.
Tout d'abord en extrayant de la variable tableau que les noms correspondant au paramètre $1 et leur chiffres. ce qui renvoie une liste des 3 p_fr_xx.
Liste qu'on tri sur un critère numérique avec la commande "sort -n". (man sort)
De cette liste on ne garde que la dernière ligne (chiffre le + élevé) avec "tail -1". (man tail)
Et enfin on extrait le chiffre avec la commande "cut" (man cut)
NUM=$(( $NUM + 1 ))
On incrémente ce chiffre de +1
NUM=$(echo ${NUM} | sed 's/^.$/0&/')
Vu que l'incrémentation fait sauter le "0", ici on en rajoute un devant quand il n'y a qu'un seul chiffre (ce passage est facultatif)
echo "Le répertoire existe déjà, incrémentation de la valeur."
echo "mkdir ${1}_${NUM}"
Et enfin on crée le répertoire avec le numéro incrémenté.