美文网首页工具-让工具替你干活
Linux shell之awk,for或while实现批量操作

Linux shell之awk,for或while实现批量操作

作者: robot_test_boy | 来源:发表于2019-09-28 18:25 被阅读0次

背景:批量操作虚机,虚机的名称都有一样的前缀比如2019-robot-*,先通过nova list找到每个虚机id,然后通过虚机id进行批量删除虚机。

找到虚机id并批量删除虚机

虚机id的查询结果

# nova list --all-tenants | grep 2019-robot-

| ID                    | Name  | Status |  Task State | Power State | Networks    |

| 957b3fd5 | 2019-robot-01  | ACTIVE  | None  | Running  | net=10.10.0.4  |

| 967b3fh9 | 2019-robot-aa | ACTIVE  | None    | Running  | net=10.10.0.5 |

| 96asdfh5 | 2019-robot-cc | ACTIVE | None    | Running  | net=10.10.0.6 |

步骤1:awk取虚机ID

# nova list --all-tenants | grep 2019-robot-  | awk -F '  '  '{print $2}'

957b3fd5

967b3fh9

96asdfh5

# nova list --all-tenants | grep 2019-robot-  | awk -F '  '  '{print $2}' > /root/2019-robot-vm-hang.txt

#2019-robot-vmid_array=`cat  /root/2019-robot-vm-hang.txt`


## 另外一种方法(可以跳过去):在上边的基础上使用xargs,xargs把虚机ID换行然后放到文件中,赋值环境变量(即放到数组)

# nova list --all-tenants | grep 2019-robot-  | awk -F '  '  '{print $2}'  | xargs

957b3fd5  967b3fh9  96asdfh5

# nova list --all-tenants | grep 2019-robot-  | awk -F '  '  '{print $2}'  | xargs >> /root/2019-robot-vm.txt

## 不知道为啥不能直接这样执行?非要放到一个文件中然后再cat后赋值。 2019-robot-vmid_array=`nova list --all-tenants | grep 2019-robot-  | awk -F '  '  '{print $2}'  | xargs `

#2019-robot-vmid_array=`cat  /root/2019-robot-vm.txt`

步骤2:for循环批量删除虚机

## 一行搞定 for 循环单独执行比较方便

# for vmid in $2019-robot-vmid_array;  do  nova delete $vmid; done

## shell脚本 for 循环,方便阅读

for vmid in $2019-robot-vmid_array

do

        nova delete $vmid

done

## do有多个操作,记录删除时间和查询是否删除

# for vmid in $2019-robot-vmid_array;  do nova delete $vmid;  date ; nova list --all-tenant | grep $vmid; done

步骤2另外一种方法:while和read实现批量删除虚机

# while read vmid; do nova delete $vmid;  date ; nova list --all-tenant | grep $vmid;  done < /root/2019-robot-vm-hang.txt

框架思考--产出通用的工具

从上边的两步操作步骤是别有用心的,在使用过程中不断磨合的,批量操作有很多种类型比如硬重启虚机/软重启虚机/迁移虚机/stop关机/pause暂挂虚机/unpause解挂虚机等,但是虚机的id也就是批量操作所依赖的数据是不变的,意味着正常情况下第1步没必要重复操作,当满足要求的虚机id是动态变化的,那么第1步和第2步也可以同时执行,以上是拆分为两步的原因。

第1步是获取批量操作所依赖的某些数据,根据实际情况看是否需要,当然也可以手工构造数据,比如主机的ip列表;

第2步是执行批量操作,有两个参数:第1步的数据和批量操作的命令。

# ./batch-tool.sh  "ip-list.txt"  "ping -c 2 $ip"

相关文章

网友评论

    本文标题:Linux shell之awk,for或while实现批量操作

    本文链接:https://www.haomeiwen.com/subject/xsrtpctx.html