[UNIX KSH] Besoin d'aide pour demarrer...

Fermé
mystralis Messages postés 3 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 27 octobre 2006 - 26 oct. 2006 à 12:34
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 27 oct. 2006 à 14:24
Bonjour,

Je debute aujourd'hui dans le langage UNIX > KSH mais j'ai beau eplucher le peu d'exemple que je comprends a peu prés sur le net je n'arrive pas a creer un script qui m'allegerait dans mes tâches quotidiennes car taper à la main plusieurs fois par jour une page A4 de ligne de commande commence un peu à m'epuiser surtout qu'il faut aller vite (vive le rendement), et me prend trop de temps.

Je fais donc appel à vous, profesionnel de l'Univers UNIX afin de m'aider ( j'ai bien dit aider par tout faire à ma place, je tiens a garder mon honneur) à me lancer dans cette vaste aventure. Je pense que si quelqu'un pouvait créer la premiere mointié du script je serais plus à meme de comprendre comment cette usine à gaz fonctionne et me chargerais de finir l'autre mointié à l'huile de coude, j'ai pas le choix d'apprendre sur le tas et tres vite si je veux pas faire une depression... Mais je ne vois pas par ou commencer ce script, merci par avance de votre aide si cela motive quelqu'un.

Voilà en partie ce qu'il faut que je lance une fois sur la ligne de commande Unix : (c'est un test pour valider une boucle sur une ligne 2 megabits quand elle est bouclée)

Voilà je dois lancer les lignes une par une et attendre que le resultat soit OK pour continuer

% start pr

ensuite sur la ligne suivante j'ai un nombre X (le n° de ligne) que je dois changer à chaque fois, j'aimerai donc que le script me demande de rentrer un nombre avant de continuer et de placer celui ci dans les lignes suivantes du script à la bonne place.

% d atmif/800 vcc/X.32 nep

j'aimerai aussi que le script me demande une confirmation pour continuer avec la ligne suivante.
si ok ensuite

% del atmif/800 vcc/X.32 nep

si ok ensuite

% add atmif/800 vcc/X.32 test

si ok ensuite

% add atmif/800 vcc/X.33

si ok ensuite

% add atmif/800 vcc/X.33 nep

si ok ensuite

% set atmmpe/1000 ac/X atmconnection atmif/800 vcc/X.33 nep

etc... apres je dois lancer le test selon un choix de durée mais j'aimerai essayer de le faire seul en fonction du debut du script, en bricolant ce que vous m'aurez trouvé, j'espere m'en sortir.

Je suis desolé de soliciter votre aide mais, je n'ai ni le temps, ni l'argent pour une formation integrale en UNIX (et ma société est adepte du : Tu te forme ssur le TAS, un point c'est tout), je n'ai le choix que d'une formation sur le tas avec votre aide pour demarrer.

Merci encore à celui qui sera motivé par mon post pour me sortir de mon probleme.

;o))) Mystralis.
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 oct. 2006 à 14:13
Salut,

Je vois dans les grandes lignes ce que tu veux faire, mais pour t'aider j'aurai besoin d'exemples concrets, autrement dit un bout de ton fichier à traiter et les résultats que tu veux obtenir.
Sans ça on risque de partir sur de mauvaises bases et patauger dans la semoule ;-))

Sinon en gros :
Pour récupérer une variable entrée au clavier il faut utiliser la commande "read" :
echo -e "Entrer un nombre :\n"
read nombre
echo
echo "Vous avez entré le nombre $nombre."
Pour afficher une ligne d'un fichier les solutions ne manquent pas, entre autre tu peux utiliser "sed" :
sed -n 3p le_fichier
affichera la 3ème ligne du fichier "le_fichier".

Ensuite pour ton histoire de confirmation, un petit test avec "if ... then" devrait faire l'affaire :
echo -e "Le résultat est-il bon ? [O/N] \n"
read result
if [ "$result" = "N" ]
then 
exit
fi
Si tu tapes "N" alors le script s'arrête...

Bon, tout ça c'est à prendre juste pour les bases, je ne suis pas devant mon PC avec un environnement GNU/Linux et de ce fait je ne peux pas tester l'exactitude de mes bouts de scripts...

Donc dès que je rentre je pourrai te confirmer le tout et me pencher davantage sur ton cas, si toutefois tu me fournis plus de détails...
0
mystralis Messages postés 3 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 27 octobre 2006
26 oct. 2006 à 16:36
Je te remercie pour ton aide jipicy ;o)))

