shell腳本編程規范與變量

文章目錄

  • Shell編程文檔整理
    • 一、Shell介紹
      • 1.1 簡介
      • 1.2 Shell解釋器
    • 二、快速入門
      • 2.1 編寫Shell腳本
        • 2.1.1 創建腳本示例
        • 2.1.2 賦予執行權限
      • 2.2 執行Shell腳本
    • 三、Shell程序:變量
      • 3.1 語法格式
      • 3.2 變量使用
      • 3.3 變量類型
    • 四、字符串
      • 4.1 單引號
      • 4.2 雙引號
      • 4.3 獲取字符串長度
      • 4.4 提取子字符串
      • 4.5 查找子字符串
    • 五、Shell程序:參數傳遞
      • 5.1 參數傳遞方式
      • 5.2 特殊字符
      • 5.3 `$*` 和 `$@` 的區別
    • 六、Shell程序:運算符
      • 6.1 算術運算符
        • 6.1.1 **通過`( ( ) )`,`$[ ]`進行算術運算**
      • 6.2 關系運算符
      • 6.3 邏輯運算符
      • 6.4 字符串運算符
      • 6.5 文件測試運算符


Shell編程文檔整理

一、Shell介紹

1.1 簡介

Shell 是一個用 C語言編寫的程序,通過 Shell 用戶可以訪問操作系統內核服務。

Shell類似于 DOS 下的 command 和后來的 cmd.exe。

Shell既是一種命令語言,又是一種程序設計語言。

Shell script 是一種為 shell 編寫的腳本程序。

Shell 編程一般指 shell 腳本編程,不是指開發 shell 自身。

1.2 Shell解釋器

Shell 編程跟傳統的編程語言一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。

Linux 的 Shell 解釋器種類眾多,一個系統可以存在多個 shell,可以通過 cat /etc/shells 命令查看系統中安裝的 shell。

bash 由于易用和免費,在日常工作中被廣泛使用。同時,bash 也是大多數 Linux 系統默認的 Shell。
在這里插入圖片描述


二、快速入門

2.1 編寫Shell腳本

使用vi編輯器新建一個文件hello.sh(擴展名并不影響腳本執行)

#!/bin/bash
echo "Hello World !"
  • #! 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一種Shell
  • echo 命令用于向窗口輸出文本
2.1.1 創建腳本示例
mkdir shelldemo
cd shelldemo
vi hello.sh

在這里插入圖片描述

內容:

#!/bin/bash
echo "Hello World!"

在這里插入圖片描述

2.1.2 賦予執行權限
chmod +x ./hello.sh

在這里插入圖片描述

2.2 執行Shell腳本

執行方式:

  1. ./hello.sh:在當前目錄執行
  2. /xx/xxx.sh:書寫全路徑執行
  3. sh /xx/xxx.sh:作為解釋器參數執行(無需執行權限)
  4. source xxx.dh:可以沒有執行權限
    在這里插入圖片描述

三、Shell程序:變量

3.1 語法格式

變量名=

命名規則:

  • 等號兩邊不能有空格
  • 首個字符必須為字母(a-z,A-Z)
  • 中間不能有空格,可以使用下劃線(_)
  • 不能使用標點符號
  • 不能使用 bash 里的關鍵字

3.2 變量使用

your_name="bigdata.com"
echo $your_name
echo ${your_name}
  • 花括號可選,用于幫助解釋器識別變量邊界
  • 變量可重新定義
  • readonly 定義只讀變量
  • unset 刪除變量(不能刪除只讀變量)

在這里插入圖片描述

3.3 變量類型

  • 局部變量:僅在當前 shell 實例中有效
    在這里插入圖片描述

  • 全局變量(環境變量):所有程序都可訪問
    在這里插入圖片描述


四、字符串

字符串是shell編程中最常用最有用的數據類型,字符串可以單引號,也可以用雙引號,也可以不用引號

4.1 單引號

實例:

skill='linux'
str='I am goot at $skill'  # 變量無效
echo $str #輸出

輸出結果: I am goot at $skill
在這里插入圖片描述
單引號字符串限制:
· 單引號里任何數字字符都會原樣輸出,單引號字符串中的變量是無效的;

· 單引號字串中不能出現單獨一個單引號,但可以成對出現,作為字符串拼接使用。

4.2 雙引號

示例:

skill='linux'
str="I am goot at $skill"  # 變量有效

在這里插入圖片描述
輸出結果: i am goot at linux

4.3 獲取字符串長度

