知識點匯總linuxC高級-3 shell腳本編程

shell腳本編程

shell ---> 解析器:sh csh ksh bash

shell命令 ---> shell解析的命令

shell腳本 --> shell命令的有序集合

shell腳本編程:

????????將shell命令結合按照一定邏輯集合到一起,寫到一個 .sh 文件,去實現一個或多個功能,這個腳本文件不用編譯可以直接執行

解釋型:腳本、python

編譯型:c、c++、java、匯編語言

寫一個shell腳本文件的步驟:

創建一個腳本文件

????????touch xxx.sh

編輯腳本內容

????????vi xxx.sh 或者 code xxx.sh

執行腳本文件

? ? ? ? 1)chmod 777 xxx.sh? ? ./xxx.sh

? ? ? ? 2)bash 文件名

    shell變量

    shell中允許建立變量存儲數據,但是不支持數據類型(如:整型、字符、浮點類型),所有賦值給變量的值都解釋為一串字符。

    變量的定義格式:? 變量名=值(等號兩邊都不能有空格)

    取變量的值:$變量名

    變量的分類
    系統環境變量

    系統配置好的,內置的變量

    env 或者 printenv:查看環境變量

    臨時修改:export 變量名=值

    永久生效:只需要將這個命令放到家目錄下的 .bashrc 中,當前用戶有效

    自定義變量

    變量的格式

    變量名=

    變量名='值'

    變量名="值"

    =兩側不能有空格

    '' 內不能使用$展開變量的值

    修飾變量的關鍵字:

    unset:清空變量的值,不能清空readonly修飾的變量

    readonly:只讀變量,值不能修改

    位置變量和命令行參數

    $0 ---> 執行腳本名

    $1 $2 $3 ... $9

    ${n} ---> n:大于等于10的數:如 ${10}

    $# ---> 獲取所有外部參數的個數(不包含腳本名)

    $* 或者 $@ ---> 獲取所有外部參數(不包含腳本名)

    預定義變量

    $? 獲取的是上一條命令是否是正確的執行結果

    0:為真 非0:為假

    $$ 獲取當前腳本的進程ID

    shell中的語句

    說明性語句

    ????????以 # 號開始到該行結束,不被解釋執行

    ????????#!/bin/bash 告訴操作系統使用哪一種解析器執行的腳本文件

    功能性語句

    ????????任意的shell命令、用戶程序或其它shell程序

    結構性語句

    ????????條件測試語句、多路分支語句、循環語句、循環控制語句

    功能性語句

    1.read(類似C語言中scanf)

    ?????????從終端獲取值賦值給變量

    ????????格式 read 變量1 變量2

    ????????加提示語句:read -p "提示語句" 變量1 變量2

    補充:

    read -s 變量 ---> 輸入的信息不回顯

    read -t 秒數 變量 ---> 如果用戶n秒不輸入,就結束輸入向后執行語句

    read -n 個數 變量名 ---> 如果輸入n個字符,自動停止

    shell中的運算

    shell本身不擅長運算,需要借助于運算符和其他的指令

    2.1. expr

    使用方法:

    1. expr中使用變量,必須加$
    2. 如果想要接收expr的結果,必須使用命令置換符
    3. expr中運算符兩側必須有空格 、不支持自增和shell中的冪運算
    4. expr中使用某些運算符是,需要轉義 |、>、<...
    5. expr指令的結果,直接回顯到終端上,可以使用命令置換符接收

    2.2. let

    使用方法:

    1. let 變量名=表達式
    2. let運算時,運算符兩側不能有空格
    3. let中使用變量時,可以加$也可以不加
    4. 如果直接寫成 let 表達式,表達式會運行,但是沒有辦法接收

    3.test

    test語句可以測試三種對象

    字符串 整數 文件屬性

    3.1. 字符串測試

    s1 = s2 測試兩個字符串是否相等

    s1 != s2 測試兩個字符串是否不相等

    -z s1 測試字符串是否為空

    -n s1 測試字符串是否不為空

    3.2. 整數測試

    a -eq b 測試a和b相等 equal

    a -ne b 測試a和b不相等 not equal

    a -gt b 測試a大于b greater than

    a -ge b 測試a大于等于b greater equal than

    a -lt b 測試a小于b less than

    a -le b 測試a小于等于b less equal than

    3.3. 文件屬性測試

    -d file 測試file是否為一個目錄

    -f file 測試file是否是一個普通文件

    -e file 測試file是否存在

    結構性語句
    if .. then .. fi

    基本結構

    if 表達式
    then命令表
    fi
    

    分層結構

    if 表達式
    then命令表1
    else命令表2
    fi
    

    嵌套結構

    if 表達式
    thenif 表達式then
            命令表else
            命令表fi
    else
        命令表
    fi

    elif

    if 表達式1
    then命令表1
    elif 表達式2
    then命令表2
    ...
    else命令表n
    fi
    
    

    注意:

    如果表達式為真, 則執行命令表中的命令; 否則退出if語句,

    即執行fi后面的語句。

    if和fi是條件語句的語句括號, 必須成對使用;

    命令表中的命令可以是一條, 也可以是若干條。

    補充操作符:

    -o 或運算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true

    -a 與運算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false

    ! 非運算 例如 [ ! false ] 返回 true

    && 邏輯與 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false

    || 邏輯或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true

    | 位或 例如 echo $[2|2]

    &位與 例如 echo $[2&1]

    case語句

    工作方式:

    取值后面必須為關鍵字 in ,每一個模式必須以右括號結束。

    取值可以為變量或者常量,取值檢測匹配的每一個模式 一旦模式匹配,其間所有命令開始執行直至 ;;

    執行完匹配模式相應的命令不會再繼續匹配其他的模式

    如果無一匹配模式,使用 * 號捕獲該值

    for循環
    for語句的幾種書寫格式

    1.for i in 1 2 3 4 5 do .. done:變量i從單詞表中取

    for i in 1 2 3 4 5
    do語句塊
    done

    2.for i? do .. done:變量i從命令行中取值,可以省略in 單詞表

    for in
    do語句塊
    done

        3.for i in {1..10} do .. done

        for i in {1..10}
        do語句塊
        done

        4.for (( i = 1; i <= 10; i++ )) do .. done

        for ((i=1;i<10; i++))
        do語句塊
        done

        while循環
        while 命令或表達式
        do命令表
        done

        循環控制語句

        break n :結束n層循環

        continue n :跳過n層的本次循環

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

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

        相關文章

        【C++學習篇】:基礎

        文章目錄前言1. main() 函數2. 變量賦值3. cin和cout的一些細節4. 基本類型運算5. 內存占用6. 引用7. 常量前言 C 語法的學習整理&#xff0c;作為個人總結使用。 1. main() 函數 #include <iostream> //使用輸入輸出流庫&#xff08;cin&#xff0c;cout&#xff09;…

        使用nginx反向代理kkfile

        這篇說一下我解決的思路和方式哈&#xff0c;不一定適用于大家&#xff0c;可以做個參考比如我們的系統服務是http://10.63.25.35:80&#xff0c;而我們的文件服務是在10.63.25.37:8012上&#xff0c;正常不使用代理的話&#xff0c;我們前端調用后端接口&#xff0c;后端調用k…

        【低成本擴容】動態擴容實戰指南

        面對擴容操作時&#xff0c;下面這種操作是否也會迷惑你&#xff1f;下面來為大家解惑~size_t newcapacity 2*_capacity > (_size len)?2*_capacity:(_sizelen); //len為即將插入的字符串有效字符個數//_size為當前字符串有效字符個數//_capacity為當前容量大小//newcapa…

        Product Hunt 每日熱榜 | 2025-08-14

        1. Autumn 標語&#xff1a;為AI初創公司簡化的Stripe服務 介紹&#xff1a;Autumn幫助AI初創公司通過只需三個API調用來定價、計量和控制使用情況。基于Stripe搭建&#xff0c;它可以在一個地方管理訂閱、使用情況和訪問權限。無需復雜的webhooks或后端邏輯&#xff0c;非常…

        Scrapy + Django爬蟲可視化項目實戰(二) 詳細版

        系列文章 Scrapy + Django爬蟲可視化項目實戰(一)_django scrapy-CSDN博客 實現技術 Scrapy Django Echarts 引言 可視化部分需要讀者具備一定的Django基礎!!! 上一個文章我們已經實現了爬取景點的數據,那么接下來就是根據爬取到的數據進行可視化 一、環境搭建 (一) 創…

        選擇式與生成式超啟發算法總結

        這里寫目錄標題Selection HHGeneration HHGPHH示例存在大量針對特定問題設計的啟發式算法&#xff0c;近年來學術界提出了一個關鍵問題&#xff1a;如何選擇最合適的啟發式方法。這一問題推動了超啟發式&#xff08;hyper-heuristic&#xff09;方法的研究發展。超啟發式是一種…

        NetBIOS 設置

        在 Windows 系統中,WINS (Windows Internet Name Service) 和 NetBIOS 緊密相關,主要用于 NetBIOS 名稱解析(將計算機名轉換為 IP 地址)。WINS 是一個動態數據庫,類似于 DNS,但專門用于 NetBIOS 名稱解析,適用于早期 Windows 網絡(如 Windows NT/2000/XP)。 1. 查看 N…

        vue2 + SimpleMindMap 制作思維導圖

        vue2 SimpleMindMap 制作思維導圖 該代碼包含SimpleMindMap已知的所有功能&#xff0c;有需要的小伙伴可自行copy&#xff0c;框架使用el-ementui。其中有些圖標是阿里巴巴矢量圖的圖片&#xff0c;可自行進行替換。保姆級教程 以下是vue文件&#xff1a; <template><…

        Discord x Pulsar: 使用 Pulsar、Flink 和 Iceberg 搭建流式機器學習平臺

        本文整理自 Discord 機器學習工程師 David Christle 在 Pulsar Summit NA 上的演講內容&#xff0c;一起來看 Discord 是如何基于 Pulsar 實現兼顧安全和個性化功能的實時流式機器學習平臺的&#xff5e;1. 背景Discord 是一個實時?視頻通信平臺&#xff0c;?持?本/語?/視頻…

        【數據結構入門】二叉樹(2)

        目錄 1.二叉樹遍歷順序 1.1 前序&#xff08;先根&#xff09;遍歷 1.2 中序&#xff08;中根&#xff09;遍歷 1.3 后序&#xff08;后根&#xff09;遍歷 1.4 層序遍歷 1.5 深度優先遍歷&廣度優先遍歷 2.二叉樹的遍歷 2.1 前根遍歷&#xff08;遞歸&#xff09; …

        【電機參數】電壓、電流、轉速標幺化推算過程

        【電機參數】電壓、電流、轉速標幺化推算過程 文章目錄[TOC](文章目錄)前言一、標幺化目的——優化計算二、Q15與標幺化的關系三、標幺值計算1.電壓標幺值2.電流標幺值3.轉速標幺值四、參考資料總結前言 一、標幺化目的——優化計算 不同物理量的量綱和數值范圍差異巨大&#…

        v-scale-scree: 根據屏幕尺寸縮放內容

        &#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

        linux設備驅動之字符設備驅動

        一、cdev結構體?成員/功能??說明??相關操作函數/宏??kobj?內嵌的kobject對象&#xff0c;用于Linux設備模型管理&#xff0c;實現引用計數和sysfs接口kobject_init()?owner?指向擁有該結構體的模塊指針&#xff08;通常為THIS_MODULE&#xff09;&#xff0c;防止模塊…

        ★CentOS:MySQL數據備份

        一、cp 命令備份特點&#xff1a;優點&#xff1a;備份恢復數據快&#xff1a;直接復制文件&#xff0c;無需進行數據轉換和復雜的處理&#xff0c;因此備份恢復速度非常快缺點&#xff1a;需要停止數據庫服務&#xff0c;靈活性差&#xff0c;占用空間大&#xff0c;可移植性差…

        Python代碼規范與靜態檢查(ruff/black/mypy + pyproject.toml + Makefile)自動化工具鏈介紹

        文章目錄**1. 核心工具的作用****(1) black&#xff1a;代碼格式化工具****(2) ruff&#xff1a;代碼質量檢查工具****(3) mypy&#xff1a;靜態類型檢查工具****2. pyproject.toml&#xff1a;統一配置中心****示例配置**&#xff08;pyproject.toml&#xff09;&#xff1a;*…

        軟件需求管理過程詳解

        需求管理過程需求管理是軟件工程和系統開發中的核心過程&#xff0c;它確保項目始終圍繞正確、穩定且可追溯的需求進行。在復雜系統開發中&#xff0c;需求往往動態變化&#xff0c;需求管理通過系統化的方法控制變更、維護版本、建立追溯關系&#xff0c;從而降低項目風險、保…

        MySQL性能優化實戰指南:從入門到精通的完整優化體系

        MySQL性能優化實戰指南&#xff1a;從入門到精通的完整優化體系&#x1f680; 前言&#xff1a;在當今數據驅動的時代&#xff0c;MySQL作為世界上最流行的開源關系型數據庫&#xff0c;其性能優化能力直接決定了應用系統的響應速度和用戶體驗。本文將從多個維度深入探討MySQL優…

        KingbaseES主備讀寫分離集群安裝教程

        首先我們先要找數據庫集群安裝軟件和腳本。這里我事先安裝一臺單機。 [rootlocalhost zip]# mkdir -p /home/kingbase/software [rootlocalhost zip]# scp -r * /home/kingbase/software/ #安裝軟件和腳本在單機版本的/opt/Kingbase/ES/V9/ClientTools/guitools/DeployTools/z…

        electron程序適配loongArch64

        一、原始項目 1.原始程序適配arm&#xff0c;x86國產linux設備;新增需求適配loongArch64麒麟v10sp1。 2.原始devDependencies "devDependencies": {"electron": "^17.2.0","electron-builder": "^23.0.3",}二、可能遇到的問…

        窗口系統(windowing system)的架構思考

        我想做一個通用窗口系統&#xff0c;窗口、控件等&#xff0c;一切都抽象成樹形結構的層疊矩形塊&#xff0c;可支持半透明、模糊等混合選項&#xff0c;那么每個窗口是不是需要一塊存儲區&#xff1f;我之前的代碼為了計算模糊&#xff0c;還不止一塊&#xff0c;要三塊。那么…