繁体   English   中英

如何使用while循环和if语句编写单行shell脚本

[英]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需要一个thenfi

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM