You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本实现按传入参数停止单台/全部Azure虚拟机求助

修正后的Shell脚本
#!/bin/bash
# 请根据实际业务场景修改以下全局变量配置
WORKSPACE="/你的工作目录绝对路径"
SCRIPTS_DIR="脚本存放目录名"
RESOURCE_GROUP="你的Azure资源组名称"
# 预设需要批量操作的服务器列表
PRESET_VMS=("perf-ld" "perf-ld2" "perf-loadgen2")

# 停止服务器函数
shut_all_vm(){
    cd "$WORKSPACE/$SCRIPTS_DIR" || exit 1
    # 登录操作仅执行一次,避免循环内重复调用
    az login
    for vm in "$@"; do
        echo "正在停止服务器: $vm"
        az vm stop --resource-group "$RESOURCE_GROUP" --name "$vm"
        az vm deallocate -g "$RESOURCE_GROUP" -n "$vm"
        echo "$vm 服务器已成功停止"
    done
}

# 启动服务器函数,按需调用
start_all_vm(){
    cd "$WORKSPACE/$SCRIPTS_DIR" || exit 1
    az login
    for vm in "$@"; do
        echo "正在启动服务器: $vm"
        az vm start --resource-group "$RESOURCE_GROUP" --name "$vm"
        echo "$vm 服务器已成功启动"
    done
}

# 入参处理逻辑
if [ $# -eq 0 ]; then
    # 无参数调用默认启动所有预设服务器
    start_all_vm "${PRESET_VMS[@]}"
else
    OP_TYPE="$1"
    if [ $# -ge 2 ]; then
        # 传入指定服务器名,仅操作该单台服务器
        TARGET_VMS=("$2")
    else
        # 未传服务器名,操作所有预设服务器
        TARGET_VMS=("${PRESET_VMS[@]}")
    fi
    # 执行对应操作
    "$OP_TYPE" "${TARGET_VMS[@]}"
fi

核心修改说明

  • 重构目标服务器列表生成逻辑:传入第二个参数时仅操作指定服务器,未传时自动加载预设的服务器列表,完全匹配需求
  • 将az登录操作移出循环,避免每操作一台服务器就重复执行一次登录
  • 增加路径切换异常退出逻辑,cd失败时直接终止脚本避免后续操作异常
  • 所有变量统一用双引号包裹,规避路径、名称含空格时的语法错误
  • 补充默认操作逻辑,无参数调用时默认执行启动所有VM的操作,符合调用示例要求
  • 新增配套启动函数,可直接调用实现批量/指定服务器启动

使用示例

  • 启动所有预设VM:./script.sh
  • 停止所有预设VM:./script.sh shut_all_vm
  • 仅停止perf-loadgen2服务器:./script.sh shut_all_vm perf-loadgen2
  • 仅启动perf-ld服务器:./script.sh start_all_vm perf-ld

提示:如果已经配置了Azure CLI免密登录,可以删除脚本中的az login相关代码

内容的提问来源于stack exchange,提问作者Kandikuppa Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:08