Bash elseif语句和字符串前缀
我需要制作一个程序,打印出两个变量之间的每一个偶数,如果这个数可以被7整除,它会在数字的末尾加上橙色。当前代码无法编译。还有,如果这个数字可以被7和13整除,我该怎么处理呢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 "
#!/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