希爾腳本簡介及常用命令代碼整理

一、Shell 腳本簡介

1. 定義

Shell 是用戶與操作系統內核交互的橋梁,常見類型有 Bash、Zsh、PowerShell 等。Shell 腳本則是一系列 Shell 命令的集合,通常保存為后綴為.sh 的文本文件。

2. 作用

類別描述
自動化重復性任務例如定期備份數據、執行定時任務,可極大節省人力與時間。
系統配置管理能夠高效地對系統各項參數進行配置與調整。
測試腳本開發助力軟件測試流程,確保軟件質量。
數據處理流水線實現數據自動化處理,提升數據處理效率。

二、Shell 腳本基礎結構

1. 基本格式

#!/bin/bash           # 指定解釋器為 Bash
echo "Hello World!"   # 輸出文本

#!/bin/bash這行代碼指定該腳本使用 Bash 解釋器執行,echo "Hello World!"是一個簡單的輸出命令,用于在終端顯示指定字符串。

2. 執行方式

2.1 賦予執行權限

使用chmod +x script.sh命令為腳本賦予可執行權限。

2.2 執行腳本

通過./script.sh執行已賦予權限的腳本。

三、Shell 腳本常用命令與語法

1. 基礎語法

1.1 Hello World
#!/bin/bash
echo "Hello World"  # 輸出字符串

這是 Shell 腳本的入門示例,echo命令用于在終端輸出文本信息。

1.2 變量賦值與輸出
#!/bin/bash
name="Alice"        # 變量賦值(無需類型聲明)
age=25
echo "Name:  $name, Age:  $age"  # 變量通過 $ 符號引用

在 Shell 腳本中變量賦值簡單直接,無需聲明變量類型。通過$符號引用變量,實現變量值輸出。

1.3 注釋
#!/bin/bash
# 單行注釋:使用#符號
: '多行注釋通過: '和' '包裹實現
'

單行注釋以#開頭,用于對單行代碼解釋說明。多行注釋通過: '' '將注釋內容包裹,適合對復雜邏輯塊說明,增強腳本可讀性。

2. 流程控制

2.1 條件判斷(if 語句)
#!/bin/bash
num=10
if [ $num -gt 5 ]; then  # -gt表示大于echo "Number is greater than 5"
elseecho "Number is less than or equal to 5"
fi

if語句通過判斷條件決定執行不同代碼塊。使用[ ]進行條件判斷時,注意[ ]內符號與變量間需保留空格。同時支持-eq(等于)、-lt(小于)等多種比較操作符。

2.2 case 語句
#!/bin/bash
day=3
case $day in1) echo "Monday" ;;2) echo "Tuesday" ;;3) echo "Wednesday" ;;*) echo "Unknown day" ;;
esac

case語句基于模式匹配實現多分支邏輯。根據變量值與不同模式匹配,執行相應代碼塊,*用于匹配其他未列出情況。

3. 循環結構

3.1 for 循環
#!/bin/bash
# 遍歷數字序列
for i in {1..5}; doecho "Counter:  $i"
done# 遍歷數組
fruits=("Apple" "Banana" "Orange")
for fruit in "${fruits[@]}"; doecho "I like  $fruit"
done

for循環可用于遍歷數字范圍、字符串列表以及數組。通過設置不同遍歷對象,實現對一系列元素的重復操作。

3.2 while 循環
#!/bin/bash
count=1
while [ $count -le 5 ]; doecho "Loop:  $count"((count++))  # 算術運算
done

while循環適用于在條件滿足時重復執行代碼塊,常用于循環次數不確定的場景。使用時要注意設置正確的循環終止條件,避免死循環。

4. 文件與輸入處理

4.1 用戶輸入
#!/bin/bash
echo -n "Enter your name: "  # -n禁止自動換行
read name
echo "Welcome,  $name!"

read命令用于讀取用戶在終端的輸入。通過echo -n輸出提示信息,且-n選項可防止echo自動換行,以便用戶在同一行輸入內容。

