Script bash: accéder au dernier paramètre

Script bash: accéder au dernier paramètre - Shell/Batch - Programmation

Marsh Posté le 29-12-2002 à 15:15:29    

Salut tout le monde,
 
Je désire écrire un script bash tout bete qui va compresser un .flac avec oggenc comme si c'était un .wav. Ex:
_flacogg -q 5 fichier.flac
doit appeler
flac -c -d fichier.flac | oggenc -q 5 -o fichier.ogg -
 
Le script suivant fait ca, sauf que la syntaxe est:
_flacogg fichier.flac -q 5
... c'est à dire avec les options de oggenc après le nom du fichier.
 


_flacogg()
{
 if [ $# -ge 1 ]
 then
  wav="$1"
  base="${wav%*.wav}"
  if [ ! -f "wab" ]
  then
   shift
   echo flac -c -d "$wav" | oggenc $@ -o ${base}.ogg -
  else
   echo "File not found" $wav
  fi
 fi
}

 
 
Donc mon problème est tout bete: je dois récupérer le nom du fichier  cible qui est en dernière position, et tous les autres paramètres je dois les passer à oggenc.
Y a peut-etre un moyen simple de le faire... Sinon je le ferai en python en trois coups de cuillère à pot :-)

Reply

Marsh Posté le 29-12-2002 à 15:15:29   

Reply

Marsh Posté le 30-12-2002 à 20:48:41    

pour acceder au dernier paramètre :
Tu connais la valeur de $# ... tu effectue autant de `shift` (boucle)pour le ramner en valeur de $1 ainsi, ton dernier paramètre sera le premier, ... les autres seront perdu par contre , dc utilise les bien avt de "shiter" ;)


Message édité par Giz le 30-12-2002 à 20:49:07
Reply

Marsh Posté le 31-12-2002 à 15:59:50    

Giz a écrit :

pour acceder au dernier paramètre :
Tu connais la valeur de $# ... tu effectue autant de `shift` (boucle)pour le ramner en valeur de $1 ainsi, ton dernier paramètre sera le premier, ... les autres seront perdu par contre , dc utilise les bien avt de "shiter" ;)


 
pour pas les perdre le plus simple c'est de faire une boucle
 
for i until $#
faire VAR$i=$#
done
 
var1= 1er parametre
var2= 2eme
...
var3= 3eme
 
et ce qlquesoit $# (le nombre de parametres)
bon faut regarder comment faire (en syntaxe bash) mais l'idée est là.
 
 


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 10-12-2008 à 15:44:05    

en utilisant la methode du shift, on peut s'en sortir en detruisant les parametres dans un sous-shell, on preserve ainsi les variables dans le scripts appelant:
 
 
lastVar=`(while (test $# -gt 1)
do
shift
done
echo $1
)`
 
c'est un peu crado, mais ca fonctionne...

Reply

Marsh Posté le 03-01-2011 à 00:34:34    

Il a beaucoup plus simple que tout ce qui précède !
Du moins depuis la version 2 de BASH...
 
Pour récupérer le dernier paramètre de position, il suffit de stocker le nombre de paramètres dans une variable ;
puis de récupérer le paramètre en utilisant ${n} ou n est la variable contenant le nombre de paramètre passée en référence indirecte à l'aide du point d'exclamation.
 
En clair :
 

# On récupère le nombre d'arguments passés à la commande
NbArguments=$#
 
# On récupère la valeur dernier argument grâce à ${}  
# et une référence indirecte sur le nombre d'argument
DernierArgument=${!NbArguments}
 
# Nous pouvons à présent afficher le dernier argument
echo "$DernierArgument"


Reply

Marsh Posté le 13-04-2013 à 16:47:46    

Je tenais à préciser, même si le post est vieux de deux ans :
dernierArg=${!#} fonctionne de la même façon, et non pas comme on aurait envie de le faire (cf dernière réponse) : dernierArg=${!$#} ou dernierArg=${!$nbArg}.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed