本地Shell脚本批量停止Azure VM失败求助:问题排查与方案建议
问题描述
我在本地使用Shell脚本批量停止Azure门户中的VM,但脚本无法正常运行。单独执行相关命令可成功,但通过循环执行时出现问题,怀疑循环逻辑存在异常。请问是否必须使用PowerShell脚本实现此操作?请帮忙排查故障原因。
我的Shell脚本如下:
while read rgname vmname do "azure cli command to stop vm $rganme $vmname" done < output.txt
output.txt内容如下:
rg1 vm1 rg2 vm2 rg3 vm3
故障排查与解决方案
- 无需切换到PowerShell:Azure CLI完全支持Shell环境操作,Shell脚本可正常实现批量停止VM的需求,没必要改用PowerShell。
- 脚本核心错误:
- 变量拼写错误:脚本中使用了
$rganme,但定义的变量是$rgname(少了一个字母g),导致变量无法正确取值,命令执行失败。 - 命令格式错误:将Azure CLI命令用双引号包裹,Shell会把整个字符串当作一个命令执行,而非解析变量并运行Azure CLI。需去掉双引号,直接编写命令。
- 变量拼写错误:脚本中使用了
- 修正后的脚本:
while read rgname vmname do az vm stop --resource-group "$rgname" --name "$vmname" done < output.txt
- 额外注意事项:
- 确保
output.txt无多余空行或特殊字符,可通过sed '/^$/d' output.txt过滤空行后再传入循环。 - 执行脚本前需通过
az login完成Azure账号认证,避免权限问题导致命令失败。
- 确保
内容的提问来源于stack exchange,提问作者Giridhar Kumar Jha
相关产品推荐
相关产品推荐

