2011-01-03 3 views
1

나는 bash를 어떻게 작성해야하는지 알았지 만, 더 이상 이해할 수 없습니다.리눅스 서버에서 다른 입력을 가진 프로그램을 실행하기위한 bash 스크립트를 찾으십시오.

제목에서 알 수 있듯이 Linux 서버에서 실행되는 스크립트 여야합니다.

제 목표는 반복해서 입력하지 않고 명령을 수행하는 것입니다. (I는 각 실행에서 입력 파일을 체인하고 있습니다.)

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 

답변

4

사실, 좀 더 밀접하게 설명을 읽고 나면, 아마 당신이 원하는 :

#!/bin/bash 

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

chmod +x 스크립트가 다음에 전화를 당신의 입력 파일이 패턴에 따라 우리가 조금 더 똑똑 스크립트를 만들 수 변경됩니다 있지만 불분명 경우 같은

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

는 파일 이름은 사장님을보고 무엇을 이자형.

, 당신이 게시 정확한 출력을 얻을 같은 루프에 넣어 : 당신이 계속 그렇게하려면

#!/bin/bash 

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

찾고있는 정확하게 결과의 톤을 반환하고 내가 어떻게 실행합니까

bash script loop example 

당신의 친구입니다 그거? 근원인가? – RanZilber

+0

감사합니다, 이것은 내가 찾고있는 것입니다 – RanZilber

1

, 이것을 사용 :

#!/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

루프의 맨 아래에'i'의 앞뒤에 공백이 있습니다. 또한'expr'은 더 이상 사용되지 않고'i = $ ((i + 1))'을 사용합니다. – SiegeX

+0

@SigeX, thx. 나는 실제로 그것을 '응답 창'에 입력하고 그것을 알아 차리지 못했습니다. –

+1

']'앞에 공백이 필요합니다 (또는'if ((i == 9))') 할 수 있습니다. 다음은 스크립트의 간단한 버전입니다 :'while true; {1..9}에서 나에게해라. do bsprun ...; 끝난; done "- 직접 변수를 관리 할 필요가 없습니다. '... do for ((i = 1; i <= limit; i ++));도 할 수 있습니다. 그래. ". 그건 그렇고,'expr'을 사용하는 대신'((i ++)) '를 사용할 수 있습니다. –

0

그것은 당신 같은 소리 BASH 작성법을 배우고 싶다면

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

의 내 스크립트를 유지하는 저에게 많은 도움이 또한 구글

를 조직 위의 검색 당신이

+0

불행히도 bash에 관해서는 인터넷이 나쁜 예와 나쁜 습관으로 가득차 있습니다. 나는 bash에 관한 정보를 찾을 때 google이 최악의 친구라고 말하고 싶다. –

관련 문제