Menu multitarefa no script de shell

0

Menu multitarefa no script da shell

Digamos que eu tenha um Script da Shell (test.sh) para executar 4 tarefas em um menu. As tarefas são limpar o histórico de terminais, a pasta de downloads, a lixeira ou a saída. O código que tenho até agora é:

#!/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

Como é o script executado:

[1] Clean Terminal

[2] Clean Downloads

[3] Clean Trash

[x] Exit

Option > 

Qual é o problema:

O problema que estou tendo, é que este menu está aceitando apenas uma única entrada do usuário (somente capaz de colocar 1 número por vez). O que eu gostaria que fosse capaz de fazer é inserir múltiplas entradas e simplesmente dividi-las assim (1, 2) ou (1 2 3).

O que eu tentei até agora ...

Eu fiz um brainstorming sobre isso. Uma maneira que pensei em fazer isso foi criar funções individuais para todas as variações de números e adicionar o código, mas isso seria extremamente demorado para menus maiores, e não parece muito lógico.

    
por TazerFace 06.08.2017 / 07:52

1 resposta

1

Se eu estiver entendendo sua pergunta, você deseja permitir que o usuário insira vários códigos de menu no prompt separado por algum delimitador. Então você quer poder processá-los um de cada vez. Em caso afirmativo, use espaço como delimitador e, em seguida, você poderá converter facilmente a sequência de entrada em uma matriz e iterar sobre seu conteúdo:

# 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

Colocar os códigos em uma matriz não é totalmente necessário, mas é conveniente, pois você pode acessar qualquer código individual, determinar o número total, etc.

    
por 06.08.2017 / 08:53