Obtenir le dernier paramètre sur le script shell

cas 1: supposons que je passe un certain nombre de parameters à mon script shell comme suit:

./myshell_script abcd 

et si j’exécute echo $# me donnera le nombre de parameters de la ligne de commande que j’ai passé et je l’ai stocké dans une variable comme [car je ne connais pas le nombre d’arguments qu’un utilisateur passe]:

 var1 = `echo "$#"` 

cas 2: $ 4 me donne le nom du dernier argument.

si je veux le stocker dans

var2 alors

 var2 = $4 

Ma question est :

Si je veux stocker de la valeur, je reçois directement de var1 à var2, comment serait-il possible en script shell?

pour ex:

 ./myshell_script.sh abc var1 = `echo "$#"` ie var1 = 3 

maintenant je veux

var2 = c [c’est-à-dire toujours le dernier paramètre, car je ne sais pas combien de parameters l’utilisateur passe de la ligne de commande]

Ce que je dois faire ?

Le script ci-dessous montre comment transmettre le premier et le dernier argument à un script:

 numArgs="$#" echo "Number of args: $numArgs" firstArg="$1" echo "First arg: $firstArg" lastArg="${!#}" echo "Last arg: $lastArg" 

Sortie:

 $ ./myshell_script.sh abcdef Number of args: 6 First arg: a Last arg: f 

Pour cela, vous pouvez utiliser:

 ${@: -1} 

Tester

 $ cat a #!/bin/bash echo "passed $# parameters, last being --> ${@: -1}" $ ./aabcd passed 4 parameters, last being --> d $ ./aabcdefg passed 7 parameters, last being --> g 

En citant un moyen d’ ici :

 for last; do : ; done echo "${last}" 

Le dernier argument transmis au script serait stocké dans la variable last .

Comme mentionné dans le lien, cela fonctionnerait dans les shells compatibles POSIX, cela fonctionne pour N’IMPORTE QUEL nombre d’arguments.


BTW, je doute que votre script fonctionne comme vous l’avez écrit dans votre question:

 var1 = `echo "$#"` 

Vous devez supprimer ces espaces autour de = , c’est-à-dire dire:

 var1=`echo "$#"` 

ou

 var1=$(echo "$#") 

Il serait peut-être préférable de réorganiser vos parameters. Au lieu d’un nombre variable d’arguments suivis d’un argument final spécifique, mettez d’abord le dernier argument (de sorte qu’il vaut $1 ), puis placez le nombre variable d’arguments après. Donc au lieu de

 myshell_script abcd 

avec var2 éventuellement mis à “d”, utilisez

 var2=$1; shift 

et appel comme

 myshell_script dabc 

Maintenant, var2 aura la valeur de “d”, et $@ (après le décalage) contiendra “a”, “b” et “c”.