Bash elseif语句和字符串前缀

时间:2018-04-14 17:33:40

标签: bash

我需要制作一个程序,打印出两个变量之间的每个偶数,如果数字可以被7整除,它会在数字的末尾添加橙色。当前代码无法编译。如果数字可以被7和13整除,我该怎么回事?例如?

#!/bin/bash
echo -n "enter two digits "
read nr1 nr2
eval "t=({$nr1..$nr2})";
for n in "${t[@]}"
do 
    out=$(( $n % 2 ))
if
    [ $out -eq 0 ] 
then  
for o in "${t[@]}"
do 
out2=$(( $o % 7))
elif
[ $out2 -eq 0]
    then
    echo "$o orange, "
for b in "${t[@]}"
do 
    out3=$(( $b % 11))
elif
    [ $out3 -eq 0]
    then
    echo "$b banana, "
for p in "${t[@]}"
do 
    out4=$(( $p % 13))
elif
    [ $out4 -eq 0]
    then
    echo "$o pear, "
else 
echo "$n"
   fi
done

1 个答案:

答案 0 :(得分:2)

这是bash和我阅读代码的方式:

#!/bin/bash
echo -n "enter two digits "
read nr1 nr2
eval "t=({$nr1..$nr2})";
for n in "${t[@]}"
do 
    out=$(( $n % 2 ))
    if
        [ $out -eq 0 ] 
    then  
        for o in "${t[@]}"
        do 
            out2=$(( $o % 7))
        # most probably you missed a `done` here
            elif # elif without if - for doesn't know else/elif
                [ $out2 -eq 0]
            then
                echo "$o orange, "
                for b in "${t[@]}"
                do 
                    out3=$(( $b % 11))
                    elif # again elif without if
                        [ $out3 -eq 0]
                    then
                        echo "$b banana, "
                        for p in "${t[@]}" # no fi so far, so we go deeper
                        do 
                            out4=$(( $p % 13))
                            elif # illegal elif - where is the corresponding if?
                                [ $out4 -eq 0]
                            then
                                echo "$o pear, "
                            else 
                                echo "$n"
                            fi # oh! I had lost my faith
                        done # another closing statement! 

如果/ elif / fi必须位于相同的缩进级别 - 不是类型字符,而是来自逻辑。

如果您在然后分支中启动for,则必须先关闭for,然后才能打开elif或使用fi结束if。

if 
  condition
then
  expression(s)
(elif 
  expression(s))
fi

for (condition)
do
    block 
done 

无法剪切,只能嵌套。但内部构造必须在外部构造关闭之前关闭。

使用明确的缩进有助于查看和避免违规行为。