alors quand je lance mes deux premieres lignes j'obtiens :

107>start pr
Prov
The edit view is identical to the current view
OK 2006-10-26 15:44:19:21

(a ce moment precis j'aimerais que le script me demande de rentrer un N° de ligne, ici par exemple 185 et qu'il l'injecte dans les lignes de commandes avant de les lancer)

108>d atmif/800 vcc/185.32 nep
Atmif/800 vcc/185.32 Nep
applicationName=AtmMpe/1000 AC/185
OK 2006-10-26 15:45:08:12

( ensuite si le resultat est OK, j'aimerais que le script me demande une confirmation pour lancer la ligne de commande suivante et ainsi de suite jusqu'a la fin du script)

si le resultat est NOK alors le programme lancerait un avertissement et un choix de continuer ou d'arret du script


En fait dans l'ideal le script commencerais par exemple comme cela :

>Bonjour, voulez vous lancer le test de paquet de ligne 3G ? (Y or N)

(si Y alors le script lancerait la premiere ligne de commande... start pr, si le resultat est OK alors le script demanderait si l'on desire poursuivre par Y or N et si Y lancerait la prochaine ligne de commande et ainsi de suite...)

je ne sais pas si je t'ai eclairé un peu plus mais comme la console sur laquelle je lance mes commandes est deportée de mon poste de travail je ne puis helas pas faire de copier coller ou d'impression d'ecran.

je viens de m'atteler a une petite ebauche du debut (ca doit pas etre terrible) mais ca donne une idée generale... enfin j'espere...

echo -e "Bonjour, voulez vous lancer le test de paquet de ligne 3G ? [O/N] \n"
read result
if [ "$result" = "O" ]
then
start pr
echo -e "Voulez vous continuer ? [O/N] \n"
if [ "$result" = "O" ]
Then
echo -e "Veuillez rentrer le VCC de la ligne à tester ? \n"
read result

(à ce niveau j’aimerai que le nombre rentré (ex:185) soit injecté directement dans les lignes de commandes qui suivent jusqu’a la fin du script)

sed 's/xxx/result/'
d atmif/800 vcc/xxx.32 nep

echo -e "Voulez vous continuer ? [O/N] \n"
if [ "$result" = "O" ]
Then
Del atmif/800 vcc/xxx.32 nep
.
.
.
.


Merci encore ;o))))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 oct. 2006 à 18:25
Re-

Bon j'ai pas tout compris, en grande partie parce que je ne sais toujours pas si tu dois lire des données en dehors de ton script ou si ces données sont dans le script lui même (je pencherai plus pour cette proposition).

