Linux 之 shell 編程

来源:https://www.cnblogs.com/wymk-blog/archive/2023/08/14/17574890.html
-Advertisement-
Play Games

# Linux 之 shell 編程學習筆記(並不完全正確,有誤請指正) ## 概念性知識點 ### 腳本概念 >**腳本(Script),是使用一種特定的描述性語言,依據一定的格式編寫的 可執行文件** ### 運行腳本要求 >**腳本須有 ==可執行== 許可權,即 ==x== 許可權** > >* ...


Linux 之 shell 編程學習筆記(並不完全正確,有誤請指正)

概念性知識點

腳本概念

腳本(Script),是使用一種特定的描述性語言,依據一定的格式編寫的 可執行文件

運行腳本要求

腳本須有 可執行 許可權,即 x 許可權

內容格式:以#!/bin/bash開頭

腳本的執行方式

法一(需可執行許可權)

賦予腳本可執行許可權:chmod u+x [腳本]

有可執行許可權 的前提下,使用./[腳本] 或 直接輸入腳本的絕對路徑 [絕對路徑] 即可運行腳本

法二(無需可執行許可權)

直接使用sh [腳本]命令運行腳本

shell 編程知識點

shell 的變數

Linux shell 的變數分為 系統變數用戶變數

常見系統變數:\$HOME 、\$PWD 、\$PATH 、\$USER 、$SHELL 等

常用命令

set 查看當前shell中所有變數
unset [變數] 撤銷變數
echo $[變數] 查詢變數的值

基本規則

與其他語言規則大同小異

註意:等號兩側 不能有空格

變數名一般習慣為大寫(約定俗成)

基本語法

1. 定義變數:[變數名]=[值](中間不能有空格)

2. 撤銷變數:unset [變數]

3. 定義靜態變數:readonly [變數名]=[值] (靜態變數不能被撤銷,即不能被 unset )

4. 將命令的結果賦給變數:[變數名]=`[命令]`[變數名]=$([命令]) (第一種寫法中 ` 號為 tab 鍵上面的鍵

5. 輸出變數時帶上 $ 符號,即 echo $[變數]

位置參數變數

image

例如:

image

傳參,輸出:

image

預定義變數

image

例如:

image

註意:第二行 & 符號表示 以後臺方式運行

輸出:

image

shell 的多行註釋

格式

:<<![內容]!

shell 的運算符

shell 運算的三種方法

法一(不好用)

[變數]=$(([表達式]))

image

法二(好用)

[變數]=$[[表達式]]

image

法三(難用)

[變數]=`expr[簡單表達式]`

!!!註意:` 號為反引號

數字與符號 間有空格

* 號前必須帶轉義字元 \

image

shell 的條件判斷

判斷語句

[ condition ] // 非空 返回 true ,空 返回 false

可用echo $?查詢上一條判斷是否執行成功( 0 為 true ,>1 為 false )

註意:condition 前後有 空格

三元運算符

[ condition ] && [語句1] || [語句2]

若 condition 滿足,則執行語句1

兩個整數之間比較

= 字元串比較

-lt 小於(less than)

-le 小於等於(less equal)

-eq 等於(equal)

-gt 大於(greater than)

-ge 大於等於(greater equal)

-ne 不等於(Not equal)

按照文件許可權進行判斷

-r 有讀的許可權(read)

-w 有寫的許可權(write)

-x 有執行的許可權(execute)

按照文件類型進行判斷

-f 文件存在並且是一個常規的文件(file)

-e 文件存在(existence)

-d 文件存在並是一個目錄(directory)

shell 的流程式控制制

if條件判斷

!!!註意:condition 前後必須有 空格,即使沒有 condition 也要有空格

基本語法
單分支
#單分支

if [ condition ]

then

        [符合該條件執行的語句]

fi

例如:

image

多分支
#多分支

if [ condition ]

then

        [符合該條件執行的語句]

elif [ condition ]

then

        [符合該條件執行的語句]

else

        [符合該條件執行的語句]

fi

例如:

image

case選擇語句

基本語法
case $1 in

"[條件]")

        [符合該條件執行的語句]