skill='hadoop'
echo ${#skill}  # 輸出6

在這里插入圖片描述

4.4 提取子字符串

str="I am goot at hadoop"
echo ${str:2}    # 輸出:am goot at hadoop
echo ${str:2:2}  # 輸出:am

在這里插入圖片描述

4.5 查找子字符串

str="I am goot at hadoop"
echo `expr index "$str" am`  # 輸出3

在這里插入圖片描述


五、Shell程序:參數傳遞

5.1 參數傳遞方式

./shell程序 參數1 參數2 ...

腳本內獲取參數:

  • $0:腳本名稱
  • $1$2…:第1、2個參數
    在這里插入圖片描述
    執行結果
    在這里插入圖片描述

5.2 特殊字符

符號含義
$#傳遞到腳本的參數個數
$*以一個單字符串顯示所有向腳本傳遞的參數
$$顯示腳本運行的當前進程ID號
$!最后一個后臺進程ID
$@所有參數作為列表
$?上一條命令退出狀態,顯示0則表示沒有錯誤

在這里插入圖片描述
在這里插入圖片描述
$?:判斷上一條命令是否正確,若輸出為“0”則表示執行成功,非“0”則執行失敗
在這里插入圖片描述

5.3 $*$@ 的區別

  • 不加引號時相同
  • 加引號時:
    • "$*":所有參數作為一個字符串
    • "$@":每個參數作為獨立字符串

在這里插入圖片描述
在這里插入圖片描述


六、Shell程序:運算符

6.1 算術運算符

Shell和其他編程語言一樣,支持包括:算術、關系、邏輯、字符串等運算
符。
原生 /bin/bash 不支持簡單的數學運算,但是可以通過其他命令來實現,
例如: expr
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
使用 expr$(())$[]

val=`expr 2 + 2`  #此處需要用反引號,且”2 + 2“之間需要空格
val=$((1+1))
val=$[1+2]

在這里插入圖片描述
附加內容:read命令

·read -p 提示用戶顯示
·read -n 第一字符數

在這里插入圖片描述
在這里插入圖片描述

6.1.1 通過( ( ) )$[ ]進行算術運算

案例1、通過(())進行算術運算
在這里插入圖片描述

在這里插入圖片描述
案例2 通過“$[ ]"進行運算
在這里插入圖片描述

6.2 關系運算符

運算符含義
-eq等于
-ne不等于
-lt小于
-gt大于
-le小于等于
-ge大于等于

6.3 邏輯運算符

  • -a:雙方都成立(and)表達式1 -a表達式2
  • -o:單方成立(or)表達式1 -0 表達式2
  • &&||:用于 echo 或條件判斷
    在這里插入圖片描述

6.4 字符串運算符

運算符含義
-n非空字符串
-z空字符串
=判斷兩個字符串是否一樣
!=判斷兩個字符串是否不相等

6.5 文件測試運算符

運算符含義
-f存在且是普通文件
-d存在且是目錄
-s非空文件
-e文件存在
-r可讀
-w可寫
-x可執行

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

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

相關文章

【AGI使用教程】Coze 搭建智能體(1)

歡迎關注【AGI使用教程】 專欄 【AGI使用教程】GPT-OSS 本地部署(1) 【AGI使用教程】GPT-OSS 本地部署(2) 【AGI使用教程】Coze 搭建智能體(1) 【AGI使用教程】Coze 搭建智能體(2) 【…

(二分查找)Leetcode34. 在排序數組中查找元素的第一個和最后一個位置+74. 搜索二維矩陣

首先要明確二分查找算法如何實現,是采用左閉右閉還是左閉右開 左閉右閉 第?種寫法,我們定義 target 是在?個在左閉右閉的區間?,也就是[left, right] (這個很重要?常重要)。 區間的定義這就決定了?分法的代碼應…

損失函數,及其優化方法

什么是損失函數?損失函數,也稱為代價函數,是一個用來??衡量機器學習模型預測結果與真實值之間差距??的函數。損失函數的優化方法有哪些,各自優缺點是什么,他們的應用范圍是什么?方法類別代表算法核心思…

pyqt+Python證件號智能校驗工具

目錄 一、引言 二、GUI界面設計 1.相關提示 2.效果演示 3.界面設計.py 三、主要程序詳解 1.導入相關模塊 2.初始化設置 3.校驗過程 四、總程序代碼 一、引言 在數字化轉型加速的背景下,證件信息核驗已成為金融、政務、安防等領域的剛需。傳統人工校驗存在…

主流技術棧 NestJS、TypeScript、Node.js版本使用統計

📊 2024年主流技術棧版本使用統計🔧 TypeScript 采用情況全球采用率: 38.5% 的開發者使用 TypeScript(Stack Overflow 2024)增長趨勢: 從 2017年的 12% 增長到 2024年的 35%(JetBrains 調研)TypeScript vs …

Techub News 與 TOKENPOST 達成戰略合作以推動中韓 Web3 資訊互通

Techub News 消息,香港 Web3 媒體 Techub News 與韓國區塊鏈媒體 TOKENPOST 達成戰略合作。TOKENPOST 將開設香港內容板塊,由 Techub News 提供本地化行業資訊;同時 Techub News 將推出韓國內容專欄,內容源由 TOKENPOST 支持。這一…

Java面試實戰系列【JVM篇】- JVM內存結構與運行時數據區詳解(私有區域)

文章目錄一、前言1.1 什么是JVM內存結構1.2 JVM內存結構與Java內存模型的區別1.3 為什么面試官愛問JVM內存結構二、JVM運行時數據區總覽2.1 運行時數據區域劃分2.2 線程私有區域 vs 線程共享區域三、線程私有區域詳解3.1 程序計數器(PC Register)3.1.1 定…

鴻蒙中使用極光推送

官方給出的步驟是對的,就是一時不知道從何下手,自己整了下,按照這個來就行 1.步驟 打開 APP 通知功能 1.先按照這個頁面進行配置SDK 集成指南 - 極光文檔,主要就是下載極光sdk,然后在AGC里開通推送服務,配…

ruoyi_wvp流媒體[海康 大華 GB1812 onvif rtsp]

ZLMediaKitxiaz: https://download.csdn.net/download/jinhuding/91775096 webrtc: https://download.csdn.net/download/jinhuding/91764243 yoloonnx(v3,v7,v8s,v9c):https://download.csdn.net/download/jinhuding/91775170 項目部署步驟 1.后端目錄結構 2.前端…

強化學習筆記(二):有限馬爾可夫決策過程(一)

有限馬爾可夫決策過程 基本概念 多臂老虎機僅涉及評價性反饋,即動作的即時獎勵,估計每個動作 aaa 的價值 q?(a)q_*(a)q??(a)。 有限馬爾可夫決策過程(Finite MDP)引入了關聯性因素,即在不同狀態(情境&am…

Maven項目中settings.xml終極優化指南

文章目錄1. 基礎優化2. 鏡像源優化(國內推薦)3. 插件倉庫優化4. 并行構建提升 30%-80%5. 下載可靠性優化6. CI/CD 環境優化7. 進階:依賴鎖定與預下載8. 實現效果Maven settings.xml 終極優化指南,重點是:構建速度提升、…

RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd 函數在STM32的標準外設庫中扮演著“電源開關”的角色。要理解這個函數,我們需要明白STM32微控制器的幾個關鍵概念:1. 外設時鐘與低功耗設計STM32內部有非常多的外設,如GPIO(A, B, C...D)、USAR…

用大語言模型實現語音到語音翻譯的新方法:Scheduled Interleaved Speech-Text Training

用大語言模型實現語音到語音翻譯的新方法:Scheduled Interleaved Speech-Text Training 在人工智能領域,語音到語音翻譯(Speech-to-Speech Translation, S2ST)一直是極具挑戰性的任務。傳統的做法是將語音識別、文本翻譯和語音合成三個步驟串聯起來,而近年來,端到端的S2…

LLM學習:langchain架構——模型IO

1、什么是模型IO模型 I/O(Model I/O) 是 LangChain 框架中最核心的模塊之一,負責處理與語言模型(LLM)交互的輸入構建、模型調用和輸出解析全流程。它主要分為三個模塊:Prompts(輸入構建&#xf…

Windows系統下python新一代三方庫管理工具uv及VSCode配置

python新一代三方庫管理工具uv uv是什么? uv是用RUST語言寫的一個python三方庫和項目管理工具,詳見官網(uv)。 uv的安裝 官網上提供了兩種安裝方式,第一種需要在PS終端里運行一下命令進行安裝: powersh…

Node.js 多版本管理工具 nvm 的安裝與使用教程(含鏡像加速與常見坑)

適用人群:前端/后端/全棧開發者,Mac/Linux/Windows(nvm-windows)用戶;需要在多項目間快速切換 Node 版本、或在國內網絡環境下穩定安裝 Node。一、為什么要用 nvm?一機多版本:不同項目依賴不同 …

Unity Shader unity文檔學習筆記(二十一):幾種草體的實現方式(透明度剔除,GPU Instaning, 曲面細分+幾何著色器實現)

1.透明度剔除(性能較差,不同顏色時需要不同材質會導致多個dc) clip(_Color.a - _Cutoff); 傳入值為0時 剔除 類似的草體效果: 2.GPU Instaning(可以自定義一次性合批最多1023個,能夠傳遞顏色值等等(做草…

UX 設計入門終章:讓洞察落地!用用戶流程圖、IA 和旅程圖,設計用戶與產品的互動故事

歡迎來到本系列課程的最后一課。 如果你把之前的學習比作是繪制一份建筑藍圖,那么今天,你將根據自己收集到的所有用戶數據,描繪出空間布局(用戶流程圖)、理清結構關系(信息架構),并最…

【RAG知識庫實踐】向量數據庫VectorDB

一、概述 1.1 什么是向量庫 向量數據庫是一種專門為存儲、索引和查詢高維向量數據而優化的數據庫系統。與傳統的關系型數據庫不同,向量數據庫將數據映射到向量空間中,使得數據的相似性計算、聚類、分類和檢索變得更加高效和精確 向量數據庫一般包括以下幾個部分:索引、查詢…

EasyExcel 3.x 導出動態表頭,動態sheet頁

動態導出sheet頁Overridepublic void exportAnswerListV1(HttpServletResponse response, SmtSurveyUserAnswerRecord smtSurveyUserAnswerRecord) {// 1. 準備問卷數據String formType smtSurveyUserAnswerRecord.getFormType();if (ObjectUtil.isEmpty(formType)) {throw ne…