shell常用語法

一、shell變量

定義變量語法:

變量名=值  # 等號兩邊不能有空格

示例:

#!/bin/bash
name="Alice"
echo "Hello, $name!"  # 使用變量

使用變量-語法:

兩種方式:
第一種:${變量名}
第二種:$變量名

示例:?

代碼示例:1 #! /bin/bash2 3 #定義變量的方式有兩種4 #第一種:${變量名}5 name="Tom"6 echo "你好呀!${name}"7 8 #第二種:$變量名9 echo "你好呀!$name" 

?二、shell的數據類型

1.字符串

基本語法:

定義:str=”hello shell”
長度:${#str}
切片:${str:1:4}

代碼示例:

#! /bin/bash
#定義字符串并賦值
str="I LOVE Shell!"
#取值
echo "str:${str}" 
#獲取長度
echo "Length the str is ${#str}"
#獲取字符串的切片
echo "str[1:6] is ${str:1:6}"

運行效果:

2. 數組

基本語法:

定義: arr=(vl v2 v3 v4 v5 v6)
通過索引獲取元素: ${arr[0]}
獲取列表所有元素:${arr[*]}
獲取列表的長度:${#arr[*]}

代碼示例:

1 #! /bin/bash
2 
3 #定義一個數組
4 zoo=(
5         Dog
6         pig
7         Monkey
8         Panda
9         lion
10 )
11 #輸出所有元素:${變量名[*]}
12 echo "All Animal are ${zoo[*]}"
13 #輸出數組長度(數組中元素的個數):${#變量名[*]}
14 echo "Length the zoo is ${#zoo[*]}"
15 #輸出某個元素:${變量名[n]} n<=數組的長度-1
16 n=3
17 echo "zoo的第${n}個元素是:${zoo[$[n]]}"
18 #組合應用:
19 echo "zoo的最后一個元素是:${zoo[((${#zoo[*]})-1)]}"

?運行結果:

三、shell的邏輯判斷

1.if else

基本語法:

if [ 條件 ]; then命令
elif [ 條件 ]; then命令
else命令
fi

示例:

#!/bin/bash
echo "請輸入一個數字:"
read numif [ $num -gt 10 ]; thenecho "這個數字大于10"
elif [ $num -eq 10 ]; thenecho "這個數字等于10"
elseecho "這個數字小于10"
fi

運行結果:

請輸入一個數字:
8
這個數字小于10

** 補充:文件目錄的判斷 **

1 #! /bin/bash
2 
3 path=$1
4 
5 #-e 判斷文件是否存在
6 if [ -e $path ]
7 then
8         echo "$path 存在"
9 else    
10         echo "$path 不存在"
11 fi12 #-f 判斷是否是文件
13 if [ -f $path ]
14 then
15         echo "$path 是文件"
16 else    
17         echo "$path 不是文件"
18 fi      19 #-d 判斷是否是目錄
20 if [ -d $path ]
21 then
22         echo "$path 是目錄"
23 else
24         echo "$path 不是目錄"
25 fi

運行結果:

if else小結

表達式使用: condition 和中括號之間,一定要有空格

2.case

語法:

case $變量名 in
"值 1") 操作;;
esac

四、shell的循環

1. for循環

for val in ${list[*]}:
docommandcommand
done

代碼示例:

1 #! /bin/bash
2 
3 list=(
4         service1
5         service2
6         service3
7         service4
8         service5
9 )
10 
11 for service in ${list[*]}
12 do
13         echo "檢查服務:${service}"
14 done

運行結果:

2. while循環

語法:

while condition
docommandcommand
done

五、shell函數

1. 語法:

[ function ] funname [()]{action;[return int;]}

說明:

  • 1、可以帶?function fun()?定義,也可以直接?fun()?定義,不帶任何參數。
  • 2、參數返回,可以顯示加:return?返回,如果不加,將以最后一條命令運行結果,作為返回值。?return?后跟數值?n(0-255).

2. 代碼示例:

#!/bin/bashdemoFun(){echo "這是我的第一個 shell 函數!"
}
echo "-----函數開始執行-----"
demoFun
echo "-----函數執行完畢-----"

