[Linux][Shell][Shell變量]詳細講解

目錄

  • 1.本地變量
  • 2.變量定義
  • 3.取出變量值
  • 4.特殊變量
  • 5.特殊狀態變量
  • 6.shell內置的變量命令
    • 1.echo
    • 2.eval
    • 3.exec
  • 7.截取字符串
  • 8.特殊shell擴展變量處理
    • 1.語法
    • 2.應用場景


1.本地變量

  • 定義Shell變量,變量名不需要加$
  • 本地變量只在?戶當前shell?存期中有效

2.變量定義

  • 變量名要求:字?、數字、下劃線組成、可以是字?或是下劃線開頭
  • 變量名嚴格區分??寫

3.取出變量值

  • 單引號:所?即所得,強引?
  • 雙引號:輸出引號?所有內容,識別特殊符號,弱引?
  • ?引號:連續的符號可以不加引號,有空格則有歧義,最好使?雙引號
  • 反引號:引?命令執?結果,等于$()?法

4.特殊變量

  • shell的特殊變量,?在如腳本,函數傳遞參數使?

  • 有如下特殊的,位置參數變量

    變量作用
    $0獲取shell腳本文件名,以及腳本路徑
    $n獲取shell腳本的第n個參數,n在1~9之間,大于9則需要些{},如{$10}
    $#獲取執行的shell腳本后面的參數總個數
    $*獲取shell腳本所有參數,不加引號等同于$@作用,加上引號"$*"作用是接收所有參數為單個字符串
    $@不加引號,效果同上,加引號,是接收所有參數為獨立字符串

5.特殊狀態變量

  • 查找方式man bash,搜索Special Parameters

    變量作用
    $?上次命令執行狀態返回值,0正確,非0失敗
    $$當前shell腳本的進程號
    $!上一次后臺進程的PID
    $_獲取上次命令的最后一個參數

6.shell內置的變量命令

1.echo

  • 參數
    • -n:不換行輸出內容
    • -e:解釋轉義字符
      • \n:換行
      • \r:回車
      • \t:tab
      • \b:退格
      • \v:縱向制表符

2.eval

  • 功能:執行多個命令
  • 示例eval ls; cd ~

3.exec

  • 功能:不創建子進程,執行后續命令,exec執行后,自動exit

