欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本until語法結(jié)構(gòu)的具體使用

 更新時(shí)間:2025年08月25日 08:31:08   作者:咖啡の貓  
本文主要介紹了Shell腳本-until語法結(jié)構(gòu)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

在 Shell 腳本編程中,循環(huán)結(jié)構(gòu)是實(shí)現(xiàn)自動(dòng)化任務(wù)的核心工具之一。除了常見的 forwhile 循環(huán)外,until 循環(huán)提供了一種“直到條件為真才停止”的邏輯控制方式,特別適用于某些特定場(chǎng)景。

本文將帶你全面掌握 until 循環(huán)的語法結(jié)構(gòu)、執(zhí)行流程、使用場(chǎng)景以及最佳實(shí)踐,并通過多個(gè)實(shí)用代碼示例幫助你快速上手。

二、until循環(huán)的基本語法

until 循環(huán)的執(zhí)行邏輯是:

先判斷條件是否為假,如果為假,則執(zhí)行循環(huán)體;直到條件變?yōu)檎妫h(huán)結(jié)束。

? 語法結(jié)構(gòu):

until [ 條件判斷 ]
do
    # 循環(huán)體
    命令1
    命令2
    ...
done

?? 注意:條件判斷使用的是 [ ] 或 test 命令,也可以使用 (( )) 進(jìn)行數(shù)值比較。

三、執(zhí)行流程圖解

      +------------------+
      |   執(zhí)行 until     |
      +------------------+
               |
               v
      +------------------+
      | 條件是否為真?    |<---+
      +------------------+   |
            /     \         |
         是/       \否       |
          v         v       |
    +---------+  +-----------+
    | 退出循環(huán) |  | 執(zhí)行循環(huán)體 |
    +---------+  +-----------+
                     |
                     +------->(回到條件判斷)

?? 也就是說,until 循環(huán)至少會(huì)執(zhí)行一次循環(huán)體(除非條件一開始就為真)。

四、簡(jiǎn)單示例:打印數(shù)字 1 到 5

#!/bin/bash

i=1

until [ $i -gt 5 ]
do
    echo "當(dāng)前數(shù)字: $i"
    i=$((i + 1))
done

輸出結(jié)果:

當(dāng)前數(shù)字: 1
當(dāng)前數(shù)字: 2
當(dāng)前數(shù)字: 3
當(dāng)前數(shù)字: 4
當(dāng)前數(shù)字: 5

? 解析:當(dāng) i <= 5 時(shí),條件 [ $i -gt 5 ] 為假,循環(huán)繼續(xù);當(dāng) i=6 時(shí),條件為真,循環(huán)結(jié)束。

五、untilvswhile:關(guān)鍵區(qū)別

特性untilwhile
條件判斷條件為假時(shí)執(zhí)行條件為真時(shí)執(zhí)行
邏輯直到條件為真才退出當(dāng)條件為真時(shí)繼續(xù)
使用場(chǎng)景等待某個(gè)事件發(fā)生持續(xù)執(zhí)行某個(gè)任務(wù)

? 對(duì)比示例:實(shí)現(xiàn)相同功能

使用until:

i=1
until [ $i -gt 5 ]; do
    echo $i
    i=$((i+1))
done

使用while:

i=1
while [ $i -le 5 ]; do
    echo $i
    i=$((i+1))
done

?? 兩者功能相同,但邏輯表達(dá)方式相反。

六、實(shí)際應(yīng)用場(chǎng)景

? 場(chǎng)景1:等待某個(gè)服務(wù)啟動(dòng)(如 MySQL)

#!/bin/bash

echo "等待 MySQL 服務(wù)啟動(dòng)..."

until nc -z localhost 3306
do
    echo "MySQL 未啟動(dòng),5秒后重試..."
    sleep 5
done

echo "MySQL 已啟動(dòng),繼續(xù)后續(xù)操作。"

?? 說明:nc -z host port 用于檢測(cè)端口是否開放,直到 MySQL 啟動(dòng)成功才退出循環(huán)。

? 場(chǎng)景2:用戶輸入驗(yàn)證(必須輸入非空值)

#!/bin/bash

input=""

until [ -n "$input" ]
do
    read -p "請(qǐng)輸入用戶名: " input
    if [ -z "$input" ]; then
        echo "輸入不能為空,請(qǐng)重新輸入。"
    fi
done

echo "歡迎你,$input!"

? 說明:直到用戶輸入非空字符串才退出循環(huán)。

? 場(chǎng)景3:帶重試機(jī)制的命令執(zhí)行

#!/bin/bash

max_retries=3
attempt=1

until ping -c1 example.com &>/dev/null || [ $attempt -gt $max_retries ]
do
    echo "第 $attempt 次嘗試失敗,正在重試..."
    attempt=$((attempt + 1))
    sleep 2
done

if [ $attempt -le $max_retries ]; then
    echo "網(wǎng)絡(luò)連接成功!"
else
    echo "錯(cuò)誤:無法連接網(wǎng)絡(luò),已重試 $max_retries 次。"
fi

? 說明:最多重試 3 次,成功則提前退出。

七、嵌套循環(huán)與控制語句

? 示例:嵌套 until 循環(huán)