輸出結果:

-----函數開始執行-----
這是我的第一個 shell 函數!
-----函數執行完畢-----

下面定義一個帶有?return?語句的函數:

代碼示例:

#!/bin/bashfunWithReturn(){echo "這個函數會對輸入的兩個數字進行相加運算..."echo "輸入第一個數字: "read aNumecho "輸入第二個數字: "read anotherNumecho "兩個數字分別為 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum))
}
funWithReturn
echo "輸入的兩個數字之和為 $? !"

輸出結果:

這個函數會對輸入的兩個數字進行相加運算...
輸入第一個數字:?
1
輸入第二個數字:?
2
兩個數字分別為 1 和 2 !
輸入的兩個數字之和為 3 !?

函數返回值在調用該函數后通過?$??來獲得。

注意:所有函數在使用前必須定義。這意味著必須將函數放在腳本開始部分,直至shell解釋器首次發現它時,才可以使用。調用函數僅使用其函數名即可。

注意:?return?語句只能返回一個介于 0 到 255 之間的整數,而兩個輸入數字的和可能超過這個范圍。

要解決這個問題,您可以修改 return 語句,直接使用 echo 輸出和而不是使用 return:

funWithReturn(){echo "這個函數會對輸入的兩個數字進行相加運算..."echo "輸入第一個數字: "read aNumecho "輸入第二個數字: "read anotherNumsum=$(($aNum + $anotherNum))echo "兩個數字分別為 $aNum 和 $anotherNum !"echo $sum  # 輸出兩個數字的和
}

六、函數參數

?在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數$2表示第二個參數...

?1.?帶參數的函數示例:

#!/bin/bashfunWithParam(){echo "第一個參數為 $1 !"echo "第二個參數為 $2 !"echo "第十個參數為 $10 !"echo "第十個參數為 ${10} !"echo "第十一個參數為 ${11} !"echo "參數總數有 $# 個!"echo "作為一個字符串輸出所有參數 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

輸出結果:

第一個參數為 1 !
第二個參數為 2 !
第十個參數為 10 !
第十個參數為 34 !
第十一個參數為 73 !
參數總數有 11 個!
作為一個字符串輸出所有參數 1 2 3 4 5 6 7 8 9 34 73 !

注意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。

另外,還有幾個特殊字符用來處理參數:

參數處理說明
$#傳遞到腳本或函數的參數個數
$*以一個單字符串顯示所有向腳本傳遞的參數
$$腳本運行的當前進程ID號
$!后臺運行的最后一個進程的ID號
$@與$*相同,但是使用時加引號,并在引號中返回每個參數。
$-顯示Shell使用的當前選項,與set命令功能相同。
$?顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

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

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

相關文章

《教育退費那些事兒:從困境到破局》

《教育退費那些事兒&#xff1a;從困境到破局》 教育退費&#xff1a;不容忽視的熱點問題 在當今社會&#xff0c;教育消費已成為家庭支出的重要組成部分。無論是 K12 階段的學科輔導、藝術特長培訓&#xff0c;還是成人的職業技能提升、學歷繼續教育&#xff0c;家長和學生們…

老字號煥新案例:天貓代運營如何讓傳統品牌年輕化破圈

老字號煥新案例&#xff1a;天貓代運營如何讓傳統品牌年輕化破圈 在消費升級與年輕化浪潮的沖擊下&#xff0c;傳統老字號品牌常面臨“有歷史無活力、有產品無流量”的困境。如何借助電商平臺實現品牌煥新&#xff0c;成為其破局的關鍵。品融&#xff08;PINKROON&#xff09…

高可靠低紋波國產4644電源芯片在工業設備的應用

