예를 들어 다음 코드가 있습니다.
#!/bin/sh
echo "Please enter function: \c"
read ANS
case $ANS in
author)
echo "John"
;;
내 이름으로 응답한 후 스크립트가 초기 프롬프트(함수를 입력하십시오)로 돌아가도록 하려면 어떻게 해야 합니까?
답변1
당신은 다음과 같은 것을 원할 수도 있습니다
#!/bin/sh
while true; do
printf 'Say something: ' >&2
read -r something
case $something in
quit) break ;;
info) echo 'There is no info' ;;
*) echo 'Invalid input' >&2
esac
done
echo 'Bye!'
이는 일반적인 읽기 작업 유형의 루프입니다. 무제한이지만 사용자는 를 입력하여 종료할 수 있습니다 quit
. 각 작업 후에 사용자에게 다른 입력을 요청하는 메시지가 표시됩니다.
또는 다음을 사용하십시오 bash
.
#!/bin/bash
while read -p 'Say something: ' -r something; do
case $something in
quit) break ;;
info) echo 'There is no info' ;;
*) echo 'Invalid input' >&2
esac
done
echo 'Bye!'
이렇게 하면 사용자가 Ctrl+D메시지가 표시될 때 키를 눌러 루프를 종료할 수 있습니다.또는입력하다 quit
.
세 번째 방법 bash
,
#!/bin/bash
PS3='Select something: '
while true; do
select something in 'info' 'quit'; do
case $something in
quit) break 2;;
info) echo 'There is no info'
break ;;
*) echo 'Invalid input' >&2
esac
echo 'Press Enter to redisplay menu' >&2
done
done
echo 'Bye!'
이 변형에서는 사용자에게 콘텐츠를 선택할 수 있는 메뉴가 제공됩니다. 각 작업 후에 메뉴가 다시 나타납니다. 사용자는 선택 해제를 통해 선택을 해제합니다 quit
. 사용된 프롬프트 텍스트는 쉘 변수 select
에서 가져옵니다 PS3
.
문 자체가 루프이기 때문에 (단지 아니라) 루프를 break 2
종료 해야 합니다 . 이 문자열은 사용자가 잘못된 선택을 입력한 경우에만 표시됩니다(여기에 작성된 방식).while
break
select
Press Enter to redisplay menu
break
명령문 내부에 있는 내용은 프로그램이 외부 루프로 다시 종료된 다음 즉시 다시 실행 select
되도록 합니다 (메뉴 다시 표시). 이는 사용자가 메뉴에서 옵션을 선택한 경우에 발생합니다.while
select
info
답변2
while 루프를 사용하세요:
#!/bin/sh
while :; do
read -rp 'Please enter function: '
case $REPLY in
author)
echo "John"
;;
esac
done
이는 사용자가 권장하지 않는 인터럽트 시퀀스를 입력할 때까지 실행됩니다. 최소한 종료 옵션이 있는지 확인하겠습니다.
#!/bin/sh
while :; do
read -rp 'Please enter function: '
case $REPLY in
author)
echo "John"
;;
exit)
break
;;
esac
done
또 다른 옵션(bash를 사용할 수 있는 경우)은 메뉴를 선택하는 것입니다:
#!/bin/bash
PS3='Select a function: '
select FUNC in author publisher release_date exit; do
case $FUNC in
author)
echo 'John'
;;
publisher)
echo 'Penguin'
;;
release_date)
echo '1996'
;;
exit)
break 2
;;
*)
echo 'ERROR! Unknown selection' >&2
;;
esac
done