【问题标题】:How to pass parameter using select in bash如何在bash中使用select传递参数
【发布时间】:2017-10-17 19:03:56
【问题描述】:

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

在此菜单上,我希望能够编写选项,然后向该选项发送参数。喜欢1 filetobemoved.txt。我尝试将$OPTARG 放在菜单调用的方法之后,但这似乎不起作用。

这是我目前的菜单代码,我正在尝试调用恢复方法并将参数(文件名)传递给它。

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

感谢您的帮助。

【问题讨论】:

    标签: bash select parameters menu getopt


    【解决方案1】:

    将执行案例的代码放在一个函数中。然后你可以检查命令行选项并跳过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
    

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多