7.截取字符串

  • 語法

    語法作用
    #從開頭刪除匹配最短
    ##從開頭刪除匹配最長
    %從結尾刪除匹配最短
    %%從結尾刪除匹配最長
    #指定字符內容截取
    a*c匹配開頭為a,中間任意個字符,結尾為c的字符串
    ${變量}返回變量值
    ${#變量}返回變量長度,字符長度
    ${變量:start}返回變量offset數值之后的字符
    ${變量:start:length}提取offset之后的length限制的字符
    ${變量#word}從變量開頭,刪除最短匹配的word子串
    ${變量##word}從變量開頭,刪除最長匹配的word
    ${變量%word}從變量結尾,刪除最短匹配的word子串
    ${變量%%word}從變量結尾,刪除最長匹配的word子串
    ${變量/pattern/string}用string代替第一個匹配的pattern
    ${變量//pattern/string}用string代替所有的pattern
  • 操作實例:刪除文件名

    # 通過?串的替換?式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg# 變量的?串功能,去掉后綴
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg# 利?變量的反引?替換?件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`# 剩下的?件,利?循環操作
    # 找出剩下所有需要替換的jpg?件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg# 寫shell循環代碼,循環操作
    # 去掉所有jpg?件的_finished后綴
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;donesnowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    

8.特殊shell擴展變量處理

1.語法

  • 功能:這四個擴展變量,都屬于對變量的值進行判斷、處理
  • 語法parameter,參數,范圍
    • ${parameter:-word}:如果parameter變量值為空,返回word字符串
    • ${parameter:=word}:如果parameter變量值為空,則word替代變量值,且返回其值
    • ${parameter:?word}:如果parameter變量值為空,word當作stderr輸出,否則輸出變量值
      • ?于設置變量為空導致錯誤時,返回的錯誤信息
    • ${parameter:+word}:如果parameter變量值為空,什么都不做,否則word返回

2.應用場景

  • 數據備份,刪除過期數據的腳本
    # 原腳本命令,有bug,有歧義
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f# 修正后的腳本命令
    # 如果有bug起義,就在當前目錄搜索并執行刪除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    

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

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

相關文章

SpringBoot防止重復提交 AOP+自定義注解+redis

1.什么是重復提交呢 在Web開發中,重復提交(也稱為雙重提交或重復表單提交)是指用戶在沒有明確意圖的情況下,多次提交同一表單的情況。這可能是由于用戶多次點擊提交按鈕、表單提交過程中的網絡延遲導致用戶重復點擊、或者由于瀏覽…

雙向全橋隔離dc-dc變換器(DAB)

DAB(dual active bridge) 雙向全橋隔離dc-dc變換器(DAB)和Buck/Boost不同,該變換器通過交流電感進行功率傳輸,其調制和控制不適合直接借鑒已有的研究。 調制挑戰:開關網絡相對復雜,調制自由度較多&#x…

揭秘SQL Server數據庫選項:性能與行為的調控者

揭秘SQL Server數據庫選項:性能與行為的調控者 在SQL Server的世界中,數據庫選項是那些可以調整以優化數據庫性能和行為的設置。它們是數據庫管理員和開發者的得力助手,通過精細調控,可以顯著提升數據庫的響應速度和資源利用率。…

MySQL MVCC

總結自小林coding,bojiangzhou 臟讀、不可重復讀、幻讀 說的都是并發讀取的問題,最簡單的方式就是給記錄加一把鎖,不管是更新、讀取記錄都需要競爭到這把鎖之后才能操作。但這種方式的并發性能可想而知會有多么低。 于是 InnoDB 就設計了MVC…

C#——二進制流序列化和反序列化

C#二進制流序列化和反序列化 在C#中,可以使用BinaryFormatter來進行二進制的序列化和反序列化。 首先,定義一個可序列化的類 [Serializable] public class MyObject {public int IntProperty { get; set; }public string StringProperty { get; set; …

ubuntu 上配置開機自動啟動ssh

一般安裝了就會自動啟動。但是各種rc.local, cron都測試了一下,還是這個systemd有效 使用 systemd 服務 創建文件 sudo nano /etc/systemd/system/custom-ssh.service [Unit] DescriptionStart SSH service at boot Afternetwork.target[Service] ExecStart/usr/…

軟件開發(續).NET框架

1.解釋一下.NET框架中的CLR(公共語言運行時)是什么,以及它的作用和功能是什么? CLR(Common Language Runtime)的概念和作用 在.NET框架中,CLR(Common Language Runtime&#xff09…

代碼優化(2)——小程序登錄

驗證身份的時候,依賴的是cookie里面的token $this->request->server(HTTP_TOKEN,$this->request->request(token, \think\Cookie::get(token))) 小程序的交互權限驗證,一般放到header里面進行鑒權,極少是通過cookie來傳遞參數驗證…

一起來了解深度學習中的“梯度”

文章目錄 前言一、什么是梯度?二、梯度計算三、優化算法四、示例五、梯度的作用六、形象化解釋七、如果完全不懂公式可以實現這個算法嗎?1. 使用 Hugging Face Transformers 實現深度學習任務1) 安裝庫2) 加載預訓練模型和分詞器3) 準備數據4) 進行推理5…

LeetCode HOT100(二)雙指針

移動0 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行操作。 輸入: nums [0,1,0,3,12] 輸出: [1,3,12,0,0] 解法1:雙指針交換 指針L&…

“論基于構件的軟件開發方法及其應用”寫作框架,軟考高級論文,系統架構設計師論文

論文真題 基于構作的軟件開發 (Component-Based Software Development,CBSD) 是一種基于分布對象技術、強調通過可復用構件設計與構造軟件系統的軟件復用途徑。基于構件的軟件系統中的構件可以是COTS (Commercial-Off-the-Shelf)構件&#x…

Spring Boot輕松整合Minio實現文件上傳下載功能

一、Linux 安裝Minio 安裝 在/root/xxkfz/soft目錄下面創建文件minio文件夾,進入minio文件夾,并創建data目錄; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data 執行如下命令進行下載 [rootxx…

Java內存劃分詳解:從基礎到進階

Java內存劃分詳解:從基礎到進階 1. 程序計數器(Program Counter Register)2. Java虛擬機棧(Java Virtual Machine Stack)3. 堆(Heap)4. 方法區(Method Area)5. 運行時常量…

DDD架構面試問題

基礎概念 什么是領域驅動設計(DDD)? 請解釋一下DDD的核心思想和目標。 DDD中的領域(Domain)是什么? 請描述一下領域的概念以及它在軟件開發中的重要性。 什么是限界上下文(Bounded Context&am…

ArduPilot開源代碼之OpticalFlow_backend

ArduPilot開源代碼之OpticalFlow_backend 1. 源由2. Library設計3. 重要例程3.1 OpticalFlow_backend::_update_frontend3.2 OpticalFlow_backend::_applyYaw 4. 總結5. 參考資料 1. 源由 光流計是一種低成本定位傳感器,所有的光流計設備傳感驅動代碼抽象公共部分統…

[計網初識1] TCP/UDP

學習內容 1.TCP建立鏈接的3次握手,斷開連接的4次揮手 2.TCP報文段組成 內容 1.TCP 建立連接的3次握手? 假設主動方是客戶端,被動方是服務端。 第一次 客戶端給服務端發送 “hello,我是客戶端” (TCP段中 SYN1) 第二次 服務端給客戶端發送"我接…

從零開始的python學習生活2

接上封裝 class Phone:__volt0.5def __keepsinglecore(self):print("讓cpu以單核運行")def if5G(self):if self.__volt>1:print("5G通話已開啟")else:self.__keepsinglecore()print("電量不足,無法使用5G通話,已經設置為單…

Django項目創建的準備工作【 2 】

【 一 】調整后端目錄 #1 目錄結構 """ ├── luffy_api├── logs/ # 項目運行時/開發時日志目錄 - 包├── manage.py # 腳本文件├── luffy_api/ # 項目主應用,開發時的代碼保存 - 包├── apps/ …

【Git基本操作】添加文件 | 修改文件 | 及其各場景下.git目錄樹的變化

目錄 1. 添加文件&add操作和commit操作 2. .git樹狀目錄的變化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作:將工作區中所有文件的修改內容 添加進版本庫的暫存區中。commit操作:…

云端編碼:將您的技術API文檔安全存儲在iCloud的最佳實踐

云端編碼:將您的技術API文檔安全存儲在iCloud的最佳實踐 作為一名技術專業人士,管理不斷增長的API文檔庫是一項挑戰。iCloud提供了一個無縫的解決方案,允許您在所有設備上存儲、同步和訪問您的個人技術API文檔。本文將指導您如何在iCloud中高…