linux筆記:shell中的while、if、for語句

在Udig軟件的啟動腳本中使用了while循環if語句for循環,其他內容基本都是變量的定義,所以嘗試弄懂腳本中這三部分內容,了解腳本執行過程。

(1)while循環

while do循環內容如下所示,在循環中還用了expr命令和正則表達式等內容,解析符號鏈接來找到程序的實際路徑。符號鏈接(Symbolic Link),也稱為軟鏈接(Soft Link),是一種特殊的文件類型,它指向另一個文件或目錄,類似于Windows系統中的快捷方式。

while [ -h "$PRG" ]; dols=`ls -ld "$PRG"`link=`expr "$ls" : '.*-> \(.*\)$'`if expr "$link" : '/.*' > /dev/null; thenPRG="$link"elsePRG=`dirname "$PRG"`/"$link"fi
done

while do循環的基本結構如下所示,可以看到與python 直接簡單的 while 條件: 循環體內命令 這種結構還是有一些差別。上面代碼中,條件是指 -h "$PRG",這個指令用于判斷變量$PRG所指向的文件是否是一個符號鏈接,其中**-h是一個測試運算符,專門用于檢查文件是否為符號鏈接。這里使用了測試條件表達式**,在之后進行測試條件表達式的學習。

while [ 條件 ]; 
do# 循環體內的命令
done

循環體內循環了大量的命令,使用ls -ld命令列出了$PRG的詳細信息,-d表示只列出$PRG本身的信息,而不是其內容;第二句使用expr命令結合正則表達式$ls中提取符號鏈接指向的目標路徑。正則表達式'.*-> \(.*\)$'的含義是:匹配以 -> 結尾的字符串,并提取其后面的部分,即符號鏈接的目標路徑,然后將其賦值給變量link。這里使用了正則表達式,在之后進行正則表達式的學習。

	ls=`ls -ld "$PRG"`link=`expr "$ls" : '.*-> \(.*\)$'`if expr "$link" : '/.*' > /dev/null; thenPRG="$link"elsePRG=`dirname "$PRG"`/"$link"fi

