2010-07-10 8 views
3

어떻게 스크립트 또는 다른 응용 프로그램에 루프를 작성하지 않고도 유닉스 쉘에서 명령/프로그램 한 루프.스크립트와 쉘에서 명령 루프를 만들기

예를 들어, 가벼운 센서 값을 출력하는 스크립트를 작성하지만, 난 여전히 지금 당장 테스트를 해요 그래서 그것을 반복적으로 실행 파일을 실행하여 루프를 실행합니다.

어쩌면 나는 또한 단지 루프에서 "LS"또는 "DF"를 실행하고 싶습니다. 나는 bash 코드 몇 줄에서 쉽게이 작업을 수행 할 수 있지만 주어진 명령 집합에 대한 명령을 터미널에 입력 할 수 있다는 것도 나에게 유용 할 것이다.

답변

5

당신은, 당신이라는 쉘 스크립트를 작성할 수있는 시점에서

for NAME [in LIST ]; do COMMANDS; done 

에서 처럼 대신 반환 세미콜론을 넣어 한 줄을 작성하여 쉘 스크립트에 작성합니다 동일한 루프를 쓸 수 있습니다 예를 들어 repeatCOMMANDS$1으로 간단히 변경하여 N 번 실행합니다. 받아들이는 인수에서 제외

+0

고마워, 나는 무한한 동안 선택했다 : while [1]; sudo ./sensorTest.py; done – cdated

1

은 스크립트에서 할 수있는 일이 명령 행에서 수행 할 수 있습니다.

while sleep 5s 
do 
    ls photos 
end 
2

이 정확하게 귀하의 질문에 대답하지 않지만, 나는 그것이 relavent 느꼈다 : 이전 내가 전송 된 파일을 같은 디렉토리가 채워보고 직접 배쉬에이를 입력했습니다. 쉘 루핑을하는 중대한 것 중 하나는 일부 명령이 항목 목록을 반환한다는 것입니다. 물론 분명하지만, for 루프를 사용하면 항목 목록에서 명령을 실행할 수 있습니다.

for $file in `find . -name *.wma`; do cp $file ./new/location/ done; 

매우 창의력을 발휘할 수 있습니다.

+0

이것은 강력한 기술이지만 파일 이름에 공백이 있으면 실패합니다. 또한, 당신의 예제에서'{}'은 의미가 없습니다. 변수가 필요합니다 :'$ list에있는 항목에 대해서; do "echo $ item"; done' –

+0

find는'-exec' 인수가 for 루프와 같은 일을하지만, 공간 친화적 인 방식으로하기 때문에 나쁜 예입니다. 아직도, 그것은 훌륭한 기술이고 자주 사용합니다. – Benson

2

나는, 그냥 당신이 원하는 무엇을 정확하게 "볼"의 사용을 권장하고,이 명령의 각 실행하기 전에 터미널을 청소, 그래서 변화를 감시하기 쉽다.

당신은 아마 watch ls 또는 watch ./my_script.sh을 시도, 이미 있습니다. -n 옵션을 사용하여 각 실행 사이의 대기 시간을 초 단위로 제어 할 수 있으며 연속 실행의 출력 차이를 강조 표시하려면 -d를 사용할 수 있습니다.

시도 :

실행 LS 각 초 :

watch -n 1 ls 

실행 my_script.sh 각 삼초, 강조의 차이 :

watch -n 3 -d ./my_script.sh 

시계 프로그램 매뉴얼 페이지 http://linux.die.net/man/1/watch

관련 문제