簡體   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