4.2 文件操作
#!/bin/bash
# 創建文件并寫入內容
echo "Hello" > output.txt# 逐行讀取文件
while IFS= read -r line; doecho "Line:  $line"
done < input.txt

在文件操作中,>用于將輸出內容覆蓋寫入文件,>>則是追加寫入。通過<實現輸入重定向,可從文件中讀取內容。上述示例展示了創建文件并寫入內容,以及逐行讀取文件內容的操作。

5. 進階技巧

5.1 函數定義
#!/bin/bash
# 定義函數
greet() {echo "Hello,  $1!"  #  $1表示第一個參數
}# 調用函數
greet "Bob"

函數可以將重復使用的代碼邏輯封裝起來,提高代碼復用性。通過$1,?$2等方式傳遞參數,實現函數的靈活調用。

5.2 錯誤處理
#!/bin/bash
set -e  # 遇到錯誤立即退出# 檢查文件是否存在
if [ ! -f "data.txt" ]; thenecho "File not found!" >&2  # 輸出到標準錯誤exit 1
fi

set -e命令可使腳本在遇到錯誤時立即退出,增強腳本健壯性。通過>&2將錯誤信息輸出到標準錯誤流,同時使用exit 1表示腳本因錯誤而退出。

四、常用 Shell 命令分類

1. 文件與目錄操作

命令功能描述
ls列出目錄內容
cd切換目錄
pwd顯示當前目錄路徑
mkdir創建目錄
rm刪除文件或目錄
cp復制文件或目錄
mv移動 / 重命名文件或目錄
find在目錄樹中搜索文件

2. 文本處理

命令功能描述
cat查看、連接或創建文本文件
grep在文件中搜索匹配模式
sed流編輯器,用于文本替換、刪除、查找等
awk強大的文本分析工具
head/tail顯示文件開頭或結尾部分
grep "error" log.txt        # 查找包含 "error" 的行
sed 's/foo/bar/' file.txt   # 將 file.txt 中所有 "foo" 替換為 "bar"

五、常見 Shell 調試技巧

1. 調試選項

1.1 bash -x script.sh

顯示腳本的執行步驟,方便定位錯誤發生位置。

1.2 set -v

顯示腳本中每一條命令,有助于了解腳本執行流程。

1.3 set -e

使腳本在遇到錯誤時立即退出,避免錯誤進一步擴散。

2. 輸入輸出重定向

2.1 command > output.txt

將命令的輸出寫入文件,會覆蓋原有文件內容。

2.2 command >> output.txt

將命令的輸出追加到文件末尾,保留原有文件內容。

2.3 command < input.txt

將文件作為命令的輸入來源。

六、實戰示例:文件統計工具

#!/bin/bash
# 統計文件行數、單詞數和字符數
file=$1if [ -z "$file" ]; thenecho "Usage:  $0 <filename>"exit 1
filines=$(wc -l < "$file")
words=$(wc -w < "$file")
chars=$(wc -m < "$file")echo "Lines:  $lines"
echo "Words:  $words"
echo "Characters:  $chars"

該示例結合條件判斷、文件操作以及外部命令,實現一個簡單實用的文件統計工具。通過檢查輸入參數是否為空,確保腳本正確運行,并利用wc命令統計文件的行數、單詞數和字符數。

整理不易,誠望各位看官點贊 收藏 評論 予以支持,這將成為我持續更新的動力源泉。若您在閱覽時存有異議或建議,敬請留言指正批評,讓我們攜手共同學習,共同進取,吾輩自當相互勉勵!?

后續可以從簡單的命令如echoif語句開始練習,逐步掌握循環、函數等較為復雜的語法結構。用bash -x script.sh等調試選項,幫助理解腳本的執行過程,快速定位和解決問題。

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

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

相關文章

【人工智能下的智算網絡】廣域網優化

一、廣域網絡多路徑I/O寫的并行路徑優化方案 1.1、數學建模 網絡拓撲優化? 1. ?拓撲抽象與路徑發現? ?鄰接矩陣建模?&#xff1a; 將網絡節點抽象為圖頂點 G (V, E)&#xff0c;鏈路帶寬與延遲定義為邊權 w(e)。構造鄰接矩陣 A&#xff0c;其中元素 A_{ij} 表示節點 …

