Shell 脚本中的多任务菜单

Shell 脚本中的多任务菜单

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)。

到目前为止我尝试过的...

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

答案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

将代码放入数组中并不是完全必要的,但很方便,因为您可以访问任何单独的代码、确定总数等。

相关内容