Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 31/07/2008, 16h11   #1 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: mars 2007
Âge: 20
Messages: 24
Par défaut KSH: Supprimer des lignes vides (sans espaces ni tab) en fin de fichier text

Bonjour,

Je suis amené à manipuler un fichier KSH, malgré le fait que je n'aie reçu aucune formation dans ce domaine, peut-être quelqu'un pourrait m'aider?

Un spool me crée un fichier texte comme suit:

*debut de mon fichier texte*
CHAINE 1
CHAINE 2
CHAINE 3


*fin de mon fichier texte*

Les deux dernières lignes du fichiers sont complètement vides (pas d'espaces ni de tab), il s'agit juste de retours chariots.

Ensuite je fais un read de ce fichier, et selon la valeur de la ligne (j'utilise des if) je lance divers traitements. Sauf que lorsque il arrive à la ligne vide, j'ai ce message d'erreur:

/batch/mon.ksh[120]: test: 0403-004 Specify a parameter with this command.

J'ai pensé utiliser sed ou awk pour supprimer ces lignes, en vain.

Voilà mon code:

Code :
 sqlplus -s ${USRORA} << EOF >> ${sqlreport} @$REP_SQL/mon.sql $monfichiertexte
EOF

while read script
do

   if [ $script = "CHAINE 1" ]
   then
      #MON TRAITEMENT ICI
   fi
done < $monfichiertexte
Help !! Merci !!
SmileAndFly est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/07/2008, 16h37   #2 (permalink)
Membre éprouvé
 
Avatar de KindPlayer
 
Date d'inscription: février 2007
Messages: 451
Par défaut

teste si la ligne n'est pas vide avant de tester l'egalité avec la chaine

en bash ca serait
Code :
if [ -n $script ]
then
    suite du traitement avec les autres tests
En revanche je dirais qu'il y a confusion entre le nom de la variable et l'utilisation que tu sembles en faire. Qu'est censé contenir la variable script?
__________________
La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
Donald E. Knuth
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/07/2008, 16h44   #3 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: mars 2007
Âge: 20
Messages: 24
Par défaut

En mettant le if, j'ai la même erreur. Sauf qu'au lieu de l'avoir n fois (n tests sur la valeur de script), je l'ai une seule fois...

Quant au nom de la variable, je suis totalement d'accord avec toi: ceux qui ont développé ce ksh étaient des boulets, et maintenant qu'ils ont quitté mon projet, je dois faire avec :s

PI, script est un nom de table.

Dernière modification par SmileAndFly ; 31/07/2008 à 16h55
SmileAndFly est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/07/2008, 20h31   #4 (permalink)
Membre éprouvé
 
Avatar de BlaireauOne
 
Date d'inscription: mars 2007
Localisation: Toulouse
Messages: 471
Par défaut

Entourer $script de double-quotes doit régler le problème.
En présence de ligne vide, sans ces double-quotes, le shell lit :

Code :
if [ = "CHAINE 1" ] 
et ne comprend pas alors qu'avec les double-quotes :

Code :
if [ "" = "CHAINE 1" ] 
il sera content

Code :
   if [ "$script" = "CHAINE 1" ]
   then
      #MON TRAITEMENT ICI
   fi
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/07/2008, 20h47   #5 (permalink)
Membre chevronné
 
Date d'inscription: juin 2008
Messages: 643
Par défaut hieroglyphe ;-)

SED fait cela aussi très bien:
Code :
sed -e :a -e '/^\n*$/N;/\n$/ba' nom_du_fichier
bon d'accord, les expressions régulières sont difficiles à lire mais...
- W
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide