这个条目似乎是我想做的大约 80%,但我想出的东西都没有工作: bash: how to delete elements from an array based on a pattern
我有两个数组:
@tapes_in_drives=(SP1026,SP0995,SP0434)
@tapes=(SP0001,SP0002,SP0434,SP0995,SP1026,SP2000,SP3000)
我需要一个 bash 解决方案,它可以从@tapes 中删除@tapes_in_drives 中存在的所有条目。
我正在构建一个脚本,以根据到期日期等自动从磁带库中弹出磁带。
我试过这个:
for i in "${tapes_in_drives[@]}"; do
tapes=(${tapes[@]//*$i*})
done
但它不起作用,没有任何东西被删除。
感谢您的任何帮助,您可以提供。
编辑:
这是我正在使用的代码,我最初是用 Perl 编写的,因此是 @variable 定义,当我写这个问题时我非常累。
代码:
#!/usr/bin/bash
# If media expires less than this many days, keep it
export days_expired="30"
# Set to 1 to get debug output to console
export debug="1"
# Get list of SPxxxxx tapes that are physically in the library
if [ $debug -eq 1 ]; then echo "Getting tape list"; fi
export tapes=`vmquery -rn 1 -b | tail +4 | awk '{print \$1}' && vmquery -rn 4 -b | tail +4 | awk '{print \$1}'`
if [ $debug -eq 1 ]; then echo ${tapes[@]}; fi
# Query tape drives for tapes
export tapes_in_drives=`ssh srv-reg-nbms-01 "echo 's d q'|/usr/openv/volmgr/bin/tldtest -r /dev/smc0|grep 'Barcode'" | awk '{print $3}' && ssh srv-reg-nbms-02 "echo 's d q'|/usr/openv/volmgr/bin/tldtest -r /dev/smc0|grep 'Barcode'" | awk '{print $3}'`
if [ $debug -eq 1 ]; then
echo ""
echo "Tapes in Drives:"
echo ${tapes_in_drives[@]}
echo "";
fi
# Remove tapes in drives from list of tapes
for i in "${tapes_in_drives[@]}"; do
tapes=(${tapes[@]//*$i*})
done
echo "Tape List 2"
echo ${tapes[@]}
结果:
获取磁带列表
SP0011 SP0039 SP0402 SP0434 SP0464 SP0516 SP0551 SP0600 SP0604 SP0726 SP0731 SP0765 SP0767 SP0779 SP0781 SP0787 SP0793 SP0794 SP0805 SP0828 SP0830 SP0832 SP0927 SP0928 SP0936 SP0983 SP0995 SP1001 SP1004 SP1008 SP1015 SP1017 SP1026 SP1033 SP1036 SP1038 SP0042 SP0049 SP0150 SP0462 SP0473 SP0517 SP0557 SP0560 SP0642 SP0659 SP0697 SP0712 SP0723 SP0766 SP0777 SP0786 SP0788 SP0792 SP0907 SP0910 SP0923 SP0925 SP0926 SP0940 SP0963 SP0981 SP0986 SP0989 SP0994 SP0999 SP1007 SP1020 SP1021 SP1027 SP1039
驱动器中的磁带:
SP1001 SP1038 SP0923 SP0926 SP0925
磁带清单 2
SP0011 SP0039 SP0402 SP0434 SP0464 SP0516 SP0551 SP0600 SP0604 SP0726 SP0731 SP0765 SP0767 SP0779 SP0781 SP0787 SP0793 SP0794 SP0805 SP0828 SP0830 SP0832 SP0927 SP0928 SP0936 SP0983 SP0995 SP1001 SP1004 SP1008 SP1015 SP1017 SP1026 SP1033 SP1036 SP1038 SP0042 SP0049 SP0150 SP0462 SP0473 SP0517 SP0557 SP0560 SP0642 SP0659 SP0697 SP0712 SP0723 SP0766 SP0777 SP0786 SP0788 SP0792 SP0907 SP0910 SP0923 SP0925 SP0926 SP0940 SP0963 SP0981 SP0986 SP0989 SP0994 SP0999 SP1007 SP1020 SP1021 SP1027 SP1039
如您所见,来自 tapes_in_drives 的磁带名称并未从磁带阵列中删除。