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
)
참고: 코드에 exit
or 문이 포함되어 있거나 + 를 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