首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Bash menu的case esac条件选择

基于Bash menu的case esac条件选择
EN

Stack Overflow用户
提问于 2020-08-24 00:39:13
回答 2查看 93关注 0票数 0

我正在写一个bash脚本来登录到Azure云基于订阅主体与用户名,订阅ID和密码,因为我必须登录到不同的订阅,当需要的基础上,因此我决定将它们放在脚本中,并定义将在提示上询问的选择。

我看了一下,得到了一些帮助,用法如下。

当我使用基于bash菜单的case esac进行探索时,第一个脚本工作得很好,但是我不太理解它。

第一个脚本:

这个很好用..

代码语言:javascript
复制
#!/bin/bash

function azure_login() {    

echo -e "
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
| 1.) Azure login                                |
| 2.) Azure SPN login for non-prod               |     
| 3.) Azure SPN login for prod                   |
| 4.) Quit                                       |
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"

read -e -p "Select the Choice: " choice

if [ "$choice" == "1" ]; then
    echo "logging in to the Azure..."
        az login -u kulfi.khat@xyz.com
 

elif [ "$choice" == "2" ]; then

    echo "logging in to non-prod2 evn..."
        az login --service-principal --username "some_username" --tenant "some_tenant_id"

elif [ "$choice" == "3" ]; then

        echo "logging in to prod3 evn..."
        az login --service-principal --username "another_username" --tenant "anoher_tenant_id"

elif [ "$choice" == "4" ]; then

    clear && exit 0

else

    echo "Please select 1, 2, 3, or 4." && sleep 3
    clear && azure_login

fi
}

azure_login

脚本结果与预期一致:

代码语言:javascript
复制
$ bash azur_login.sh

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
| 1.) Azure login                                |
| 2.) Azure SPN login for non-prod               |
| 3.) Azure SPN login for prod                   |
| 4.) Quit                                       |
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

Select the Choice: 2
logging in to non-prod2 evn...
Password:

第二个脚本:

这个脚本提供了menu供选择,并要求密码和他们登录,并再次要求返回选择,而我想如果选择的选项是正确的,用户登录,然后留在那里,并关闭脚本工作。

代码语言:javascript
复制
#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Option 4" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "logging in to the Azure..."
            az login -u kulfi.khat@xyz.com
            ;;
        "Option 2")
            echo "logging in to prod2 evn..."
            az login --service-principal --username "some_username" --tenant "some_tenant_id"
            ;;
        "Option 3")
            echo "logging in to prod3 evn..."
            az login --service-principal --username "another_username" --tenant "another_tenant_id"  
            ;;
        "Option 4")
            echo "you chose choice $REPLY which is $opt"
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

脚本结果:

代码语言:javascript
复制
$  bash azur_login.sh
1) Option 1
2) Option 2
3) Option 3
4) Option 4
5) Quit
Please enter your choice: 1
logging in to the Azure...
Password:

Please enter your choice:

我正在学习case esac,如果有什么我不能很好的解释或者不是最新的,请原谅。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-24 03:45:32

我喜欢第一个变种,但使用了case

代码语言:javascript
复制
#!/bin/bash
menu="
+-----------------------------------+
| 1.) Azure login                   |
| 2.) Azure SPN login for non-prod  |     
| 3.) Azure SPN login for prod      |
| 4.) Quit                          |
+-----------------------------------+

Select the Choice: "

azure_login() {
    read -rep "$menu" choice
    case             $choice in
        1) echo "logging in to the Azure..."
           az login -u kulfi.khat@xyz.com;;

        2) echo "logging in to non-prod2 evn..."
           az login --service-principal --username "some_username" --tenant "some_tenant_id";;

        3) echo "logging in to prod3 evn..."
           az login --service-principal --username "another_username" --tenant "anoher_tenant_id";;

        4) clear && exit 0;;

        *) echo "Please select 1, 2, 3, or 4." && sleep 3
           clear && azure_login;;
    esac
}
票数 1
EN

Stack Overflow用户

发布于 2020-08-24 01:52:36

您几乎做对了,但是错过了在生成菜单时使用select语句的关键部分。如果您打算为用户显示一个菜单,并在第一次选择后退出提示,那么您应该已经从case语句中分离出来了。

解决方案是使用break语句,该语句无条件地中断select循环。例如

代码语言:javascript
复制
    "Option 1")
        echo "logging in to the Azure..."
        az login -u kulfi.khat@xyz.com
        break                              # to break out the 'Option 1'
        ;;

类似地,将其添加到您的其他案例中。此外,作为更好的提示菜单,请考虑将实际的选项字符串添加到菜单中,而不是使用'Option..'离开

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63549509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档