我使用aws CLI进行查询,在文件中以表格格式对输出进行了排序(降序)。我需要从输出文件中提取一个字段,并将所有独特的行作为一个选项供用户选择。下面是一个输出文件的例子。
Description Snapshot StartTime
Volume0 snap-x123456789 2020-04-22T20:55:10
Volume10 snap-y123456789 2020-04-22T20:45:09
Volume12 snap-a123456789 2020-04-22T20:40:08
Volume15 snap-b123456789 2020-04-22T20:35:07
Volume0 snap-c123456789 2020-04-22T20:30:06
Volume10 snap-d123456789 2020-04-22T20:25:05
目标是在读取上述输出后显示所有卷,并提示用户输入卷号或用户可以输入A代表ALL,这样系统就可以恢复该卷的快照。类似这样。
0 - Volume0
10 - Volume10
12 - Volume12
15 - Volume15
我是这样的,如何让用户输入对应卷号的数字或者输入ALL来还原所有卷?我是否应该使用数组来从输出文件中获取数据?我如何才能有效地做到这一点?
output() {
echo "Here is a list of volumes found in $region"
for DR in (grep Volume# "$input" | top -n 1)
do
echo $DR
done
echo "Hello, please tell me what Volume you are searching for..(Volume?):"
read volSearch
echo -e "Searching for newest SnapshotIds in region using output file GetfileSnapId for:\n" $volSearch
echo
sleep 5
input="/Users/user/Downloads/GetfileSnapId"
if x=$(grep -m 1 "$volSearch" "$input")
then
echo
echo "$x"
else
echo
echo "$volSearch not found..ending search"
fi
extractSnap=$(echo "$x" | cut -d'|' -f2 )
echo
echo $extractSnap
regionoutput=$(echo "$extractSnap" | awk '{print $4}' )
echo
echo "$regionoutput"
}
看看bash选择命令。
我把下面的内容放到一个bash脚本中。
#!/bin/bash
options=($(tail +2 t.txt | cut -d' ' -f1 | sort | uniq) Quit)
PS3='Please enter your choice: '
select opt in "${options[@]}"
do
echo $opt
if [ $opt = "Quit" ]
then
break
fi
done