我需要制作一个程序,打印出两个变量之间的每个偶数,如果数字可以被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
答案 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
无法剪切,只能嵌套。但内部构造必须在外部构造关闭之前关闭。
使用明确的缩进有助于查看和避免违规行为。