2012-07-07 7 views
9

Zasadniczo mam skrypt bash, który wykonuje 5 poleceń z rzędu. Chcę dodać logikę, która pyta mnie "Czy chcesz wykonać polecenie A" i jeśli odpowiem "TAK", polecenie zostanie wykonane, w przeciwnym razie skrypt przeskoczy do innej linii i pojawi się komunikat "Czy chcesz wykonać polecenie B" .Prosty skrypt bash, który reaguje na dane wejściowe tak/nie użytkownika?

Skrypt jest bardzo prosty i wygląda to

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

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

dlaczego używasz '&' i tam śpisz? powinieneś uruchomić to synchronicznie ... – cha0site

+0

@ cha0site Uruchamiam jakieś zewnętrzne narzędzie programistyczne i bez & narzędzie uruchomi tylko pierwsze polecenie – sandalone

Odpowiedz

16

użyć read polecenie wbudowane, aby uzyskać dane od użytkownika.

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

umieścić wyżej w function który zabierze polecenia (i ewentualnie szybka) jako argument, jeśli masz zamiar to zrobić wiele razy.

+0

Nie działa z podwójnym [[nawiasami, ale działa z pojedynczym [nawiasem. – sandalone

+1

To naprawdę powinno działać z '[[. Czy na pewno używasz 'bash', z' #!/bin/bash' jako pierwsza linia twojego skryptu? – Mat

+0

nie ma "#!/bin/bash' w pierwszym wierszu. Myślę, że to może być problem, ponieważ nie powiedziałem jednoznacznie, że to bash. – sandalone

1

Chcesz Bash read builtin. Można wykonać to w pętli przy użyciu niejawny ODPOWIEDZI zmienna tak:

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

Ta pętla przez wszystkich poleceń, poprosi użytkownika dla każdego z nich, a następnie wykonać polecenie tylko wtedy, gdy pierwsza litera odpowiedź użytkownika to znak Y lub y. Mam nadzieję, że pomaga!

+0

Możesz chcieć uniknąć' eval' jeśli możesz. Jednym z pomysłów byłoby enkapsulacja każdego polecenia w funkcji, która albo sama się opisuje, albo uruchamia się w zależności od tego, jak go wywołasz. – tripleee

+0

Rozwijanie parametrów małych liter '$ {,,}' wymaga Bash 4. I zobacz [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –

Powiązane problemy