如果变量为假,则中断循环

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。