2012-07-07 1 views
9

기본적으로 5 개의 명령을 연속적으로 실행하는 bash 스크립트가 있습니다. 나는 "나에게 명령 A를 실행 하시겠습니까?"라고 물어 보는 논리를 추가하고 싶습니다. 예라고 말하면 명령이 실행됩니다. 그렇지 않으면 스크립트가 다른 행으로 건너 뛰고 "명령 B를 실행 하시겠습니까?"라는 메시지가 나타납니다. .사용자의 예/아니오 입력에 반응하는 간단한 if/else bash 스크립트?

이 스크립트는 매우 간단이

echo "Running A" 
commandA & 
sleep 2s; 
echo "done!" 

echo "Running B" 
commandB & 
sleep 2s; 
echo "done!" 
... 
+2

왜 '&'를 사용하고 거기에서 자고 있습니까? 당신은 그것을 동 기적으로 실행해야합니다 ... – cha0site

+0

@ cha0site 외부 개발 툴을 시작하고없이 & 도구가 첫 번째 명령 만 시작합니다. – sandalone

답변

16

사용과 같이 사용자의 입력을 얻을 수있는 read 내장을 보인다.

read -p "Run command $foo? [yn]" answer 
if [[ $answer = y ]] ; then 
    # run the command 
fi 

는 당신이 여러 번 할 거라면 인수로 명령 (및 프롬프트) 소요 function로 위를 넣습니다.

+0

더블 [[대괄호]와 함께 작동하지 않지만 단일 [대괄호]와 작동합니다. – sandalone

+1

정말 [[['. 당신은'bash'를'#!/bin/bash'를 스크립트의 첫 번째 줄로 사용 하시겠습니까? – Mat

+0

'#!/bin/bash'를 첫 줄에 입력하십시오. 나는 그것이 명시 적으로 bash라고 말하지 않았으므로 이것이 문제가 될 수도 있습니다. – sandalone

1

배시를 원한다면 read builtin. 당신은 암시 적 REPLY 변수과 같이 사용하여 루프에서이 작업을 수행 할 수 있습니다, 모든 명령을 통해

for cmd in "echo A" "echo B"; do 
    read -p "Run command $cmd? " 
    if [[ ${REPLY,,} =~ ^y ]]; then 
     eval "$cmd" 
     echo "Done!" 
    fi 
done 

이 의지 루프를 각각에 대해 사용자에게 메시지를 표시 한 다음 명령을 실행 첫 번째 편지는 경우 사용자의 응답은 Y 또는 Y 문자입니다. 희망이 도움이됩니다!

+0

할 수 있으면'eval'을 피하려고 할 수도 있습니다. 하나의 아이디어는 함수를 호출하는 방법에 따라 자체를 설명하거나 스스로를 실행하는 함수에 각 명령을 캡슐화하는 것입니다. – tripleee

+0

소문자 확장 매개 변수'$ {,,}'에는 Bash 4가 필요합니다. [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050)을 참조하십시오. –

관련 문제