摘要 隨著工業自動化和智能化的飛速發展&#xff0c;工業設備對于電源芯片的性能和可靠性提出了前所未有的嚴格要求。電源芯片作為工業設備的核心供電組件&#xff0c;其性能直接影響到整個設備的運行效率和穩定性。本文以國科安芯的ASP4644四通道降壓穩壓器為例&#xff0c;通…

Vue組件-霓虹燈:技術解析與實現

Vue組件-霓虹燈&#xff1a;技術解析與實現 本文將詳細解析如何使用Vue 3實現一個動態炫彩霓虹燈效果。 預覽 概述 此Vue組件創建了一個由7個同心圓環組成的霓虹燈效果&#xff0c;每個圓環具有彩虹中的一種顏色&#xff08;紅、橙、黃、綠、藍、靛、紫&#xff09;。這些圓…

【實戰教程】從零實現DeepSeek AI多專家協作系統 - Spring Boot+React打造AI專家團隊協作平臺

&#x1f680; 本項目是DeepSeek大模型應用系列的V3版本&#xff0c;基于V1和V2版本的功能進行全面升級&#xff0c;引入了多智能體協作機制&#xff01; 系列教程推薦閱讀順序&#xff1a; 【V1版本】零基礎搭建DeepSeek大模型聊天系統 - Spring BootReact完整開發指南【V2版本…

第8章-5 sql的執行順序

上一篇&#xff1a;《第8章-4 查詢性能優化2》&#xff0c;接著來了解查詢的執行順序&#xff0c;了解順序對于優化會有幫助。 1&#xff0c;sql編寫順序 select distinct 查詢字段 from 表名 JOIN 表名 ON 連接條件 where 查詢條件 group by 分組字段 having 分組后…

設計模式學習整理

目錄 UML類圖 設計模式六大原則 1.單一職責原則 2.里氏替換原則 3.依賴倒置原則 4.接口隔離原則 5.迪米特法則(最少知道原則) 6.開(放封)閉原則 設計模式分類 1.創建型模式 2.結構型模式 4.行為型模式 一、工廠模式(factory——簡單工廠模式和抽象工廠模式) 1.1、…

Linux干貨(二)

前言 從B站黑馬程序員Linux課程摘選的學習干貨&#xff0c;新手友好&#xff01;若有侵權&#xff0c;會第一時間處理。 目錄 前言 1.cd pwd命令 1.cd命令的作用 2.pwd命令的作用 2.相對路徑絕對路徑和特殊路徑符 1.相對路徑和絕對路徑 1.絕對路徑 2.相對路徑 2.特殊…

ngx_http_keyval_module動態鍵值管理

一、模塊安裝與驗證 檢查模塊是否可用 nginx -V 2>&1 | grep --color -o ngx_http_keyval_module如果看到 ngx_http_keyval_module&#xff0c;說明模塊已編譯進 NGINX。 若未找到&#xff0c;請聯系你的 NGINX 供應商&#xff0c;獲取商業版或重新編譯并啟用該模塊&am…

upload-labs通關筆記-第4關 文件上傳之.htacess繞過

目錄 一、.htacess 二、代碼審計 三、php ts版本安裝 1、下載ts版本php 2、放入到phpstudy指定文件夾中 3、修改php配置文件 4、修改php.ini文件 5、修改httpd.conf文件 &#xff08;1&#xff09;定位文件 &#xff08;2&#xff09;修改文件 6、重啟小皮 7、切換…

LeetCode 88. 合并兩個有序數組 | Python 最簡寫法 + 實戰注釋

在日常刷題和面試中,「合并兩個有序數組」是一個經典基礎題。雖然屬于簡單難度,但它非常考察你的數組操作技巧和代碼優化能力。本篇文章將帶你從基礎解法入手,進階到最簡潔的三元表達式寫法,理解每一行代碼背后的邏輯。 ?? 題目描述 給你兩個按 非遞減順序 排列的整數數組…

