![](/img/trans.png)
[英]How do I write an if statement within a while statement in Bash Shell Script?
[英]How to write a single line shell script with a while loop and if statement
我试图找出在单行shell脚本中具有while循环和if语句以检查多个条件的语法。
执行这样的事情...
i=2; while [ $i -le 10 ]; do if [ $i -ne 3 -a $i -ne 5 ] echo $i " not equal to 3 or 5"; else echo $i; i=`expr $i + 1`; done
...我得到了错误
bash: syntax error near unexpected token `else'
另一方面,如果我从...3 or 5"
之间删除分号,然后else echo...
,然后尝试类似的事情...
i=2; while [ $i -le 10 ]; do if [ $i -ne 3 -a $i -ne 5 ] echo $i " not equal to 3 or 5" else echo $i; i=`expr $i + 1`; done
...然后我得到了错误:
syntax error near unexpected token `done'
万一重要,它是在Ubuntu 14.04上。
我可能在某处缺少括号,还是其他内容?
这应该工作:
i=2; while [ $i -le 10 ]; do if [ $i -ne 3 -a $i -ne 5 ]; then echo $i " not equal to 3 or 5"; else echo $i; fi; i=`expr $i + 1`; done
这也应该起作用:
i=2; while [ $i -le 10 ]; do [ $i -ne 3 -a $i -ne 5 ] && echo "$i not equal to 3 or 5" || echo $i; i=$((i+1)); done
但是我不确定只写一行就有意义
您仍然需要一个then
和一个fi
,以及足够的分号。
i=2; while [ $i -le 10 ]; do if [ $i -ne 3 -a $i -ne 5 ]; then echo "$i not equal to 3 or 5"; else echo $i; fi; i=$(expr $i + 1); done
用$(…)
代替反引号`…`
只是一个好主意,对本次讨论并不重要。
如果按常规在多行上写出(没有分号),您将拥有:
i=2
while [ $i -le 10 ]
do
if [ $i -ne 3 -a $i -ne 5 ]
then echo "$i not equal to 3 or 5"
else echo $i
fi
i=$(expr $i + 1)
done
要将其转换为单行,需要在每个语句和条件后加一个分号:
i=2;
while [ $i -le 10 ];
do
if [ $i -ne 3 -a $i -ne 5 ];
then echo "$i not equal to 3 or 5";
else echo $i;
fi;
i=$(expr $i + 1);
done
现在,空白(包括换行符)可以由一行上的单个空格代替。
而且您可以使用i=$(($i + 1))
甚至使用(在Bash中) ((i++))
代替expr
,从而避免使用外部命令expr
; 外壳内部进行算术运算。
每个if
需要一个then
和fi
:
i=2; while [ $i -le 10 ]; do if [ $i -ne 3 -a $i -ne 5 ] ; then echo $i " not equal to 3 or 5" ; else echo $i; i=`expr $i + 1`; fi ; done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.