쉘 스크립트의 멀티태스킹 메뉴

쉘 스크립트의 멀티태스킹 메뉴

쉘 스크립트의 멀티태스킹 메뉴

메뉴에서 4가지 작업을 수행하는 쉘 스크립트(test.sh)가 있다고 가정해 보겠습니다. 작업은 터미널 기록, 다운로드 폴더, 휴지통 또는 종료를 정리하는 것입니다. 지금까지 내 코드는 다음과 같습니다

#!/bin/bash

function menu {
clear
echo "[1] Clean Terminal"
echo ""
echo "[2] Clean Downloads"
echo ""
echo "[3] Clean Trash"
echo ""
echo "[x] Exit"
echo ""

read -p "Option > " option

}

function terminal {
    clear
    cd
    cat /dev/null > .bash_history
    echo "Terminal history is now cleared!"
}

function downloads {
     clear
     cd
     rm -r Downloads/*
     echo "Downloads directory is now cleared!"
}

function trash {
     clear
     cd
     rm -rf ~/.local/share/Trash/*
     echo "Trash is now cleared!"
}

function terminate {
     exit
}

end_script=0
while [ "${end_script}" != 1 ];do
    menu
    case ${option} in
    1)
        terminal
    ;;

    2)
        downloads
    ;;

    3)
        trash
    ;;


    x)

        terminate
    ;;

    *)
        clear
        echo "unknown usage!"
    ;;
    esac
done

실행된 스크립트는 다음과 같습니다.

[1] Clean Terminal

[2] Clean Downloads

[3] Clean Trash

[x] Exit

Option > 

문제가 무엇입니까:

내가 겪고 있는 문제는 이 메뉴가 사용자의 단일 입력(한 번에 1개의 숫자만)만 받아들인다는 것입니다. 내가 할 수 있기를 원하는 것은 여러 개의 입력을 받아 이를 (1, 2) 또는 (1 2 3)과 같이 나누는 것입니다.

내가 지금까지 시도한 것은 ...

나는 이 문제에 대해 한동안 브레인스토밍을 해왔습니다. 내가 생각한 한 가지 방법은 별도의 기능을 만들고 모든 숫자 변경에 대해 코드를 추가하는 것이었지만 더 큰 메뉴의 경우 시간이 많이 걸리고 논리적으로 보이지 않습니다.

답변1

귀하의 질문을 이해한다면 사용자가 프롬프트에서 구분 기호로 구분된 여러 메뉴 코드를 입력할 수 있도록 허용하고 싶습니다. 그런 다음 한 번에 하나씩 처리할 수 있기를 원합니다. 그렇다면 공백을 구분 기호로 사용하면 입력 문자열을 배열로 쉽게 변환하고 해당 내용을 반복할 수 있습니다.

# let's say user enters "a b c" and we store in input_str
input_arr=($input_str)
for cmd in "${input_arr[@]}"; do
  # process command associated with $cmd
done

코드를 배열에 넣는 것이 꼭 필요한 것은 아니지만 개별 코드에 액세스하고 전체를 결정하는 등의 작업이 가능하므로 편리합니다.

관련 정보