#1 Le 31/03/2010, à 20:00
- fmed1900
instruction incompréhensible
Salut pour tous;
j'ai rencontré cette instruction dans un script Bourne Shell que je n'ai pas bien compris:
if (((expr $1 + 1) l>/dev/null) 2>/dev/nu11)
et ceci est dans le script suivant:
if (((expr $1 + 1) l>/dev/null) 2>/dev/nu11)
then if test $1 -gt 0
then #un nbre de lignes est précisé
n=$1
shift
else
echo "erreur : nombre incorrect"
echo usage : $0 [nbrelignes] fichier'..
exit 2
fi
else
n=5 #valeur prédéfinie
fi
Merci d'avance;
edit modo : merci d'utiliser les balises [code]
Dernière modification par nesthib (Le 31/03/2010, à 20:34)
Hors ligne
#2 Le 31/03/2010, à 20:06
- fmed1900
Re : instruction incompréhensible
Ce script visualise les n premières Iignes
(par défaut = 5) d'une liste de fichiers
Les paramètres de ce script sont n et les fichiers
Hors ligne
#3 Le 31/03/2010, à 20:43
- nesthib
Re : instruction incompréhensible
il y a une erreur dans ton script, c'est 1 pas L devant le >/dev/null
après c'est extrêmement mal codé je trouve :
la première ligne teste si l'argument ($1) est un nombre en essayant d'y ajouter 1. si ce n'est pas la cas cela génère une erreur et le test n'est pas validé (code de retour >0)
@fmed1900 : je ne sais pas où tu vois que le script visualise les n premières lignes de fichiers. Le bout de code présenté ici ne fait rien à part instancier des variables ou afficher des erreurs
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#4 Le 31/03/2010, à 21:40
- fmed1900
Re : instruction incompréhensible
Salut M.
Concernant le 'L devant le >/dev/null' vous avez raison c'était une faute de frappe.
Concernant le script, ce qu'est affiché n'est q'une portion du script total:
f test $# -lt 1
then
echo erreur : paramètres attendus
echo usage : $0 [nbrelignes] Iichier...
exit 1
fi
if (((expr $1 + 1) 1>/dev/null) 2>/dev/nu11)
then if test $1 -gt 0
then #un nbre de lignes est précisé
n=$1
shift
else
echo "erreur : nombre incorrect"
echo usage : $0 [nbrelignes] fichier'..
exit 2
fi
else
n=5 #valeur prédéfinie
fi
if test -z $1
then
echo "erreur :'unè liste de fichier est attendue"
echo "usage $0 [nbrelignes] fichier..."
exit 3
fi
for p in $*
do
if test -f $p
then
head -$n $p 2>/dev/null
if test $? -eq 1
then
echo aucun fichierde ce nom
fi
else
echo"$p n'est pas fichier"
fi
done
edit modo : balises [code]
Dernière modification par nesthib (Le 31/03/2010, à 21:52)
Hors ligne
#5 Le 31/03/2010, à 21:42
- fmed1900
Re : instruction incompréhensible
je veux comprendre:
(((expr $1 + 1) 1>/dev/null) 2>/dev/nu11)
shift
exit 2
exit 3
head -$n $p 2>/dev/null
Merci
edit modo : balises [code]
Dernière modification par nesthib (Le 31/03/2010, à 21:53)
Hors ligne
#6 Le 31/03/2010, à 21:51
- nesthib
Re : instruction incompréhensible
bon fais un effort et utilise les balises [code] quand tu postes un script stp.
expr $1 + 1 → ajoute 1 à $1, retourne une erreur si $1 n'est pas un nombre
1/2>/dev/null → redirige la sortie standard/erreur vers /dev/null (suppression)
shift → décale les arguments (le #2 devient le #1)
exit 2/3 → arrête le script avec un code de retour 2/3 (=erreur)
head → affiche les premières lignes d'un fichier
d'où vient ce script ? parce que c'est vraiment mal codé
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne