我并不是一名经验丰富的程序员。所以也许您很清楚为什么此脚本中的 break 命令不会终止循环,但我看不出是什么导致了这个问题。我想使用该脚本将 VHD 文件安装到第一个空的 NBD“插槽”(当其大小为零时假定为空,我从此站点上的另一个帖子中获得了这个想法)。
function vhdmount() {
workfile="$1"
if test -e "$workfile"
then
workname=${workfile##*'/'}
echo "$(tput setaf 3)*** ${workfile}: ***$(tput setaf 7)"
for (( i=0; i<16; i++ ))
do (
if test -e /sys/class/block/nbd${i}/size
then
usedornot=$( cat /sys/class/block/nbd${i}/size )
if (( "$usedornot" == 0 ))
then
firstfree=$i
break
fi
else
firstfree=$i
break
fi
); done
sudo modprobe nbd
sudo qemu-nbd -c /dev/nbd${firstfree} "$workfile"
sudo mkdir "/media/myusername/${workname//.vhd/.nbd${firstfree}}/"
sudo mount /dev/nbd${firstfree}p1 "/media/myusername/${workname//.vhd/.nbd${firstfree}}/"
echo "$(tput setaf 3) successfully mounted.$(tput setaf 7)"
fi
}
vhdmount "$1"
也许还有其他错误。当 shell 要求输入密码时,我总是会终止它,因为我可以从 16 条消息中看出 break 命令仅在 for 循环中有用,而 break 命令不起作用。顺便说一句,这是一条多么没用的错误消息啊?!