Kafka進階指南:從原理到實戰

目錄 一、Kafka 基礎回顧 二、生產者進階 2.1 數據生產流程深度解析 2.2 關鍵配置參數詳解 2.3 序列化與自定義序列化器 三、消費者進階 3.1 消費方式與原理 3.2 分區分配策略 3.2.1 Range&#xff08;范圍&#xff09;策略 3.2.2 Round - Robin&#xff08;輪詢&…

Lightpanda開源瀏覽器:專為 AI 和自動化而設計的無界面瀏覽器

?一、軟件介紹 文末提供程序和源碼下載 Lightpanda開源瀏覽器&#xff1a;專為 AI 和自動化而設計的無界面瀏覽器&#xff1b; Javascript execution Javascript 執行Support of Web APIs (partial, WIP)支持 Web API&#xff08;部分、WIP&#xff09;Compatible with Pla…

團結引擎開源車模 Sample 發布:光照渲染優化 動態交互全面體驗升級

光照、材質與交互效果的精細控制&#xff0c;通常意味著復雜的技術挑戰&#xff0c;但借助 Shader Graph 14.1.0(已內置在團結引擎官方 1.5.0 版本中)&#xff0c;這一切都變得簡單易用。通過最新團結引擎官方車模 Sample&#xff0c;開發者能切身感受到全新光照優化與編輯功能…

SpringCloud之Ribbon基礎認識-服務負載均衡

0、Ribbon基本認識 Spring Cloud Ribbon 是基于 Netflix Ribbon 實現的一套客戶端 負載均衡的工具。 Ribbon 主要功能是提供客戶端負載均衡算法和服務調用 Ribbon 客戶端組件提供一系列完善的配置項如連接超時&#xff0c;重試等。 Ribbon 會基于某種規則&#xff08;如簡單…

當 DeepSeek 遇見區塊鏈:一場顛覆式的應用革命

目錄 一、DeepSeek 與區塊鏈的初印象二、技術融合&#xff1a;創新的基石2.1 強化學習優化智能合約2.2 混合專家系統適配多鏈2.3 語義理解增強合規性 三、應用實踐&#xff1a;重塑行業格局3.1 DeFi 協議智能化躍遷3.2 GameFi 經濟深度進化3.3 供應鏈金融信任增強 四、面臨挑戰…

vue3項目中使用CodeMirror組件的詳細教程,中文幫助文檔,使用手冊

簡介 這是基于 Vue 3 開發的 CodeMirror 組件。該組件基于 CodeMirror 5 開發&#xff0c;僅支持 Vue 3。 除了支持官方提供的各種語法模式外&#xff0c;還額外添加了日志輸出展示模式&#xff0c;開箱即用&#xff0c;但不一定適用于所有場景。 如需完整文檔和更多使用案例…

LeetCode熱題100--240.搜索二維矩陣--中等

1. 題目 編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a; 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[1…

2025爬蟲實戰技巧:高效數據采集方案

2025爬蟲實戰技巧:高效數據采集方案 ?? 本文核心價值 HTTPS請求鏈路加密逆向解析動態Cookie生成機制破解Cloudflare等高級防護繞過方案分布式爬蟲架構設計要點目錄 2025爬蟲實戰技巧:高效數據采集方案?? 本文核心價值一、現代反爬機制技術解析1.1 主流平臺防護體系1.2 反…

綁定 SSH key(macos)

在 macOS 上綁定 Gitee 或 GitHub 的 SSH Key&#xff0c;通常分為以下幾步操作&#xff0c;包括生成 SSH key、添加到 ssh-agent&#xff0c;并配置到 Gitee 或 GitHub 平臺。 1. 檢查是否已有 SSH Key ls -al ~/.ssh 看看是否已有 id_rsa 或 id_ed25519 等文件。如果沒有就…