![](/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.