2010-06-03 6 views
0

J'ai un script shell dans lequel un utilisateur passe différentes tailles en tant qu'arguments de ligne de commande. Pour chacune de ces tailles, je veux effectuer une tâche, puis enregistrer la sortie de cette tâche dans un fichier .txt avec la taille dans le nom.Script de shell: Génération du nom du fichier de sortie dans le script, puis écriture dans le script

  1. Comment puis-je prendre la ligne de commande passée et de faire partie d'un NomChaîne pour le fichier de sortie? Je sauvegarde le fichier de sortie dans un répertoire spécifié par un autre argument de la ligne de commande. Peut-être qu'un exemple l'éclaircira. Dans le foorlop, la valeur i représente l'argument de la ligne de commande que j'ai besoin d'utiliser, mais $$ i ne fonctionne pas.

./runMe arg1 arg2 outputDir [taille1 size2 size3 ...]

for ((i=4; i<$#; i++)) 
do 
    ping -s $$i google.com >> $outputDir/$$iresults.txt 
done 

Je dois savoir comment construire $ outputDir/$$ chaîne iresults.txt. En outre, le ping -s $$ je ne fonctionne pas. C'est comme si j'avais besoin de deux niveaux de remplacement. J'ai besoin de remplacer le $ [$ i] interne $ i avec la valeur dans la boucle, comme 4 pour ex, ce qui en fait 4 $. Remplacez ensuite $ 4 par le quatrième argument de la ligne de commande!

Toute aide serait grandement appréciée.

Merci!

+0

:::::::: : Bash? – wilhelmtell

Répondre

0

Indirection utilise le préfixe de substitution !:

echo "${!i}" 

Mais vous devriez utiliser un nu pour après le passage des précédentes sur:

shift 
shift 
for f 
do 
    echo "$f" 
done 
+0

Ok, je comprends le shiffting, mais comment dois-je l'utiliser pour construire la chaîne? – NewShellScripter

+0

Le décalage ne construit pas la chaîne. La boucle for construit la chaîne. –

0
for ARG in [email protected]; do 
    $COMMAND > ${ARG}.txt 
done 
+0

Je ne comprends pas vraiment la partie $ COMMAND? – NewShellScripter

+0

Et comment je concaténerais une chaîne avec le $ {ARG} .txt comme: {ARG} results.txt – NewShellScripter

+0

'$ COMMAND' est votre commande. Substituez-le par n'importe quoi: par exemple, 'ping -s ...'. Comme pour la concaténation: oui, '$ {ARG} results.txt' fera l'affaire. Étant donné l'argument 23, il produit 23results.txt. – wilhelmtell

Questions connexes