메뉴를 만들 때 변수/파일에서 읽으려면 Case 문을 사용하세요.

메뉴를 만들 때 변수/파일에서 읽으려면 Case 문을 사용하세요.
read -p 'enter your choice [ 1-5 ]' choice
        case $choice in

        1)abcrequest

        2)defresponse

        3)afgRequestReply

        4)FSfReply

        5)ghjrequest

사례 설명이 파일에서 이 숫자를 읽은 다음 선택 항목을 입력한 후 해당 선택 항목으로 이동해야 합니다.

제 문의사항을 이해해주시길 바랍니다.

답변1

select루프를 사용하십시오 .

#!/usr/bin/env bash

list=~/tmp/list.txt

PS3='enter your choice: '

while read -r index element; do
    _list[index]=$element
done < <(awk -F\) '{print $1,$2}' "$list")

select i in "${_list[@]}"; do
    case $i in
        *)  echo "Choice is ${_list[REPLY]}";;
    esac
done

list메뉴가 포함된 파일의 경로로 설정되어야 합니다. 내 경우에는 다음이 포함됩니다.

$ cat list.txt
1)abcrequest
2)defresponse
3)afgRequestReply
4)FSfReply
5)ghjrequest

PS3사용되는 프롬프트가 될 것입니다select

그런 다음 각 행을 살펴보고 list해당 값에서 숫자를 분리한 다음 그로부터 배열을 만듭니다. _list포함됩니다:

_list=([1]="abcrequest" [2]="defresponse" [3]="afgRequestReply" [4]="FSfReply" [5]="ghjrequest")

이제 select메뉴의 각 항목을 포함하는 메뉴가 만들어집니다 _list. REPLY해당 인덱스의 값으로 작업을 수행할 수 있도록 선택한 숫자가 포함됩니다 _list. (직접 사용해도 됩니다 $i)

참고: 코드에 exitor 문이 포함되어 있거나 + 를 break누르지 않는 한 이 목록은 계속해서 메시지를 표시합니다 .ctrlc

$ ./script.sh
1) abcrequest
2) defresponse
3) afgRequestReply
4) FSfReply
5) ghjrequest
enter your choice: 4
Choice is FSfReply
enter your choice: 5
Choice is ghjrequest
enter your choice: 2
Choice is defresponse
enter your choice: ^C

관련 정보