Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash elseif语句和字符串前缀_Bash - Fatal编程技术网

Bash elseif语句和字符串前缀

Bash elseif语句和字符串前缀,bash,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 "

我需要制作一个程序,打印出两个变量之间的每一个偶数,如果这个数可以被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

下面是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! 
if/elif/fi必须在同一缩进级别上-不是作为键入的字符,而是从逻辑上

如果在then分支中启动for,则必须先用“完成”关闭for,然后才能打开elif或用fi结束If

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

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


使用清晰的缩进有助于查看和避免冲突。

“当前代码未编译”嗯,什么?您正在编译一个bash脚本?这意味着它给了我一个使用合理缩进的错误开始,这反映了脚本的结构。如果shell中的消息不够清晰,将其发布到shellcheck,以了解错误所在。如果您只是要创建
t
进行迭代,请使用
for((n=$nr;n
for (condition)
do
    block 
done