如何使用bash

时间:2017-10-17 19:03:56

标签: bash select parameters menu getopt

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

在此菜单上,我希望能够编写该选项,然后向该选项发送参数。像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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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