Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2008, 19h40   #1
Invité de passage
 
Inscription : avril 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 2
Points : 0
Points : 0
Par défaut Extraction de ligne d'un fichier

Bonjour.

Je commence une formation de programmeur, mais le passage sur Unix est assez "flou".

Pour exemple, je dois faire un script en Bourne Shellqui affiche les ligne 5 à 10 du fichier visé.

Pour cela, j'ai réussi avec le code suivant :

Citation:
#!/bin/sh
then head -10 $1 | tail -5
Là ou je pêche, c'est qu'il faut que je teste le fichier visé, pour voir si c'est un fichier ordinaire. Dans le cas contraire, je dois envoyer le message :
n'est pas un fichier ordinaire, ou n'existe pas

J'ai donc rédigé cela :

Citation:
#!/bin/sh
if test -f $1
then head -10 $1 | tail -5
else echo $1 n\'est pas un fichier ordinaire, ou n\'existe pas
fi
Et là, malheureusement, cela m'indique à chaque fois que le fichier n'est pas ordinaire, ou n'existe pas. J'ai beau chercher, je ne vois pas l'erreur que j'ai commise.


Dans le même ordre d'idée, je dois évaluer deux numérique pour établir une comparaison "est inférieur à".
Citation:
#!/bin/sh
until test [$# -eq 2]
do
if test $# -lt 1
echo Il n\' y a aucun argument, entrez deux arguments
elif test $# -eq 1
echo il manque un argument
elif test $# -gt 2
echo il y a trop d\'arguments
fi
done
if $1 -lt $2
then echo $1 est inferieur à $2
else echo $2 est inferieur à $1
fi
j'ai beau chercher, je ne trouve pas l'erreur.

Merci de vos réponses.

Stormbringer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 08h48   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 779
Points : 7 779
en séparant en fonctions tu t'y retrouvera mieux.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
 
mesage()
{
    echo erreur...$1 n'existe pas 
    exit 1
}
 
traite()
{
file $i | grep ascii > /dev/null
if [ $? -ne 0 ] ; then
  echo le fichier existe mais n'est pas un fichier ascii
 exit 1
fi
#....ce que tu as a faire
}
 
[ -f $i ] && ( traite ; exit 0 ) || message
en clair
si fichier $1 existe => fonction traite puis exit 0
sinon fonction message

la fonction message quitte avec un status 1
la fonction traite verifie si le fichier est ascii => traite
sinon emet un message et quitte avec un status 1
frp31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 18h11   #3
Invité de passage
 
Inscription : avril 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 2
Points : 0
Points : 0
Merci.

Il y a des trucs que tu as mis que je ne connais pas encore, mais ça me donnera l'occasion de chercher comme :

Citation:
> /dev/null
Stormbringer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 20h05   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 779
Points : 7 779
1> envoie la sortie standard vers ce qui suit (affichage normal typiquement)
2> envoie l'erreur standard vers ce qui suit (typiquement l'affichage des messages d'erreur)
> envoi tout vers .....
2>&1 envoi tout ce qui est sortie ou erreur standard vers......


doubler le '>' ajoute sans effacer

/dev/null comme son nom l'indique est le nean


commande > /dev/null renvoi l'affichage vers le nean (tu ne le vois donc pas sur l'ecran) mais la commande est pourtant bien executee


dans le man de bash il y a tous les details mais c'est rebarbatif a lire....

PS: tu peux aussi pour tes usages personnels creer tes propres descripteurs de niveau 3,4,5,.....
frp31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h25.


 
 
 
 
Partenaires

Hébergement Web