명령을 입력한 후 스크립트 파일이 초기 프롬프트로 돌아가도록 하려면 어떻게 해야 합니까? (루프 포함)? [폐쇄]

명령을 입력한 후 스크립트 파일이 초기 프롬프트로 돌아가도록 하려면 어떻게 해야 합니까? (루프 포함)? [폐쇄]

예를 들어 다음 코드가 있습니다.

#!/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종료 해야 합니다 . 이 문자열은 사용자가 잘못된 선택을 입력한 경우에만 표시됩니다(여기에 작성된 방식).whilebreakselectPress Enter to redisplay menu

break명령문 내부에 있는 내용은 프로그램이 외부 루프로 다시 종료된 다음 즉시 다시 실행 select되도록 합니다 (메뉴 다시 표시). 이는 사용자가 메뉴에서 옵션을 선택한 경우에 발생합니다.whileselectinfo

답변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

관련 정보