AI測試開發工程師如何用大模型調用工具:從入門到實踐

在軟件測試領域&#xff0c;測試工程師常常面臨測試用例設計復雜、數據生成繁瑣、結果驗證耗時等挑戰。隨著大語言模型&#xff08;LLM&#xff09;的迅速發展&#xff0c;Chat類大模型&#xff08;如GPT、LangChain支持的模型&#xff09;為測試開發提供了一種全新思路——工具…

遷移學習基礎

知識的“跨界復用” 你是一位經驗豐富的廚師&#xff08;源模型&#xff09;&#xff0c;尤其擅長做意大利菜&#xff08;源任務/源域&#xff09;。現在&#xff0c;老板讓你去新開的一家融合餐廳工作&#xff0c;需要你做亞洲菜&#xff08;目標任務/目標域&#xff09;。你…

AI醫生24小時在線:你的健康新‘算法監護人

2025年仲夏&#xff0c;中國醫療AI領域迎來爆發式突破&#xff1a;羅湖醫院集團率先部署"DeepSeek-騰訊混元"雙AI診療系統&#xff0c;實現患者15分鐘極速就診閉環&#xff1b;復旦大學研發的微量血液檢測技術取得重大突破&#xff0c;僅需數滴血樣即可篩查上千種疾病…

Java 中 DataSource-數據源 的基礎介紹

Java 中 DataSource-數據源 的基礎介紹 一、核心概念解析1.1 數據源&#xff08;Data Source&#xff09;1.2 數據庫連接池&#xff08;Connection Pool&#xff09;1.3 二者關系1.4 DataSource 接口 二、DataSource 解決的問題與優勢2.1 DataSource 的作用2.2 傳統方式的局限性…

Vue + Vite 項目部署 Docker 全攻略:原理、路由機制、問題排查與開發代理解析

Vue Vite 項目部署 Docker 全攻略&#xff1a;原理、路由機制、問題排查與開發代理解析 本文面向希望將 Vue 3 Vite 項目部署到生產環境&#xff08;Docker NGINX&#xff09;并深入理解路由行為、構建機制與常見問題排查的開發者。 &#x1f4e6; 一、項目準備 以 Vue 3 …

Vue3 + TypeScript 使用 v-bind() 在 <style scoped> 中動態設置 CSS 樣式值

使用要求&#xff1a; Vue 3.3 <style scoped>&#xff0c;Vue 的 v-bind() 在 CSS 中只支持在 scoped style 或 CSS Modules 中使用v-bind("cssVar") 雙引號包裹響應式變量&#xff0c;變量 cssVar 必須是 Vue 的響應式數據&#xff08;如 ref 或 reactive&…

php列表頭部增加批量操作按鈕,多選訂單數據批量微信退款(含微信支付SDK)

index_search.html data-table-id:表格id data-rule:需要傳輸的列表字段 data-action:控制器方法 <a class="layui-btn layui-btn-primary layui-btn-sm" style=

小程序還沒有上線就提示小程序違規,支付失敗

如果出現這種情況&#xff0c;一般情況下不是真正的違規&#xff0c;是因為在小程序后臺&#xff0c;沒有設置訂單詳情頁面的path地址的原因 1.首先看一下&#xff0c;在站內信中是否有相關訂單的通知&#xff1a;站內信&#xff08;小程序通知中心&#xff09;查看是否看到 關…

展開說說Android之Glide詳解_源碼解析

基于上一篇介紹了Glide的使用篇本文分析一下Glide的源碼實現&#xff0c;看看我們簡單幾步就實現的圖片展示功能在源碼中是怎樣完成的。 一、Glide中的核心文件 先逐個介紹一下個人以為的幾個核心類&#xff1a;? 1、Glide Glide是必經的入口&#xff0c;通過Glide.get(con…

商品中心—6.商品考核系統的技術文檔二

