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

时间:2015-10-29 08:40:27

标签: unix if-statement for-loop sh

如果变量$ 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

3 个答案:

答案 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。