2010-12-12 16 views
131

Comment trouver le nombre d'arguments passés à un script Bash?Comment trouver le nombre d'arguments passés à un script Bash?

C'est ce que j'ai actuellement:

#!/bin/bash 
i=0 
for var in "[email protected]" 
do 
    i=i+1 
done 

Y at-il d'autres moyens (mieux) de le faire?

+3

Ce code serait tout simplement stocker la chaîne littérale 'i + 1' dans la variable' I' si des arguments sont présents. – Philipp

+0

@TheConstructor: il suffit de regarder le dossier de OP, c'est-à-dire 2 postes en 5,5 ans et seulement une accumulation passive de karma (dont 95% sur cette question). Je ne pense vraiment pas qu'il peut être considéré comme un utilisateur actif ou qu'il donne un coup de fouet sur le fait de conférer une réponse acceptée à quiconque a aidé. Sa question était pourtant parfaitement légitime et elle a aidé d'autres personnes qui ont un manque de pratique similaire à faire de l'homme bash. Alors, vivez et laissez vivre ;-) – Cbhihe

+0

@Cbhihe Je pensais que je réessaye alors. L'OP peut encore lire et voir la notification. J'ai eu un «héros hors d'usage» et je n'essaie généralement pas de rappeler aux OP d'accepter ma réponse. Serait toujours fier, si l'un d'entre eux acceptait finalement ma réponse, cependant. – TheConstructor

Répondre

82
#!/bin/bash 
echo "The number of arguments is: $#" 
a=${@} 
echo "The total length of all arguments is: ${#a}: " 
count=0 
for var in "[email protected]" 
do 
    echo "The length of argument '$var' is: ${#var}" 
    ((count++)) 
    ((accum += ${#var})) 
done 
echo "The counted number of arguments is: $count" 
echo "The accumulated length of all arguments is: $accum" 
+4

+1 pour un travail Exemple! nice – MountainX

+0

Il m'a aidé aussi, ce que j'essayais de faire est; #!/Bin/bash count = 0 somme = 0 avg = 0 for var in "$ @" faire ((somme + = $ var)) ((count ++)) fait ((avg = sum/$ count)) echo "la somme des nombres est: $ somme" echo "la moyenne des nombres est: $ avg" ce qui m'aide à obtenir des nombres inconnus d'arguments et à faire des calculs (vous pouvez modifier l'opérande) Merci pour Dennis Williamson, je l'ai fait. Je poste du code parce qu'il peut être utile pour quelqu'un. –

+1

@ kaanyılmaz: Le seul problème avec cela est que Bash ne fait que de l'arithmétique entière. Si vous voulez des décimales, vous devrez utiliser AWK, 'bc', ou autre chose (ksh93 et ​​zsh peuvent aussi faire des calculs décimaux). Votre code inclut des signes dollar pour certaines variables, mais pas d'autres. Vous devriez être cohérent sur leur utilisation ou non. À l'intérieur '(())' ils ne sont pas nécessaires. Ils sont, cependant, dans les déclarations 'echo'. –

-4

cette valeur est contenue dans la variable $#

+2

En dehors du fait qu'il y a presque la même réponse (mais correcte) qui a 4 ans, votre réponse est fausse - elle devrait être '$ #' – nachteil

1

est inférieure à la facile -

cat countvariable.sh

echo "[email protected]" |awk '{for(i=0;i<=NF;i++); print i-1 }' 

Sortie:

#./countvariable.sh 1 2 3 4 5 6 
6 
#./countvariable.sh 1 2 3 4 5 6 apple orange 
8 
+0

Peut être écrit comme 'echo" $ @ "| awk '{print NF}' ' – user000001

Questions connexes