Enlever $ situé en fin de chaine s'il existe [HELP] [KSH] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 08-12-2009 à 14:26:54
Petite modif chaque fois que j'ai une ligne vide entre mes bloc de texte je veux afficher par exemple "toto"
j'ai déjà essayé ça :
#!/bin/ksh
IsJob=0
IsApp=0
IsCyclique=0
FichierSortie=/home4/dpineau/blabla
IFS="
"
rm $FichierSortie
for Line in `cat /home4/dpineau/export_vtom.exp`
do
#je teste si c'est une appli
if [ `echo $Ligne | grep app: | wc -l` -eq 1 ] ;
then
IsApp=1 ; IsJob=1
fi
# je teste si c'est un job
if [ `echo $Ligne | grep job: | wc -l` -eq 1 ] ;
then
IsJob=1 ; IsApp=0
fi
# je teste si c'est un job et si c'est cyclique
if [ `echo $IsJob` -eq 1 ] && [ `echo $Ligne | grep cyclique=oui | wc -l` -eq 1 ] ;
then IsCyclique=1
else IsCyClique=0
fi
# je teste si c'est un job, si c'est cyclique et si ca rempli ces deux condition j'ecris toto a la place de la ligne vide
if [ `echo $Line | grep ^$ | wc -l` -eq 1 ] && [ `echo $IsJob` -eq 1 ] && [ `echo $Ligne | grep cyclique=oui | wc -l` -eq 1 ] ;
then echo "toto">>$FichierSortie
else echo $Line>>$FichierSortie
fi
echo $Line
done
Marsh Posté le 08-12-2009 à 15:12:07
tu bosses pour SFR ?
c'est quoi ce truc...
bon aller regarde ça 5s, http://paste.zecrazytux.net/.08-12 [...] ge.sh.html
tu devrais réfléchir avant de coder, vérifier qu'une ligne vide contient job et cyclique=oui, ça risque pas d'arriver...
edit: mon truc marche pas hein, il va pas faire ce que tu souhaite, c'est un début de correction
Marsh Posté le 08-12-2009 à 15:31:10
[debut du HS]
non je bosse pour la boite qui edite le logiciel VTOM et qui est exploité notamment par SFR
[FIN du HS ]
#!/bin/ksh
IsJob=0
IsApp=0
IsCyclique=0
FichierSortie=/home4/dpineau/blabla
IFS="
"
rm $FichierSortie
for Line in `cat -vte /home4/dpineau/BINDA.exp`
do
#je teste si c'est une appli
if [ `echo $Line | grep app: | wc -l` -eq 1 ] ;
then
IsApp=1 ; IsJob=0
fi
# je teste si c'est un job
if [ `echo $Line | grep job: | wc -l` -eq 1 ] ;
then
IsJob=1 ; IsApp=0
fi
# je teste si c'est un job et si c'est cyclique
if [ `echo $IsJob` -eq 1 ] && [ `echo $Line | grep cyclique=oui | wc -l` -eq 1 ] ;
then IsCyclique=1
else IsCyclique=0
fi
# je teste si c'est un job, si c'est cyclique et si ca rempli ces deux condition j'ecris toto a la place de la ligne vide
echo $IsJob
echo $IsCyclique
if [ `echo $IsJob` -eq 1 ] && [ `echo $IsCyclique` -eq 1 ] && [ `echo $Line | grep ^$ | wc -l` -eq 1 ] ;
then print "toto">>$FichierSortie
else echo $Line>>$FichierSortie
fi
echo $Line
done
ds ce script la trace est bonne et j'arrive a afficher ce que j'veux mais sans poser mes conditions
==> [ `echo $IsCyclique` -eq 1 ] && [ `echo $Line | grep ^$ | wc -l` -eq 1 ]
Marsh Posté le 08-12-2009 à 15:48:00
relis mon bout de machin, et prends ton temps. C'est horrible ce que tu écris là
Marsh Posté le 08-12-2009 à 15:53:32
c'est horrible ? mais ton truc avec les fichier temp j'en ai pas besoin ma trace marche [ksh -vx ./script.sh] alors peux tu m'expliquer pourquo ic'est horrible ? j'demande qu'à apprendre
EDIT : j'suis qu'un pauvre etudiant en alternance et de surcroit en 1ere année
Marsh Posté le 08-12-2009 à 15:55:57
C'est horrible car tu pipe et fait des substitutions de commandes inutiles, que cest illisible...
ça "marche" mais c'est très moche.
et sinon ta question, c'est quoi ?
edit: les fichiers temp c'est parce que moi j'ai pas de /home4 machin et j'ai un minimum testé mon code écrit de tête avant de l'envoyer)
Marsh Posté le 08-12-2009 à 15:56:36
ReplyMarsh Posté le 08-12-2009 à 15:57:26
hazzelthorn a écrit : ma question comment ca, le but de ce script ? |
en quoi puis je t'être utile ?
Marsh Posté le 08-12-2009 à 15:58:49
je capte pas pourquoi mes deux premieres conditions dans mon
if [ `echo $IsJob` -eq 1 ] && [ `echo $IsCyclique` -eq 1 ] && [ `echo $Line | grep ^$ | wc -l` -eq 1 ] ;
then print "toto">>$FichierSortie
else echo $Line>>$FichierSortie
ne sont jamais prise en compte et m'affiche jamais toto en sortie...
alors que si j'lai vire ben pour chaque ligne vide ben ca me fout toto
Marsh Posté le 08-12-2009 à 16:03:54
[quotemsg=1184657,10,278652]je capte pas pourquoi mes deux premieres conditions dans mon
if [ `echo $IsJob` -eq 1 ] && [ `echo $IsCyclique` -eq 1 ] && [ `echo $Line | grep ^$ | wc -l` -eq 1 ] ;
then print "toto">>$FichierSortie
else echo $Line>>$FichierSortie
revois les bases du shell, et surtout les tests...
et regarde ce que je t'ai écris. vraiment
est ce que ça rrive que
- $IsJob soit égal à 1 (la ligne contient 'job:')
- $IsCyclique soit égal à 1 (la ligne contient 'cyclique=oui')
- que la ligne soit vide
ça c'est de la logique.
Marsh Posté le 08-12-2009 à 16:10:17
à part faire ca :
if [ $Line = "" -a $IsJob -eq 1 -a $IsCyClique -eq 1 ] ;
qui ne fonctionne pas j'vois pas....
Marsh Posté le 08-12-2009 à 16:15:41
hazzelthorn a écrit : à part faire ca : |
comment une ligne vide peut elle contenir "job:" et "cyclique=oui" ?
Marsh Posté le 08-12-2009 à 16:21:32
aaah je comprends
oui mais j'arrive pas à le formuler et il est deja 16h20.. bourdel j'ai pas vu le temps passer.
J'comprends ta logique (et par la mm occasion mon pb pour le dernier if)
if [ `echo $Line | grep ^$ | wc -l` -eq 1 ] ; me permet de voir si c'est une ligne vide
mais les deux conditions concernant si c'est un job et cyclique= oui sont des paramètres que je parse qq lignes plus haut...
la trace me donne bien ce que j'veux pourtant....
Marsh Posté le 08-12-2009 à 16:27:15
hazzelthorn a écrit : aaah je comprends |
tu finis à 17h toi ?
Citation : |
if [ -n "$var" ]; then
fi
Citation : |
ah oui autant pour moi, tu remets pas à vide dans la boucle (j'ai aussi mes excuses, je bosses à coté, sisi, je need coffee, il fait sombre... )
Marsh Posté le 08-12-2009 à 16:35:56
j'tai add sur msn si tu veux ce soir si t'es dispo ou par mail et oui j'termine a 17h
Marsh Posté le 08-12-2009 à 16:40:20
hazzelthorn a écrit : j'tai add sur msn si tu veux ce soir si t'es dispo ou par mail et oui j'termine a 17h |
eh ben... espece de wedge
Marsh Posté le 08-12-2009 à 16:41:04
zecrazytux a écrit : |
ben quoi 9h-17h ca fait du 35h par semaine et ce script si j'veux pas me faire taper dessus j'dois le finir
Marsh Posté le 09-12-2009 à 11:48:01
Alors voilà ou j'en suis
#!/bin/ksh
clear
IsJob=0
IsApp=0
IsCyclique=0
FichierSortie=/home4/dpineau/blabla
JobName=$Line
rm $FichierSortie
for Line in `cat -vte /home4/dpineau/BINDA.exp`
do
#je teste si c'est une appli
if [ `echo $Line | grep app: | wc -l` -eq 1 ] ;
then
IsApp=1 ; IsJob=0
fi
# je teste si c'est un job
if [ `echo $Line | grep job: | wc -l` -eq 1 ] ;
then
IsJob=1 ; IsApp=0 ; JobName=`echo $Line`
echo "MonJob: " $JobName
fi
# je teste si c'est un job et si c'est cyclique
if [ `echo $IsJob` -eq 1 ] ;
then
if [ `echo $Line | grep cyclique=oui | wc -l` -eq 1 ] ;
then IsCyclique=1
else IsCyclique=0
fi
fi
# je teste si c'est un job, si c'est cyclique et si ca rempli ces deux condition j'ecris toto a la place de la ligne vide
echo $IsCyclique
if [ `echo $IsJob` -eq 1 ] && [ `echo $IsCyclique` -eq 1 ] && [ `echo $Line | grep -e '^[$]' | wc -l` -eq 1 ] ;
then echo "toto\n">>$FichierSortie
else echo $Line>>$FichierSortie
fi
echo $Line
done
Mon dernier pti pb et après le script marche ! c'est de poser dans
if [ `echo $IsJob` -eq 1 ] ;
then
if [ `echo $Line | grep cyclique=oui | wc -l` -eq 1 ] ;
then IsCyclique=1
else IsCyclique=0
fi
fi
Si c'est un job alors la variable IsCyclique reste bloqué à 1 et est valable jusqu'a la prochaine ligne [job:....... que mon script parcoure
Marsh Posté le 09-12-2009 à 14:38:09
Et voila le script complet qui marche merci a ceux qui m'ont aidé
#!/bin/ksh
clear
IsJob=0
IsApp=0
IsCyclique=0
IsDemande=0
FichierSortie=/home4/dpineau/blabla
JobName=$Line
IFS="
"
rm $FichierSortie
for Line in `cat -vte /home4/dpineau/BINDA.exp`
do
#je teste si c'est une appli
if [ `echo $Line | grep app: | wc -l` -eq 1 ] ;
then
IsApp=1 ; IsJob=0
fi
# je teste si c'est un job
if [ `echo $Line | grep job: | wc -l` -eq 1 ] ;
then
IsJob=1 ; IsApp=0 ; JobName=`echo $Line` ; IsCyclique=0 ; IsDemande=0
echo "JobName : " $JobName
fi
# je teste si c'est un job
if [ `echo $IsJob` -eq 1 ] ;
then
#si c'est cyclique
if [ `echo $Line | grep cyclique=oui | wc -l` -eq 1 ] ;
then IsCyclique=1
CurrentJob=`echo $JobName`
echo "CurrentJOb" $CurrentJob
fi
#si c'est demande
if [ `echo $Line | grep type_periodicite=demande | wc -l` -eq 1 ] ;
then IsDemande=1
fi
fi
# je teste si c'est un job, si c'est cyclique et si ca rempli ces deux condition j'ecris toto a la place de la ligne vide
echo "Cyclique :" $IsCyclique
echo "Demande : " $IsDemande
# je teste si c'est un job
if ([ `echo $IsJob` -eq 1 ] && [ `echo $Line | grep -e '^[$]' | wc -l` -eq 1 ]) ;
# je teste si c'est un job et une demande
then if [ `echo $IsDemande` -eq 1 ] ;
then echo "toto\n">>$FichierSortie
# je teste si c'est un job et cyclique alors j'ecris "toto"
else if [ `echo $IsCyclique` -eq 1 ] ;
then
echo "toto\n">>$FichierSortie
# je teste si c'est un job et non-cyclique alors j'écris "tata"
else echo "tata\n">>$FichierSortie
fi
fi
fi
echo $Line >>$FichierSortie
done
Mon dernier pb est d'enlever les $ généré par le cat -vte pour rendre le fichier export presentable
si qq1 sait manier cut ou sed une aide serait bienvenue
Marsh Posté le 08-12-2009 à 13:53:33
Voila mon script :
voir plus bas
Message édité par hazzelthorn le 09-12-2009 à 16:05:54