我正在写一个bash脚本来登录到Azure云基于订阅主体与用户名,订阅ID和密码,因为我必须登录到不同的订阅,当需要的基础上,因此我决定将它们放在脚本中,并定义将在提示上询问的选择。
我看了一下,得到了一些帮助,用法如下。
当我使用基于bash菜单的case esac进行探索时,第一个脚本工作得很好,但是我不太理解它。
第一个脚本:
这个很好用..
#!/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脚本结果与预期一致:
$ 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供选择,并要求密码和他们登录,并再次要求返回选择,而我想如果选择的选项是正确的,用户登录,然后留在那里,并关闭脚本工作。
#!/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脚本结果:
$ 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,如果有什么我不能很好的解释或者不是最新的,请原谅。
发布于 2020-08-24 03:45:32
我喜欢第一个变种,但使用了case
#!/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
}发布于 2020-08-24 01:52:36
您几乎做对了,但是错过了在生成菜单时使用select语句的关键部分。如果您打算为用户显示一个菜单,并在第一次选择后退出提示,那么您应该已经从case语句中分离出来了。
解决方案是使用break语句,该语句无条件地中断select循环。例如
"Option 1")
echo "logging in to the Azure..."
az login -u kulfi.khat@xyz.com
break # to break out the 'Option 1'
;;类似地,将其添加到您的其他案例中。此外,作为更好的提示菜单,请考虑将实际的选项字符串添加到菜单中,而不是使用'Option..'离开
https://stackoverflow.com/questions/63549509
复制相似问题