如果变量$ DEVP不存在,则尝试断开for循环。
nme=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
DEVP=(/dev/disk2 /dev/disk3 /dev/disk4 /dev/disk5 /dev/disk6 /dev/disk7 /dev/disk8)
for ((i = 0; i < 7; i++)) ; do
if [ ${nme[i]} ${DEVP[i]} = 0 ] ; then
diskutil eraseDisk FAT32 ${nme[i]} ${DEVP[i]}
else
echo “Formatted USBs” ; break
fi
done
答案 0 :(得分:2)
休息正常
for ((i = 0; i < 7; i++)) ; do
if [ $i -lt 3 ] ; then
echo $i
else
echo “Formatted USBs” ; break
fi
done
输出是:
0
1
2
“Formatted USBs”
,但我不确定您的if
声明,您应该使用-z
。
if [ -z ${DEVP[i]} ] ; then
看看here
答案 1 :(得分:0)
首先修复语法:在if语句中将引号放在引号中。
编辑:我认为你需要用i
来引用var $i
,但是@tripleee告诉我,这在bash数组中是可选的。我删除了额外的$
字符。
nme=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
DEVP=(/dev/disk2 /dev/disk3 /dev/disk4 /dev/disk5 /dev/disk6 /dev/disk7 /dev/disk8)
for ((i = 0; i < 7; i++)) ; do
if [ "${nme[i]} ${DEVP[i]}" = 0 ] ; then
echo "diskutil eraseDisk FAT32 ${nme[i]} ${DEVP[i]}"
else
echo “Formatted USBs” ; break
fi
done
如果要检查变量为空,请循环引入错误,直到8 我在diskutil行前面放了一个echo,所以你可以在不做你不想要的事情的情况下进行测试。
for ((i = 0; i < 8; i++)) ; do
if [ -z "${nme[i]}" ]; then
echo "loop $i: \${nme[i]} is empty";
break;
fi
if [ -z "${DEVP[i]}" ]; then
echo "loop $i: \${DEVP[i]} is empty";
break;
fi
echo "diskutil eraseDisk FAT32 ${nme[i]} ${DEVP[i]}"
done
答案 2 :(得分:0)
您的比较看起来好像您希望两个字符串包含单个数字零。他们永远不会。如果它们是空的,它们将包含空字符串。 (但即使这样,比较运算符左侧有两个字符串参数也是语法错误。)
无论如何,如果您尝试解决的实际问题是您不知道这些数组包含多少元素,请询问。
for((i=0; i<${#DEVP[@]}; ++i)); do
当然,如果数组包含不同数量的参数,您仍然可能会在${nme[i]}
未定义的情况下结束。
${nme[i]+:} break
这是相当模糊的 - 如果值未设置,它将扩展到break
之前的空字符串(从而中断循环);如果设置了,这只是:
noop。