2017-10-17 95 views
0

我正在尝试创建一个bash脚本,它允许用户同时使用菜单样式和命令行切换样式界面。我想知道是否有办法将参数传递给select中的菜单选项,就好像它只是一个脚本的参数。例如,在我的脚本中,我可以通过说junk -d file.txt指定一个文件移动到我的垃圾文件夹。但是如果用户没有指定任何参数,它应该使用select选项。即1) move file 2) clear junk folder 3) watch folder如何通过在bash中选择传递参数

在这个菜单上,我希望能够编写该选项,然后发送一个参数到该选项。像1 filetobemoved.txt。我试过在菜单调用的方法后放$OPTARG,但这似乎不起作用。

下面是我目前菜单中的代码,我试图调用recover方法并将参数(文件名)传递给它。

if (($# == 0)) 
then if (($OPTIND == 1)) 
then select menu_list in list recover delete total watch kill exit 
    do case $menu_list in 
    "list") list;; 
    "recover") recover $GETOPT;; 
    "delete") delete;; 
    "total") total;; 
    "watch") _watch;; 
    "kill") _kill;; 
    "exit") exit 0;; 
    *) echo "unknown option";; 
    esac 
    done 
fi 

感谢您的任何帮助。

回答

0

将执行个案的代码放入函数中。然后你可以检查命令行选项并跳过select,然后调用该函数。

do_command() { 
    case "$1" in 
    "list") list;; 
    "recover") recover $GETOPT;; # had -a after recover 
    "delete") delete;; 
    "total") total;; 
    "watch") _watch;; 
    "kill") _kill;; 
    "exit") exit 0;; 
    *) echo "unknown option";; 
    esac 
} 
if (($# == 0)) 
then if (($OPTIND == 1)) 
    then select menu_list in list recover delete total watch kill exit 
     do do_command "$menu_list" 
     done 
    fi 
elif [[ "$1" = "-d" ]] 
then do_command delete 
... 
fi