Enfin, pour reprendre ton ébauche (en gras ce que j'ai rajouté ou corrigé) :
echo -e "Bonjour, voulez vous lancer le test de paquet de ligne 3G ? [O/N] \n"
read result
if [ "$result" = "O" ]
then
start pr
fi

echo -e "Voulez vous continuer ? [O/N] \n"
read poursuivre
if [ "$poursuivre" = "O" ]
Then
echo -e "Veuillez rentrer le VCC de la ligne à tester ? \n"
read VCC

(à ce niveau j’aimerai que le nombre rentré (ex:185) soit injecté directement dans les lignes de commandes qui suivent jusqu’a la fin du script)


d atmif/800 vcc/"$VCC".32 nep
fi

echo -e "Voulez vous continuer ? [O/N] \n"
read poursuivre

if [ "$poursuivre" = "O" ]
Then
Del atmif/800 vcc/"$VCC".32 nep 
fi
Bon à ce stade il manquerait encore des conditions (else) pour clarifier le tout, mais là j'aurai besoin de plus de détails encore et toujours ;-))
0
mystralis Messages postés 3 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 27 octobre 2006
27 oct. 2006 à 13:28
Oui effectivement les données que j'ai besoin de recuperer sont dans le sript, je n'ai pas de données à exporter vers un autre fichier, ni de données à archiver ou sauvegarder, j'ai uniquement besoin de lire à l'ecran les resultats que le script execute pas à pas.

quand la ligne d atmif/800 vcc/"$VCC".32 nep est lancée j'ai juste besoin de lire à l'ecran le resultat.

je viens de completer mon ebauche avec tes remarques et mon 6eme sens lol, pour alleger le tout j'ai supprimé la demande de confirmation de continuer ou pas le script pas à pas, je vais tester avec les commandes lancées à la chaine cela devrait etre plus rapide.

echo -e "Bonjour, voulez vous lancer le test de paquet de ligne 3G ? [O/N] \n"
read result
if [ "$result" = "O" ]
then
start pr
fi

echo -e "Veuillez rentrer le VCC de la ligne à tester ? \n" #Nombre entre 0 et 999
read VCC
d atmif/800 vcc/"$VCC".32 nep
Del atmif/800 vcc/"$VCC".32 nep
add atmif/800 vcc/"$VCC".32 test
add atmif/800 vcc/"$VCC".33
add atmif/800 vcc/"$VCC".33 nep
Set atmmpe/1000 ac/"$VCC" atmconnection atmif/800 vcc/"$VCC".33 nep
Ch pr
Act pr
Conf pr
End pr

echo -e "Veuillez rentrer la durée du test ? \n" #Durée entre 1 et 5 minutes
read TIMETEST
Set atmif/800 vcc/"$VCC".32 test duration "$TIMETEST"
Start atmif/800 vcc/"$VCC".32 test

echo -e "Voulez-vous un premier aperçu du test en cours ? [O/N] \n"
read resultat
if [ "$resultat" = "O" ]
then
d atmif/800 vcc/"$VCC".32 test
(ici j’aimerai revenir à la ligne precedente de choix : echo -e "Voulez-vous un premier aperçu du test en cours ? [O/N] \n"
car pendant toute la durée du test on peut lancer autant de fois que l’on veut la commande : d atmif/800 vcc/"$VCC".32 test afin d’avoir un apercu des envois et retours de paquet sur le lien 2M/b avant la fin du test)

else
(ici j'aimerai que le script attende la fin de la durée du test pour me demander de continuer car la commande de test : Start atmif/800 vcc/"$VCC".32 test, va me generer directement sur l'ecran plusieurs lignes concernant le resultats des envois de paquets que je n'ai besoin uniquement que de lire)

echo -e "Appuyer sur Q pour quitter le programme \n"
read QUITTER
if [ "$QUITTER" = "Q" ]
then

Start pr
add atmif/800 vcc/"$VCC".32 nep
Del atmif/800 vcc/"$VCC".33
Set atmmpe/1000 ac/"$VCC" atmconnection atmif/800 vcc/"$VCC".32 nep
Del atmif/800 vcc/"$VCC".32 test
Ch pr
Act pr
Conf pr
End pr
Exit
fi


merci pour ton aide, je commence a comprendre des petits bouts de choses et cela devient tres interessant ;o))))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
27 oct. 2006 à 14:24
Re-

(ici j’aimerai revenir à la ligne precedente de choix : echo -e "Voulez-vous un premier aperçu du test en cours ? [O/N] \n"
car pendant toute la durée du test on peut lancer autant de fois que l’on veut la commande : d atmif/800 vcc/"$VCC".32 test afin d’avoir un apercu des envois et retours de paquet sur le lien 2M/b avant la fin du test)


Les corrections et rajouts sont en gras dans l'exemple qui suit...
while :
do
echo -e "Voulez-vous un premier aperçu du test en cours ? [O/N] (Q pour quitter)\n"
read resultat
if [ "$resultat" = "N" ]
then
continue
fi
if [ "$resultat" = "Q" ]
then break
fi
d atmif/800 vcc/"$VCC".32 test
done


else
(ici j'aimerai que le script attende la fin de la durée du test pour me demander de continuer car la commande de test : Start atmif/800 vcc/"$VCC".32 test, va me generer directement sur l'ecran plusieurs lignes concernant le resultats des envois de paquets que je n'ai besoin uniquement que de lire)


Là regarde du côté de la commande "wait" et le lancement de commande en arrière-plan au moyen de l'esperluette ( & ).
pour reprendre l'exemple ci-dessus, sur ta ligne : "d atmif/800 vcc/"$VCC".32 test" rajoute "&" à la fin (d atmif/800 vcc/"$VCC".32 test&) et après l'instruction "done" (à la ligne) rajoute "wait", ce qui donnerait :
while :
do
echo -e "Voulez-vous un premier aperçu du test en cours ? [O/N] (Q pour quitter)\n"
read resultat
if [ "$resultat" = "N" ]
then
continue
fi
if [ "$resultat" = "Q" ]
then break
fi
d atmif/800 vcc/"$VCC".32 test&
done
wait
...
;-))
0