bash - Shell 脚本中的多任务菜单

标签 bash shell scripting

Shell 脚本中的多任务菜单

我有一个 Shell 脚本 ( test.sh ) 可以在一个菜单中执行 4 个任务。任务是清理终端历史记录、下载文件夹、垃圾桶或退出。到目前为止我的代码是:

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

到目前为止我尝试了什么......

关于这个我已经集思广益了一段时间。我想到的一种方法是为所有数字变体创建单独的函数并添加代码,但这对于较大的菜单来说会非常耗时,而且看起来不太合逻辑。

最佳答案

试试这个:

#!/bin/bash

while true; do
  read -p "Option > " options
  for option in ${options//,/ }; do   # replace all , by white spaces
   case ${option} in
    1) echo "function terminal";;
    2) echo "function downloads";;
    3) echo "function trash";;
    x) echo "terminate"; exit;;
    *) echo "unknown usage!";;
    esac
  done
done

读取提示时的用法示例:5,3, 2 1 x

输出:

unknown usage!
function trash
function downloads
function terminal
terminate

关于bash - Shell 脚本中的多任务菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45533316/

相关文章:

linux - 语法错误: operand expected (error token is “+” ) (i coudn't resolve this problem with the other thread)

bash - 如果没有扩展名为 .c 的文件,则 for 循环包括通配符 (*.c)。我怎么走?

linux - 连接 500 个文件,同时从除第一个文件之外的每个文件中删除第一行

linux - 用空格替换\

正则表达式命令行更改每行的格式

macos - 查找具有(损坏的) future 日期的所有文件并修改为今天

javascript - 如何将 javascript if 条件移动到外部文件?

bash - ubuntu bash脚本没有运行

php - 在 Apache + PHP + Bash 中让进程 fork 并独立于父进程

c++ - 没有空格的 Lex 解析