大綱 1.基于大數據系統的商品考核數據指標 2.基于商品考核數據指標的商品考核流程 3.商品考核失敗后的處理 考核流程的設計 4.商品考核系統數據庫模型設計 5.商品考核系統核心接口 6.商品生命周期系統的定時考核任務 6.商品生命周期系統的定時考核任務 (1)定時任務處理…

鴻蒙組件通用事件開發全攻略:從基礎交互到工程實踐

一、引言&#xff1a;事件系統 —— 構建交互體驗的核心樞紐 在鴻蒙應用開發體系中&#xff0c;組件事件系統是連接用戶操作與應用邏輯的關鍵橋梁。從基礎的點擊交互到復雜的多觸點手勢&#xff0c;通用事件覆蓋了全場景設備的交互需求。本文將系統解構鴻蒙事件體系的核心機制…

老項目重構難題破解:飛算 JavaAI 如何實現技術升級突圍

在企業數字化轉型進程中&#xff0c;大量 Java 老項目因長期迭代積累的技術債務&#xff0c;陷入 "重構必要性與實施難度并存" 的困境。這些遺留系統普遍存在代碼體系老化、架構模式滯后、維護成本高企等問題&#xff0c;成為企業技術升級的絆腳石。 傳統 Java 老項…

idea使用技巧分享

寫在前面 分享一些常用的idea使用技巧&#xff0c;進來看看有沒有你不知道的。 設置項目默認配置 TODO設置 位置 方式一&#xff1a;setting -> editor -> TODO 方式二&#xff1a; 定義Patterns過濾模式 正則中“\b”是元字符代表著單詞的開頭或結尾&#xff0c;也就…

【Dify精講】第8章:Agent能力實現原理【知識卡片】

第8章&#xff1a;Agent能力實現原理http://www.airinto.com/share/e7b7e27f 一、Agent架構設計 二、工具調用機制 三、ReAct框架實現 四、自定義Agent開發 五、性能優化與監控 六、總結與實戰建議

【軟件】安裝Miniconda

安裝 根據搜索結果&#xff0c;以下是使用Homebrew在macOS上安裝Miniconda的詳細步驟&#xff1a; 1.安裝Homebrew&#xff08;如果尚未安裝&#xff09; 打開終端&#xff08;Terminal&#xff09;&#xff0c;運行以下命令安裝Homebrew&#xff1a; /bin/bash -c "$(…

FastAPI:(6)錯誤處理

FastAPI&#xff1a;(6)錯誤處理 由于CSDN無法展示「漸構」的「#d&#xff0c;#e&#xff0c;#t&#xff0c;#c&#xff0c;#v&#xff0c;#a」標簽&#xff0c;推薦訪問我個人網站進行閱讀&#xff1a;Hkini 「漸構展示」如下&#xff1a; #c 概述 文章概念關系 graph TDA…

408第一季 - 數據結構 - 排序

排序的概念 外部排序很難&#xff0c;后面都是內部排序 插入排序 直接插入排序 理解 這個排序第一輪是從第二個元素開始的 然后是從后往前一個一個比的 然后我們看i5的情況&#xff0c;會出現比較次數和移動次數的概念&#xff0c;這里97動了 然后i8時&#xff0c;49最好…

高效賬號信息管理工具,可安全隨機生成密碼

軟件介紹 今天給大家推薦一款安全可靠的密碼管理工具&#xff0c;幫助用戶輕松管理各類賬號密碼。 安全便捷的密碼解決方案 這是一款采用先進加密技術開發的密碼管理器&#xff0c;不僅可以生成高強度隨機密碼&#xff0c;還提供安全的賬號密碼備份存儲功能。 基礎安全設置 …

如何在markdown文件中(博客)添加emoji表情,讓你的博客看起來更加優雅

在Markdown中使用Emoji的完整指南 按分類快速參考的完整Emoji列表一、狀態指示類:bulb:二、提示信息類:bulb:三、內容類型類:bulb:四、操作指令類:bulb:五、進度狀態類:bulb:六、技術相關類:bulb:七、人員角色類:bulb:八、版本控制類:bulb: 你學會了嗎 按分類快速參考的完整Emo…