Shell學習——Shell變量

文章目錄

  • Shell變量
    • 使用變量
    • 只讀變量
    • 刪除變量
    • 變量類型
      • 字符串變量: 在 Shell中,變量通常被視為字符串。
      • 整數變量: 在一些Shell中,你可以使用 declare 或 typeset 命令來聲明整數變量。
      • 數組變量: Shell 也支持數組,允許你在一個變量中存儲多個值。
      • 環境變量: 這些是由操作系統或用戶設置的特殊變量,用于配置 Shell 的行為和影響其執行環境。
      • 特殊變量: 有一些特殊變量在 Shell 中具有特殊含義,例如 $0 表示腳本的名稱,$1, $2, 等表示腳本的參數。
    • 字符串
      • 單引號
      • 雙引號
      • 拼接字符串
      • 獲取字符串長度
      • 提取子字符串
    • 查找子字符串
    • 數組
      • 定義數組
      • 讀取數組
    • 傳遞參數

Shell變量

  • 注意,變量名和等號之間不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規則:
    • 只包含字母、數字和下劃線: 變量名可以包含字母(大小寫敏感)、數字和下劃線 _,不能包含其他特殊字符。
    • 不能以數字開頭: 變量名不能以數字開頭,但可以包含數字。
    • 避免使用 Shell 關鍵字: 不要使用Shell的關鍵字(例如 if、then、else、fi、for、while 等)作為變量名,以免引起混淆。
    • 使用大寫字母表示常量: 習慣上,常量的變量名通常使用大寫字母,例如 PI=3.14。
    • 避免使用特殊符號: 盡量避免在變量名中使用特殊符號,因為它們可能與 Shell 的語法產生沖突。
    • 避免使用空格: 變量名中不應該包含空格,因為空格通常用于分隔命令和參數。

使用變量

使用一個定義過的變量,只要在變量名前面加美元符號即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界,比如下面這種情況:

for skill in Ada Coffe Action Java; doecho "I am good at ${skill}Script"
done

如果不給skill變量加花括號,寫成echo “I am good at $skillScript”,解釋器就會把$skillScript當成一個變量(其值為空),代碼執行結果就不是我們期望的樣子了。

推薦給所有變量加上花括號,這是個好的編程習慣。

只讀變量

使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。

下面的例子嘗試更改只讀變量,結果報錯:

#!/bin/bashmyUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"

刪除變量

使用 unset 命令可以刪除變量。語法:

unset variable_name

變量被刪除后不能再次使用。unset 命令不能刪除只讀變量。

#!/bin/shmyUrl="https://www.runoob.com"
unset myUrl
echo $myUrl

變量類型

Shell 支持不同類型的變量,其中一些主要的類型包括:

字符串變量: 在 Shell中,變量通常被視為字符串。

你可以使用單引號 ’ 或雙引號 " 來定義字符串,例如:

my_string='Hello, World!'

或者

my_string="Hello, World!"

整數變量: 在一些Shell中,你可以使用 declare 或 typeset 命令來聲明整數變量。

這樣的變量只包含整數值,例如:

declare -i my_integer=42

這樣的聲明告訴 Shell 將 my_integer 視為整數,如果嘗試將非整數值賦給它,Shell會嘗試將其轉換為整數。

數組變量: Shell 也支持數組,允許你在一個變量中存儲多個值。

數組可以是整數索引數組或關聯數組,以下是一個簡單的整數索引數組的例子:

my_array=(1 2 3 4 5)

或者關聯數組:

declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30

環境變量: 這些是由操作系統或用戶設置的特殊變量,用于配置 Shell 的行為和影響其執行環境。

例如,PATH 變量包含了操作系統搜索可執行文件的路徑:

echo $PATH

特殊變量: 有一些特殊變量在 Shell 中具有特殊含義,例如 $0 表示腳本的名稱,$1, $2, 等表示腳本的參數。

$#表示傳遞給腳本的參數數量,$? 表示上一個命令的退出狀態等。

字符串

單引號

str='this is a string'
  • 單引號字符串的限制:
    • 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
    • 單引號字符串中不能出現單獨一個的單引號(對單引號使用轉義符后也不行),但可成對出現,作為字符串拼接使用。

雙引號

your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
輸出結果為:Hello, I know you are "runoob"! 
  • 雙引號的優點:
    • 雙引號里可以有變量
    • 雙引號里可以出現轉義字符

拼接字符串

your_name="runoob"
# 使用雙引號拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3
輸出結果為:hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

獲取字符串長度

