Shell學習心得(四):流程式控制制

来源:https://www.cnblogs.com/ailiailan/archive/2019/07/22/10824469.html
-Advertisement-
Play Games

一、if else 1. if if 語句語法格式: 寫成一行(適用於終端命令提示符): 輸出: 2. if else if else 語法格式: 3. if else-if else if else-if else 語法格式: 舉例: 輸出: if else語句經常與test命令結合使用: 輸出: ...


 一、if else

1. if

if 語句語法格式:

 

if condition
then
    command1 
    command2
    ...
    commandN 
fi

寫成一行(適用於終端命令提示符):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

輸出:

 

2. if else

if else 語法格式:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

 

3. if else-if else

if else-if else 語法格式:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

 

舉例:

輸出:

if else語句經常與test命令結合使用:

輸出:

 

 二、for迴圈

for迴圈一般格式為:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

 寫成一行:

for var in item1 item2 ... itemN; do command1; command2… done;

順序輸出當前列表中的數字:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

順序輸出字元串中的字元:

for str in 'This is a string'
do
    echo $str
done

 

 三、while迴圈

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

使用了 Bash let 命令,它用於執行一個或多個表達式,變數計算中不需要加上 $ 來表示變數。

while迴圈可用於讀取鍵盤信息。下麵的例子中,輸入信息被設置為變數FILM,按<Ctrl-D>結束迴圈。

echo '按下 <CTRL-D> 退出'
echo -n '輸入你最喜歡的餐廳: '
while read FILM
do
    echo "是的!$FILM 是一個好吃的餐廳"
done

輸出:

  

、until迴圈

until 迴圈執行一系列命令直至條件為 true 時停止。

until 迴圈與 while 迴圈在處理方式上剛好相反。

一般 while 迴圈優於 until 迴圈,但在某些時候—也只是極少數情況下,until 迴圈更加有用。

until 語法格式:

until condition
do
    command
done
a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

 

、case

 case語句為多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。case語句格式如下:

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

case工作方式如上所示。取值後面必須為單詞in,每一模式必須以右括弧結束。取值可以為變數或常數。匹配發現取值符合某一模式後,其間所有命令開始執行直至 ;;。

取值將檢測匹配的每一個模式。一旦模式匹配,則執行完匹配模式相應命令後不再繼續其他模式。如果無一匹配模式,使用星號 * 捕獲該值,再執行後面的命令。

下麵的腳本提示輸入1到4,與每一種模式進行匹配:

echo '輸入 1 到 4 之間的數字:'
echo '你輸入的數字為:'
read aNum
case $aNum in
    1)  echo '你選擇了 1'
    ;;
    2)  echo '你選擇了 2'
    ;;
    3)  echo '你選擇了 3'
    ;;
    4)  echo '你選擇了 4'
    ;;
    *)  echo '你沒有輸入 1 到 4 之間的數字'
    ;;
esac

 

六、跳出迴圈

break命令

break命令允許跳出所有迴圈(終止執行後面的所有迴圈)。

下麵的例子中,腳本進入死迴圈直至用戶輸入數字大於5。要跳出這個迴圈,返回到shell提示符下,需要使用break命令。

while :
do
    echo -n "輸入 1 到 5 之間的數字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 5 之間的! 游戲結束"
            break
        ;;
    esac
done

continue

continue命令與break命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。

對上面的例子進行修改:

while :
do
    echo -n "輸入 1 到 5 之間的數字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 5 之間的!"
            continue
            echo "游戲結束"
        ;;
    esac
done

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .NET Core CSharp 初級篇 1 5 本節內容類的介面、枚舉、抽象 簡介 問題 如果你需要表示星期或者是某些狀態,使用字元串或者數字是否不直觀? 你是否發現,無論何種電腦,它的USB口的設計都是遵循一定規範的? 枚舉 枚舉(enum)是一個非常好用的一個特殊值類型,他可以讓你指定一系列字 ...
  • 微軟和社區已經做了大量艱苦的工作,使.Net Core成為市場上具有競爭力的框架,幫助開發人員快速開發具有最佳性能和可擴展性的強大應用程式。做的最棒的事情是.Net Framework開發人員不需要任何新知識來處理.Net Core。這也是開發人員在很短的時間內採用.Net Core的原因之一。對於 ...
  • 1. "HttpResponseMessage" 2. "IHttpActionResult" 3. "void" 4. "某些其他類型" 5. "總結歸納" 原文地址:https://www.cnblogs.com/xgzh/p/11208611.html HttpResponseMessage ...
  • 轉自:Window系統命令行調用控制面板程式 ...
  • 常用命令 一、命令的基本格式 1、命令的提示符 : 這是提示符的分隔符號,沒有特殊含義 : 顯示的是當前的登錄用戶 : 分隔符號,沒有特殊含義 : 當前系統的簡寫主機名(完整主機名是 localhost.localdomain), 查看 : 代表當前所在的目錄的最後一層目錄, : 命令提示符。超級用 ...
  • 一、Linux常見命令 file:查看文件類型(windows用擴展名識別文件類型) 語法:file [options] [args] -b:顯示結果時,不顯示文件名 -c:顯示執行file命令的執行過程(file是如何判斷文件類型),便於排錯或分析命令執行過程 -i:輸出MIME類型的字元串 -L ...
  • /binbin是binary的縮寫。這個目錄沿襲了UNIX系統的結構,存放著使用者最經常使用的命令。例如cp、ls、cat,等等。 /boot這裡存放的是啟動Linux時使用的一些核心文件。 /devdev是device(設備)的縮寫。這個目錄下是所有Linux的外部設備,其功能類似DOS下的.sy ...
  • [toc] linux系統管理 進程管理 程式和進程的區別 1.程式是數據和指令的集合,是一個靜態的概念,比如/bin/ls、/bin/cp等二進位文件,同時程式可以長期存在系統中。 2.進程是一個程式的運行過程,是一個動態概念,進程是存在生命周期概念的,也就是說進程會隨著程式的終止而銷毀,不會永遠 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...