如何编写带有 while 循环和 if 语句的单行 shell 脚本

She*_*ein 3 linux shell

我试图找出在单行 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
Run Code Online (Sandbox Code Playgroud)

...我收到错误

bash: syntax error near unexpected token `else'
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我删除...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
Run Code Online (Sandbox Code Playgroud)

...然后我收到错误:

syntax error near unexpected token `done'
Run Code Online (Sandbox Code Playgroud)

这是在 Ubuntu 14.04 上,以防万一。

我是否可能在某处缺少某种括号,或者是其他什么?

小智 5

这应该有效:

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
Run Code Online (Sandbox Code Playgroud)

这也应该有效:

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
Run Code Online (Sandbox Code Playgroud)

但我不确定只写一行是否有意义