在循環中還嵌套另一個if判斷語句。上面的第三句代碼判斷$link是否是一個絕對路徑,其中expr "$link" : '/.*'會嘗試匹配以/開頭的字符串,如果匹配成功,說明$link是一個絕對路徑。> /dev/null的作用是將expr命令的輸出重定向到/dev/null,因為只關心匹配是否成功,而不關心輸出內容。在 Linux 系統中,/dev/null 是一個特殊的文件,它沒有任何數據,起著丟棄數據的作用,用于一些忽略輸出或者輸入的場合。 如果$link是一個絕對路徑,就直接將$link賦值給$PRG,這樣$PRG就更新為符號鏈接的實際目標路徑。否則的話,dirname "$PRG"會獲取$PRG所在的目錄路徑,然后將其與$link拼接起來,得到完整的絕對路徑,并賦值給`$PRG。

(2)for循環

for循環語句遍歷命令行參數,并檢查其中是否有-data參數。如果有,則將變量DATA_ARG設置為true。這里的$@是一個特殊變量,它包含了腳本接收到的所有命令行參數,而每個參數會被當作一個單獨的元素,依次賦值給變量ARG。這里的for循環內部又嵌套了一個if語句,用于檢查當前的參數$ARG是否等于-data。其中,**[ $ARG = "-data" ]是一個測試條件表達式,用于比較$ARG和字符串-data是否相等,使用了=運算符進行字符串比較;而then DATA_ARG=true; fi**表示如果$ARG等于-data,則將變量DATA_ARG設置為true

for ARG in $@ 
doif [ $ARG = "-data" ]; then DATA_ARG=true; fi
done

for循環的基本結構如下所示:

for 變量 in 值1 值n
do# 命令
done

(3)if語句

if語句內容如下所示,其用來根據變量$DATA_ARG的值來決定執行不同的命令。第一句是用來檢查變量$DATA_ARG的值,如果$DATA_ARG的值是一個非空字符串且真值,則條件為真,執行then部分的代碼;如果$DATA_ARG的值為空字符串或被視為假值,則條件為假,執行else部分的代碼。then部分的代碼中,$PRGDIR是一個變量,表示程序所在的目錄路徑;$UDIGEXEC也是一個變量,表示要執行的程序名稱,這兩個變量組合起來形成完整的命令路徑;**$@接收到的所有命令行參數會傳遞給$PRGDIR/$UDIGEXEC命令。else部分代碼中,添加了-data ~/uDigWorkspace**傳遞給命令的一個額外參數,表示指定數據目錄為~/uDigWorkspace

if $DATA_ARG; then $PRGDIR/$UDIGEXEC $@
else$PRGDIR/$UDIGEXEC -data ~/uDigWorkspace $@
fi

if 循環的基本結構如下所示:

if 條件
then# 命令1
else# 命令2
fi

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895828.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895828.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895828.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用分治策略優化快速排序

1. 基本思想 分治快速排序(Quick Sort)是一種基于分治法的排序算法,采用遞歸的方式將一個數組分割成小的子數組,并通過交換元素來使得每個子數組元素按照特定順序排列,最終將整個數組排序。 快速排序的基本步驟&#…

從零到一實現微信小程序計劃時鐘:完整教程

在本教程中,我們將一起實現一個微信小程序——計劃時鐘。這個小程序的核心功能是幫助用戶添加任務、設置任務的時間范圍,并且能夠刪除和查看已添加的任務。通過以下步驟,我們將帶你從零開始實現一個具有基本功能的微信小程序計劃時鐘。 項目…

idea日常報錯之UTF-8不可映射的字符

目錄 一、UTF-8不可映射的字符的解決 1、出現這種報錯的情形 2、具體解決辦法 前言: 在我們日常代碼編寫的時候可能會遇到各式各樣的錯誤,有時候并不是你改動了代碼,而是莫名其妙就出現的報錯,今天我就遇到一個在maven編譯的時候…

人工智能技術-基于長短期記憶(LSTM)網絡在交通流量預測中的應用

人工智能技術-基于長短期記憶(LSTM)網絡在交通流量預測中的應用 基于人工智能的智能交通管理系統 隨著城市化進程的加快,交通問題日益嚴峻。為了解決交通擁堵、減少交通事故、提高交通管理效率,人工智能(AI&#xff…

HTTP FTP SMTP TELNET 應用協議

1. 標準和非標準的應用協議 標準應用協議: 由標準化組織(如 IETF,Internet Engineering Task Force)制定和維護,具有廣泛的通用性和互操作性。這些協議遵循嚴格的規范和標準,不同的實現之間可以很好地進行…

Matlab離線安裝硬件支持包的方法

想安裝支持樹莓派的包,但是發現通過matlab安裝需要續訂維護服務 可以通過離線的方式安裝。 1. 下載SupportSoftwareDownloader Support Software Downloader - MATLAB & Simulink 登錄賬號 選擇對應的版本 2. 選擇要安裝的包 3.將下載的包copy到安裝目錄下 …

Django REST Framework (DRF) 中用于構建 API 視圖類解析

Django REST Framework (DRF) 提供了豐富的視圖類,用于構建 API 視圖。這些視圖類可以分為以下幾類: 1. 基礎視圖類 這些是 DRF 中最基礎的視圖類,通常用于實現自定義邏輯。 常用類 APIView: 最基本的視圖類,所有其…

MyBatis攔截器終極指南:從原理到企業級實戰

在本篇文章中,我們將深入了解如何編寫一個 MyBatis 攔截器,并通過一個示例來展示如何在執行數據庫操作(如插入或更新)時,自動填充某些字段(例如 createdBy 和 updatedBy)信息。本文將詳細講解攔…

137,【4】 buuctf web [SCTF2019]Flag Shop

進入靶場 都點擊看看 發現點擊work會增加¥ 但肯定不能一直點下去 抓包看看 這看起來是一個 JWT(JSON Web Token)字符串。JWT 通常由三部分組成,通過點(.)分隔,分別是頭部(Header&…

twisted實現MMORPG 游戲數據庫操作封裝設計與實現

在設計 MMORPG(大規模多人在線角色扮演游戲)時,數據庫系統是游戲架構中至關重要的一部分。數據庫不僅承擔了游戲中各種數據(如玩家數據、物品數據、游戲世界狀態等)的存儲和管理任務,還必須高效地支持并發訪…

【R語言】聚類分析

聚類分析是一種常用的無監督學習方法,是將所觀測的事物或者指標進行分類的一種統計分析方法,其目的是通過辨認在某些特征上相似的事物,并將它們分成各種類別。R語言提供了多種聚類分析的方法和包。 方法優點缺點適用場景K-means計算效率高需…

超全Deepseek資料包,deepseek下載安裝部署提示詞及本地部署指南介紹

該資料包涵蓋了DeepSeek模型的下載、安裝、部署以及本地運行的詳細指南,適合希望在本地環境中高效運行DeepSeek模型的用戶。資料包不僅包括基礎的安裝步驟,還提供了68G多套獨立部署視頻教程教程,針對不同硬件配置的模型選擇建議,以…

Java Spring boot 篇:常用注解

Configuration 作用 Configuration 注解的核心作用是把一個類標記為 Spring 應用上下文里的配置類。配置類就像一個 Java 版的 XML 配置文件,能夠在其中定義 Bean 定義和 Bean 之間的依賴關系。當 Spring 容器啟動時,會掃描這些配置類,解析其…

在 Ubuntu 20.04 為 Clash Verge AppImage 創建桌面圖標教程

在 Ubuntu 20.04 為 AppImage 創建桌面圖標教程 一、準備工作 確保你已經下載了 xxxx.AppImage 文件,并且知道它所在的具體路徑。同時,你可以準備一個合適的圖標文件(.png 格式)用于代表該應用程序,如果沒有合適的圖…

【復現DeepSeek-R1之Open R1實戰】系列6:GRPO源碼逐行深度解析(上)

目錄 4 GRPO源碼分析4.1 數據類 GRPOScriptArguments4.2 系統提示字符串 SYSTEM_PROMPT4.3 獎勵函數4.3.1 accuracy_reward函數4.3.2 verify函數4.3.3 format_reward函數 4.4 將數據集格式化為對話形式4.5 初始化GRPO Trainer 【復現DeepSeek-R1之Open R1實戰】系列3&#xff1…

【雜談】加油!!!!

為了在三月底前系統準備Java后端開發的面試和筆試,以下是分階段的高效學習計劃: 一、知識體系構建(第1-2周) 核心基礎強化 Java基礎(每日1.5小時): 重點掌握:JVM內存模型&#xff0…

python旅游推薦系統+爬蟲+可視化(協同過濾算法)

??基于用戶的協同過濾算法 ??有后臺管理 ??2w多數據集 這個旅游數據分析推薦系統采用了Python語言、Django框架、MySQL數據庫、requests庫進行網絡爬蟲開發、機器學習中的協同過濾算法、ECharts數據可視化技術,以實現從網站抓取旅游數據、個性化推薦和直觀展…

HarmonyNext上傳用戶相冊圖片到服務器

圖片選擇就不用說了,直接用 無須申請權限 。 上傳圖片,步驟和android對比稍微有點復雜,可能是為了安全性考慮,需要將圖片先拷貝到緩存目錄下面,然后再上傳,當然你也可以轉成Base64,然后和服務…

同為科技智能PDU助力Deepseek人工智能和數據交互的快速發展

1 2025開年,人工智能領域迎來了一場前所未有的變革。Deepseek成為代表“東方力量”的開年王炸,不僅在國內掀起了技術熱潮,并且在全球范圍內引起了高度關注。Deepseek以顛覆性技術突破和現象級應用場景席卷全球,這不僅重塑了產業格…

二、QEMU NFS 環境搭建

? 在上一章節中,我們已經成功完成了內核和 busybox 環境的配置。為了進一步提高開發效率,我們可以使用 NFS(Network File System)來掛載根目錄。NFS 允許我們將本地文件系統通過網絡共享給虛擬機使用,這樣在開發過程中…