i=1
until [ $i -gt 2 ]
do
    j=1
    until [ $j -gt 3 ]
    do
        echo "i=$i, j=$j"
        j=$((j + 1))
    done
    i=$((i + 1))
done

輸出:

 i=1, j=1
i=1, j=2
i=1, j=3
i=2, j=1
i=2, j=2
i=2, j=3

? 使用break和continue

i=1
until [ $i -gt 5 ]
do
    if [ $i -eq 3 ]; then
        i=$((i + 1))
        continue  # 跳過本次循環(huán)
    fi

    if [ $i -eq 5 ]; then
        break  # 提前退出循環(huán)
    fi

    echo "當(dāng)前值: $i"
    i=$((i + 1))
done

? 輸出:1、2、4

八、常見錯(cuò)誤與調(diào)試技巧

錯(cuò)誤原因解決方案
無限循環(huán)條件永遠(yuǎn)不為真檢查變量是否更新
語法錯(cuò)誤缺少 do 或 done檢查關(guān)鍵字配對(duì)
變量未定義使用未初始化變量初始化變量或添加默認(rèn)值
條件判斷錯(cuò)誤使用 = 而不是 -eq(數(shù)值比較)數(shù)值用 -eq,字符串用 =

?? 調(diào)試建議:使用 set -x 開啟調(diào)試模式,查看執(zhí)行過程。

九、總結(jié)對(duì)比表:until循環(huán)要點(diǎn)一覽

項(xiàng)目說明
關(guān)鍵字until, do, done
執(zhí)行邏輯條件為假時(shí)執(zhí)行循環(huán)體
至少執(zhí)行次數(shù)1 次(除非條件一開始為真)
適用場(chǎng)景等待事件發(fā)生、重試機(jī)制、輸入驗(yàn)證
常見搭配sleep、ping、nc、read 等命令

十、結(jié)語

到此這篇關(guān)于Shell腳本until語法結(jié)構(gòu)的具體使用的文章就介紹到這了,更多相關(guān)Shell until語法結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux啟動(dòng)級(jí)別的含義(init 0-6)

    linux啟動(dòng)級(jí)別的含義(init 0-6)

    這篇文章主要介紹了linux啟動(dòng)級(jí)別的含義(init 0-6),需要的朋友可以參考下
    2014-02-02
  • linux系統(tǒng)下dd命令的使用方法

    linux系統(tǒng)下dd命令的使用方法

    這篇文章主要介紹了linux系統(tǒng)下dd命令的使用方法,dd命令的功能是把指定的輸入文件拷貝到指定的輸出文件中,并且在拷貝過程中可以進(jìn)行格式轉(zhuǎn)換
    2014-01-01
  • 用Shell判斷字符串包含關(guān)系的方法小結(jié)

    用Shell判斷字符串包含關(guān)系的方法小結(jié)

    這篇文章主要給大家介紹了關(guān)于用Shell判斷字符串包含關(guān)系的幾種方法,其中包括利用grep查找、利用字符串運(yùn)算符、利用通配符、利用case in 語句以及利用替換等方法,每個(gè)方法都給出了詳細(xì)的示例代碼與介紹,有需要的朋友們可以參考參考借鑒,下面來一起看看吧。
    2016-12-12
  • 每天一個(gè)linux命令 chgrp命令

    每天一個(gè)linux命令 chgrp命令

    這篇文章主要為大家詳細(xì)介紹了一個(gè)linux命令:chgrp命令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 使用Linux shell腳本實(shí)現(xiàn)FTP定時(shí)執(zhí)行批量下載指定文件

    使用Linux shell腳本實(shí)現(xiàn)FTP定時(shí)執(zhí)行批量下載指定文件

    使用FTP定時(shí)批量下載指定文件的shell腳本,具體實(shí)例介紹如下所示,需要的朋友參考下吧
    2017-04-04
  • Shell循環(huán)語句及中斷語句的使用

    Shell循環(huán)語句及中斷語句的使用

    本文主要介紹了Shell循環(huán)語句及中斷語句的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • shell腳本中echo顯示內(nèi)容帶顏色的實(shí)現(xiàn)方法

    shell腳本中echo顯示內(nèi)容帶顏色的實(shí)現(xiàn)方法

    這篇文章主要介紹了shell腳本中通過echo顯示帶顏色內(nèi)容的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2013-11-11
  • shell中數(shù)組的定義及操作

    shell中數(shù)組的定義及操作

    本文主要介紹了shell中數(shù)組的定義及操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • linux下執(zhí)行shell命令方法簡(jiǎn)介

    linux下執(zhí)行shell命令方法簡(jiǎn)介

    本文給大家分享的是linux系統(tǒng)下執(zhí)行shell命令的常用的2種方法,希望對(duì)初學(xué)shell命令的小伙伴能夠有所幫助
    2016-12-12
  • shell腳本編程之if語句學(xué)習(xí)筆記

    shell腳本編程之if語句學(xué)習(xí)筆記

    這篇文章主要介紹了shell腳本編程之if語句學(xué)習(xí)筆記,本文先是給出了程序代碼,然后詳細(xì)的分解了第句代碼的作用,需要的朋友可以參考下
    2014-09-09

最新評(píng)論