如果变量为假,则中断循环
Break for loop if variable is false
尝试在变量 $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
中断工作正常
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
首先修复语法:把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
您的比较看起来像是您希望两个字符串包含单个数字零。他们永远不会。如果它们为空,则它们将包含空字符串。 (但即便如此,比较运算符左侧有两个字符串参数也是语法错误。)
无论如何,如果您要解决的实际问题是您不知道这些数组包含多少个元素,那就问吧。
for((i=0; i<${#DEVP[@]}; ++i)); do
当然,如果数组包含不同数量的参数,您仍然可能会遇到 ${nme[i]}
未定义的情况。
${nme[i]+:} break
这是相当晦涩的——如果未设置该值,它将扩展为 break
之前的空字符串(从而跳出循环);如果已设置,这只是一个 :
noop。
尝试在变量 $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
中断工作正常
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
首先修复语法:把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
您的比较看起来像是您希望两个字符串包含单个数字零。他们永远不会。如果它们为空,则它们将包含空字符串。 (但即便如此,比较运算符左侧有两个字符串参数也是语法错误。)
无论如何,如果您要解决的实际问题是您不知道这些数组包含多少个元素,那就问吧。
for((i=0; i<${#DEVP[@]}; ++i)); do
当然,如果数组包含不同数量的参数,您仍然可能会遇到 ${nme[i]}
未定义的情况。
${nme[i]+:} break
这是相当晦涩的——如果未设置该值,它将扩展为 break
之前的空字符串(从而跳出循环);如果已设置,这只是一个 :
noop。