;; 				// ;; 符號代表 結束

"[條件]")

        [符合該條件執行的語句]

*) 				//如果沒有符合上麵條件的值,則執行這段代碼

        [符合該條件執行的語句]

esac

例如:

image

輸出:

image

for 迴圈

基本語法1
for [變數] in [值]

do

	[代碼塊]

done

例如:

image

基本語法2
for (([初始值];[迴圈控制條件];[變數的變化]))

do

	[代碼塊]

done

例如:

image

while 迴圈

基本語法
while [ 條件 ] //註意 條件 前後有空格

do

	[代碼塊]

done

例如:

image

read 讀取控制台的輸入

基本語法
read -p "[提示語]" 指定輸入時的提示語
read -t [秒] 指定輸入的等待時間

例如:

image

shell 的函數

系統函數

basename 基本語法
basename [文件路徑] 獲取文件名
basename [文件路徑] [尾碼] 獲取文件名(不帶尾碼)

例如:

image

dirname 基本語法
dirname [文件絕對路徑] 獲取文件的路徑

例如:

image

自定義函數

基本語法
function [函數名]{

	[代碼塊]

}

例如:

image

函數調用
[函數名] [參數]

例如:

image


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

-Advertisement-
Play Games
更多相關文章
  • Lua程式設計第四版第二部分編程實操自做練習題答案,帶:star:為重點。 ## 9.1 > 請編寫一個函數integral,該函數以一個函數f為參數並返回其積分的近似值 使用右矩陣法近似積分值 ```lua function integral(f) return function(a, b) lo ...
  • 如果一個變數應該有一個固定的、不能改變的值,你可以使用`const`關鍵字。 `const`關鍵字將變數聲明為"常量",這意味著它是**不可改變和只讀**的。 **語法** `const CONSTNAME type = value` ## 聲明常量 聲明常量的示例: ```Go package m ...
  • 最近在寫支付的東西,調試時候需要讓支付平臺能夠回調本地介面來更新支付成功的狀態。但由於開發機器沒有公網IP,所以需要使用內網穿透來讓支付平臺能夠成功訪問到本地開發機器,這樣才能更高效率的進行調試。 推薦內網穿透的文章已經很多很多,還有很多大合集的推薦,但也因為推薦的太多,也會讓人眼花繚亂,不斷嘗試不 ...
  • 在自動化測試腳本的運行過程中,webdriver操作瀏覽器的時候,對於元素的定位是有一定的超時時間,大致應該在1-3秒的樣子,如果這個時間內仍然定位不到元素,就會拋出異常,中止腳本執行。我們可以通過在腳本中設置等待的方式來避免由於網路延遲或瀏覽器卡頓導致的偶然失敗,常用的等待方式有三種: ### 一 ...
  • 剛開始收到磁碟告警的時候,懷疑是日誌級別問題,業務日誌輸出過多導致磁碟打滿。但是查看我們自己的業務日誌文件目錄,每個日誌文件內容都不是很大。 ...
  • 1. <?php //單鏈表 class node { public $id; //節點id public $name; //節點名稱 public $next; //下一節點 public function __construct($id, $name) { $this->id = $id; $t ...
  • 我在上一章《形象談JVM-第一章-認識JVM》提到的“翻譯”,其實就是我們今天所說的“編譯”的概念。 上一章原文鏈接:https://www.cnblogs.com/xingxiangtan/p/17617654.html 原文: 【 虛擬機的職責是將位元組碼翻譯成對應系統能夠識別並執行的機器碼, 比 ...
  • python 進程與線程是併發編程的兩種常見方式。進程是操作系統中的一個基本概念,表示程式在操作系統中的一次執行過程,擁有獨立的地址空間、資源、優先順序等屬性。線程是進程中的一條執行路徑,可以看做是輕量級的進程,與同一個進程中的其他線程共用相同的地址空間和資源。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...