2011-01-03 2 views
1

Je savais comment écrire ce bash une fois, mais je n'arrive plus à le comprendre.Je cherchais un script bash pour exécuter un programme avec différentes entrées sur le serveur linux

Comme le titre l'indique, il devrait s'agir d'un script destiné à être exécuté sur un serveur Linux.

Mon but est de faire ces commandes sans avoir à les saisir encore et encore. (j'enchaînant les fichiers d'entrée dans chaque série.)

bsprun -npes 1 ./a.out file1.txt file2.txt 
bsprun -npes 2 ./a.out file1.txt file2.txt 
bsprun -npes 3 ./a.out file1.txt file2.txt 
bsprun -npes 4 ./a.out file1.txt file2.txt 
bsprun -npes 5 ./a.out file1.txt file2.txt 
bsprun -npes 6 ./a.out file1.txt file2.txt 
bsprun -npes 7 ./a.out file1.txt file2.txt 
bsprun -npes 8 ./a.out file1.txt file2.txt 

Répondre

4

En fait, après avoir lu votre description un peu plus près, peut-être que vous voulez ceci:

#!/bin/bash 

bsprun -npes "$1" ./a.out "$2" "$3" 

chmod +x le script puis l'appeler comme

./myscript 1 file1.txt file2.txt 
./myscript 2 file2.txt file3.txt 
./myscript 3 file4.txt file5.txt 
... 

Si vos fichiers d'entrée changent selon un modèle que nous pourrions faire le script un peu plus intelligent, mais on ne sait pas ce que vos noms de fichiers regarder lik e.

Pour obtenir la sortie exacte que vous avez publié, le mettre dans une boucle comme:

#!/bin/bash 

for i in {1..8}; do 
    bsprun -npes $i ./a.out file1.txt file2.txt 
done 
+0

et comment puis-je exécuter cette ? avec la source? – RanZilber

+0

merci, c'est ce que je cherchais – RanZilber

1

Si vous voulez le faire sans cesse, utilisez ceci:

#!/bin/bash 

i="1" 

while true; 
do 
    if [ $i -eq 9]; then 
     i=1 
    fi 
    bsprun -npes $i ./a.out file1.txt file2.txt 
    i = `expr $i + 1` 
done 
+0

Vous avez des espaces avant et après le 'i' en bas de la boucle. De plus, 'expr' a été déprécié, utilisez plutôt' i = $ ((i + 1)) ' – SiegeX

+0

@SigeX, thx. Je l'ai tapé dans la fenêtre de réponse et je ne l'ai pas remarqué. –

+1

Vous avez besoin d'un espace avant le ']' (ou vous pouvez faire 'if ((i == 9))'). Voici une version plus simple de votre script: 'while true; fais pour i dans {1..9}; faire bsprun ...; terminé; done' - pas besoin de gérer la variable vous-même. Vous pouvez également faire '... do pour ((i = 1; i <= limite; i ++)); fais ... » Au fait, au lieu d'utiliser 'expr', vous auriez pu utiliser' ((i ++)) '. –

0

On dirait que vous voulez apprendre à écrire BASH, vous pouvez jeter un oeil à

https://github.com/37signals/sub

son m'a beaucoup aidé à garder mes scripts organisés

aussi google est votre ami

bash script loop example 

la recherche ci-dessus renvoie une tonne de résultats exactement ce que vous cherchez

+0

Malheureusement, quand il s'agit de bash, Internet est plein de mauvais exemples et de mauvaises pratiques. Je dirais que google est votre pire ami en regardant des informations sur bash. –

Questions connexes