string="abcd"
echo ${#string}   # 輸出 4

變量為字符串時,${#string} 等價于 ${#string[0]}:

string="abcd"
echo ${#string[0]}   # 輸出 4

提取子字符串

以下實例從字符串第 2 個字符開始截取 4 個字符:

string="runoob is a great site"
echo ${string:1:4} # 輸出 unoo

查找子字符串

查找字符 i 或 o 的位置(哪個字母先出現就計算哪個):

string="runoob is a great site"
echo `expr index "$string" io`  # 輸出 4

數組

定義數組

在 Shell 中,用括號來表示數組,數組元素用"空格"符號分割開。定義數組的一般形式為:

數組名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

還可以單獨定義數組的各個分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

讀取數組

讀取數組元素值的一般格式是:

${數組名[下標]}

例如:

valuen=${array_name[n]}

使用 @ 符號可以獲取數組中的所有元素,例如:

echo ${array_name[@]}

獲取數組的長度
獲取數組長度的方法與獲取字符串長度的方法相同,例如:

# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
length=${#array_name[n]}

傳遞參數

我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式為 $n,n 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數。

例如可以使用 $1、$2 等來引用傳遞給腳本的參數,其中 $1 表示第一個參數,$2 表示第二個參數,依此類推。

實例
以下實例我們向腳本傳遞三個參數,并分別輸出,其中 $0 為執行的文件名(包含文件路徑):

#!/bin/bashecho "Shell 傳遞參數實例!";
echo "執行的文件名:$0";
echo "第一個參數為:$1";
echo "第二個參數為:$2";
echo "第三個參數為:$3";

為腳本設置可執行權限,并執行腳本,輸出結果如下所示:

$ chmod +x test.sh 
$ ./test.sh 1 2 3Shell 傳遞參數實例!
執行的文件名:./test.sh
第一個參數為:1
第二個參數為:2
第三個參數為:3

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

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

相關文章

平價貓糧新選擇!福派斯鮮肉貓糧,讓貓咪享受美味大餐!

福派斯鮮肉貓糧,作為一款備受鏟屎官們青睞的貓糧品牌,憑借其卓越的品質和高性價比,為眾多貓主帶來了健康與美味的雙重享受。接下來,我們將從多個維度對這款貓糧進行解析,讓各位鏟屎官更加全面地了解它的魅力所在。 1?…

【三】ubuntu24虛擬機集群配置免密登陸

文章目錄 環境背景1. 配置域名映射2. 配置免密登錄2.1 在每臺機器上生成SSH密鑰對:2.2 將公鑰分發到其他機器:2.2.1 報錯問題2.2.2 修復方法 3. 驗證免密登錄在 ubuntu1 上:在 ubuntu2 上:在 ubuntu3 上: 測試連接 環境…

三級_02_網絡系統結構與設計的基本原則

1.下列關于接入技術特征的描述中,錯誤的是()。 無線統一網絡中AC如果發現某個AP出現故障,將自動調高周圍AP的發射功率以覆蓋出現的空洞 ADSL技術具有非對稱帶寬特性 APON是一種無線接入技術 Cable Modem利用頻分復用的方法將信道分為上行信道和下行信…

Linux系統的服務——以Centos7為例

一、Linux系統的服務簡介 服務是向外部提供對應功能的進程,其運行在系統后臺,能夠7*24小時持續不斷的提供外界隨時發來的服務請求,且服務進程常駐在內存中,具有固定的端口號,通過端口號就能找到服務內容。 提供服務的一…

【PB案例學習筆記】-27制作一個控制任務欄顯示與隱藏的小程序

寫在前面 這是PB案例學習筆記系列文章的第27篇,該系列文章適合具有一定PB基礎的讀者。 通過一個個由淺入深的編程實戰案例學習,提高編程技巧,以保證小伙伴們能應付公司的各種開發需求。 文章中設計到的源碼,小凡都上傳到了gite…

柯西施瓦茨不等式證明過程

柯西-施瓦茨不等式(Cauchy-Schwarz Inequality)是數學分析中的一個重要不等式,它在向量空間、內積空間等多個領域都有廣泛應用。對于實數或復數域上的內積空間,柯西-施瓦茨不等式可以表述為: 對于任意向量 u \mathbf…

Android Gradle 開發與應用 (七): Gradle 插件開發與發布

目錄 一、概述 二、Gradle插件的基礎知識 2.1 Gradle插件的定義 2.2 Gradle插件的種類 2.3 Gradle插件的生命周期 三、開發一個Gradle插件 3.1 創建Gradle插件項目 3.2 編寫插件實現 3.3 配置插件元數據 3.4 構建和測試插件 3.5 在項目中應用插件 四、發布Gradle插…

計算機未來大方向的選擇

選專業要了解自己的興趣所在。 即想要學習什么樣的專業,如果有明確的專業意向,就可以有針對性地選擇那些專業實力較強的院校。 2.如果沒有明確的專業意向,可以優先考慮一下院校。 確定一下自己想要選擇綜合性院校還是理工類院校或是像財經或者…

C語言結構體的相關知識

前言 從0開始記錄我的學習歷程,我會盡我所能,寫出最最大白話的文章,希望能夠幫到你,謝謝。 1.結構體類型的概念及定義 1.1、概念: 結構體是一種構造類型的數據結構, 是一種或多種基本類型或構造類型的數…

springboot集成gzip和zip數據壓縮傳輸-滿足2k數據自動壓縮(適用大數據信息傳輸)

文章目錄 1)、springboot的gzip壓縮-滿足2k數據自動壓縮1.1后端壓縮1.2前端解壓1.3 滿足最小響應大小(2KB)和指定MIME類型的響應進行GZIP壓縮yml配置自定義配置或者使用Java配置 2)、gzip壓縮1.1接口使用-數據壓縮發送前端1.2 接口…

Java面試題系列 - 第3天

題目:Java集合框架詳解與高效使用策略 背景說明:Java集合框架是Java標準庫的重要組成部分,提供了一系列容器類,如List、Set、Map等,用于存儲和操作集合數據。熟練掌握集合框架的使用,對于編寫高效、健壯的…

機器學習之神經網絡

簡介 神經網絡(Neural Network)是一種模仿人類大腦的機器學習算法,由一系列相互連接的神經元組成。它能夠自動學習數據的特征和規律,并對新的輸入數據進行預測和分類。 神經網絡作為一種模仿生物大腦機制的機器學習算法,其產生和發展主要源于以下幾個方面的背景: 對人腦認知…

第11章 規劃過程組(二)(11.8排列活動順序)

第11章 規劃過程組(二)11.8排列活動順序,在第三版教材第390~391頁; 文字圖片音頻方式 第一個知識點:主要工具與技術(重要知識點) 1、箭線圖法(ADM) (雙代號網絡圖或活動箭線圖&am…

template配置項詳情——03

<body> // vue.config是vue全局配置對象 // productionTip 屬性可能設置是否生產提示信息 //默認值是&#xff1a;true,如果是false 則表示組織生產提示信息 vue.congfig.productionTip false //指定掛載位置 //注意&#xff1a;以下代碼只有vue框架能夠看懂的代碼。…

windows USB 設備驅動開發- 不同模型下的控制傳輸

在不同的模型下&#xff0c;USB控制傳輸會有不同的特點&#xff0c;但是任何控制傳輸的目標都始終是默認端點。 接收者是設備的實體&#xff0c;其信息&#xff08;描述符、狀態等&#xff09;是主機感興趣的。請求可進一步分為&#xff1a;配置請求、功能請求和狀態請求。 發…

leetcode力扣_雙指針問題

141. 環形鏈表 思路&#xff1a;判斷鏈表中是否有環是經典的算法問題之一。常見的解決方案有多種&#xff0c;其中最經典、有效的一種方法是使用 快慢指針&#xff08;Floyd’s Cycle-Finding Algorithm&#xff09;。 初始化兩個指針&#xff1a;一個快指針&#xff08;fast&…

uni-app 使用Pinia進行全局狀態管理并持久化數據

1.引言 最近在學習移動端的開發&#xff0c;使用uni-app前端應用框架&#xff0c;通過學習B站的視頻以及找了一個開發模板&#xff0c;終于是有了一些心得體會。 B站視頻1&#xff1a;Day1-01-uni-app小兔鮮兒導學視頻_嗶哩嗶哩_bilibili B站視頻2&#xff1a;01-課程和uni的…

JavaScript——for in類型

目錄 任務描述 相關知識 for in型 編程要求 任務描述 蘋果apple有多個屬性表示它的產地&#xff0c;比如locationProvince表示省份&#xff0c;這些屬性都以location開頭&#xff0c;和產地無關的屬性都不以location開頭。 本關任務&#xff1a;完成一個計算蘋果產地的函數…

[FFmpeg] windows下安裝帶gpu加速的ffmpeg

1.顯卡能力排查 目前只有 NIVIDIA 支持 ffmpeg 的 gpu加速(AMD貌似也陸續開始支持)。 在下述網站中查找自己的顯卡能夠支持的編解碼格式。https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-newhttps://developer.nvidia.com/video-encode-and-decod…

Vue88-Vuex中的mapActions、mapMutations

一、mapMutations的調用 此時結果不對&#xff0c;因為&#xff1a;若是點擊事件不傳值&#xff0c;默認傳的是event&#xff01;&#xff0c;所以&#xff0c;修改如下&#xff1a; 解決方式1&#xff1a; 解決方式2&#xff1a; 不推薦&#xff0c;寫法麻煩&#xff01; 1-…