shell的變量

Linux 系統中 shell 變量的使用

文章目錄

    • (1)簡介
    • (2)變量分類
    • (3)變量賦值
    • (4)變量命名
    • (5)變量引用
    • (6)變量清除
    • (7)變量只讀
    • (8)內部參數變量
    • (9)環境變量
    • (10)數組

(1)簡介

變量是 shell 中用來存儲數據的一種特殊標識符。變量可以用來保存用戶輸入的值,也可以用來保存計算結果。

(2)變量分類

shell 中的變量可以分為以下幾類:

  • 用戶自定義變量:由用戶自己定義、修改、使用。
  • 環境變量:由系統維護,用于存儲有關系統和用戶的信息。
  • 位置參數變量:通過命令行給程序傳遞執行參數。
  • 內部參數變量:是 bash 預定義的特殊變量,用戶不能修改。

(3)變量賦值

變量賦值的格式如下:

變量名=值

例如:

name="Josh"

(4)變量命名

變量名的命名規則如下:

  • 變量名只能由字母、數字、下劃線組成。
  • 變量名不能以數字開頭。
  • 變量名不能是關鍵字和特殊字符。

(5)變量引用

變量引用的格式如下:

$變量名

例如:

echo $name

輸出:

Josh

(6)變量清除

變量清除的格式如下:

unset 變量名

例如:

unset name

(7)變量只讀

變量設置為只讀的格式如下:

readonly 變量名

例如:

readonly name

(8)內部參數變量

shell 內部參數變量是一組特殊的變量,它們由 shell 自動設置和維護,用于存儲有關 shell 和正在運行的命令的信息。

以下是一些常見的 shell 內部參數變量及其用途:

變量名含義
$0保存當前腳本或命令的名稱。
$1, $2, $3, …保存傳遞給腳本或函數的位置參數。
$#保存傳遞給腳本或函數的位置參數的數量。
$@保存所有傳遞給腳本或函數的位置參數的列表。
$*保存所有傳遞給腳本或函數的位置參數的列表,作為一個單獨的字符串。
$$保存當前 shell 進程的進程 ID(PID)。
$?保存上一個命令的退出狀態(返回值)。通常,0 表示成功,非零值表示出現了錯誤。
$!保存在后臺運行的最后一個命令的 PID。
$_ $表示在此之前執行的命令或腳本的最后一個參數 \

示例:

#!/bin/bash
echo "這個腳本的名字是: $0"
echo "參數一共有: $#"
echo "參數的列表是: $@"
echo "參數的列表是: $*"
echo "第一個位置參數是: $1"
echo "第二個位置參數是: $2"
echo "第三個位置參數是: $3"

執行結果:

[root@localhost shell]# sh 1.sh 1 2 3 4 5 6
這個腳本的名字是: 1.sh
參數一共有: 6
參數的列表是: 1 2 3 4 5 6
參數的列表是: 1 2 3 4 5 6
第一個位置參數是: 1
第二個位置參數是: 2
第三個位置參數是: 3
標題Linux 系統中 shell 變量的使用
簡介變量是 shell 中用來存儲數據的一種特殊標識符。變量可以用來保存用戶輸入的值,也可以用來保存計算結果。
分類用戶自定義變量、環境變量、位置參數變量、內部參數變量
賦值變量名=值
命名只能由字母、數字、下劃線組成;不能以數字開頭;不能是關鍵字和特殊字符
引用$變量名
清除unset 變量名
只讀readonly 變量名
內部參數變量$0、KaTeX parse error: Expected 'EOF', got '#' at position 9: 1、2、...、#?、@、*、、?、 ! 、 !、 !_
常見環境變量PWD、PATH、USER、LOGNAME、SHELL、HOME
應用保存用戶輸入的值、保存計算結果、傳遞參數給命令或腳本、控制命令或腳本的執行
退出返回狀態保存在變量 ?

其他示例

[root@localhost]# echo $$		#顯示當前進程的pid
2163
[root@localhost]# echo $? 		#顯示上一條命令的返回值
0
[root@localhost ]# bash			#調用子shell
[root@localhost]# echo $$
4539
[root@localhost]# exit 1		#指定返回值并返回父shell
exit

命令狀態返回值:
shell 命令的退出狀態(返回值)保存在變量 ? 中。

  • 0 表示成功
  • 1 表示通用錯誤或執行失敗
  • 126 表示命令或腳本沒權限
  • 127 表示命令沒找到

1、通常,0 表示成功,非零值表示出現了錯誤。例如:

[root@localhost ~]# echo "Hello, world!"
Hello, world!
[root@localhost ~]# echo $?
0

2、命令執行失敗,返回1

[root@localhost shell]# chmod +x 2.sh
chmod: 無法訪問"2.sh": 沒有那個文件或目錄
[root@localhost shell]# echo $?
1

3、權限不夠,返回126

[root@localhost shell]# ./1.sh
-bash: ./1.sh: 權限不夠
[root@localhost shell]# echo $?
126

4、執行不存在的命令,提示返回127

[root@localhost shell]# eoch $USER
-bash: eoch: 未找到命令
[root@localhost shell]# echo $?
127

以上返回值,常用于判斷命令是否執行成功,例如:

創建文件的腳本中,如果$?的返回值,ne代表不等于0,不等于0那么就是執行失敗。

#!/bin/bash
read -p "輸入需要創建的文件名:" file
touch $file
if [ $? -ne 0 ];then		echo "文件創建錯誤"
elseecho "成功創建 $file 文件"
fi

結論:退出返回狀態可以用于判斷命令的執行結果。

(9)環境變量

環境變量是保存在系統內存中的數據,可以被所有程序訪問。環境變量可以用于存儲各種信息,例如當前工作目錄、可執行程序的搜索路徑、用戶的名稱等。

常見環境變量

變量名含義
PWD保存當前工作目錄。
PATH保存可執行程序的搜索路徑。
USER保存當前用戶的名稱。
LOGNAME保存當前用戶的登錄名。
SHELL保存當前 shell 的類型。
HOME保存當前用戶的主目錄。

使用

環境變量可以通過 echo 命令來查看:

Bash

echo $PWD

輸出:

/home/user

環境變量也可以在命令行中使用,例如:

Bash

cd $HOME

這條命令將切換到當前用戶的主目錄。

補充

除了上述常見環境變量之外,還有一些其他的環境變量,例如:

變量名含義
HISTSIZE保存歷史命令的數量。
HISTFILESIZE保存歷史命令的文件大小。
LANG保存系統語言環境。
LC_ALL保存系統的區域設置。
TERM保存終端類型。
EDITOR保存默認編輯器。

這些環境變量可以用于控制 shell 的行為或提供給程序使用。

(10)數組

shell 中的數組是一種特殊的變量,可以保存多個值。數組的元素可以是任何數據類型,包括字符串、數字、布爾值等。

數組的定義格式如下:

變量名=(元素1 元素2 ... 元素n)

1、例如,定義一個名為 numbers 的數組,其中包含 1、2、3 三個元素:

numbers=(1 2 3)

數組的元素可以通過索引來訪問。索引從 0 開始,例如:

echo ${numbers[0]}

輸出:

1

讀取全部元素:

echo ${numbers[@]}

輸出

1 2 3

也可以使用 for 循環來遍歷數組:

for i in "${numbers[@]}"
doecho "$i"
done

輸出:

1
2
3

實驗示例

# 定義一個名為 `fruits` 的數組,其中包含 "apple"、"banana"、"orange" 三個元素
fruits=(apple banana orange)# 遍歷數組
for fruit in "${fruits[@]}"
doecho "$fruit"
done# 獲取數組的長度
echo ${#fruits[@]}

輸出:

apple
banana
orange
3

shell 數組可以用于存儲多個值,可以用于各種場景。掌握 shell 數組的使用方法,可以幫助我們更好地使用 shell。

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

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

相關文章

基于JavaWeb+SSM+Vue馬拉松報名系統微信小程序的設計和實現

基于JavaWebSSMVue馬拉松報名系統微信小程序的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 1系統概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系統設計思想 1 2相關技術 2 2.…

WPF仿網易云搭建筆記(0):項目搭建

文章目錄 前言項目地址項目Nuget包搭建項目初始化項目架構App.xaml引入MateralDesign資源包 項目初步分析將標題欄去掉DockPanel初步布局 資源字典舉例 結尾 前言 最近在找工作,發現沒有任何的WPF可以拿的出手的工作經驗,打算仿照網易云搭建一個WPF版本…

Numpy 實現基尼指數算法的決策樹

基尼系數實現決策樹 基尼指數 Gini ? ( D ) 1 ? ∑ k 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \operatorname{Gini}(D)1-\sum_{k1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2} Gini(D)1?k1∑K?(∣D∣∣Ck?∣?)2 特征 A A A條件下集合 D D D的基尼指數: Gi…

使用ssm框架進行mapper或者service單純測試時報錯問題處理

問題 使用注解方式配置好ssm后,無法在測試中單獨測試mapper層和service層。效果如下: 解決 關閉配置類中的EnableWebMvc 再次運行,即可完成測試。

【SpringBoot篇】5種類型參數傳遞json數據傳參的操作

🎊專欄【SpringBoot】 🍔喜歡的詩句:天行健,君子以自強不息。 🎆音樂分享【如愿】 🎄歡迎并且感謝大家指出小吉的問題🥰 文章目錄 🌺普通參數🌺POJO參數🌺嵌套…

uniapp切換頁面時報錯問題

我們來看如下錯誤: 該錯誤的意思是不能切換到 tabbar 頁面。tabbar頁面通常是公共頁面或者底部導航欄,如果我們用 navigateTo 或者 redirectTo 都不能實現頁面切換。 我們有兩種方式: 第一種是用 switchTab 來進行切換,但注意切…

xml文本轉Java對象

Java對象轉String public static String toData(Object object) throws Exception {JAXBContext jc JAXBContext.newInstance(object.getClass());Marshaller m jc.createMarshaller();StringWriter output new StringWriter(2048);m.marshal(object, output);String data …

STM32之SPI總線

一、SPI總線概述 1、SPI總線介紹 SPI是一種通信協議,它是摩托羅拉公司研發出來的一種通信協議,就有自己的特點(串行,并行,單工,半雙工,全雙工,同步異步)。它主要應用于音…

ffprobe命令行超詳細使用詳解

本文做為閱讀ffprobe源碼的前課程。為了之后方便理解ffprobe的源碼,咱們先從ffprobe的命令學習。 課程內容如下: 文章目錄 一、ffprobe主要選項說明1、每次使用ffprobe都打印編譯環境的信息,太煩了2、如何分析媒體文件中存在的流信息3、如何指定查詢某路流信息4、查看輸入文…

CS106L2023 and CS106B 環境配置(詳細教程)

1.問題: (1)CS106L 運行./setup.sh 腳本時出錯 (windows 請下載git,在git bash 打開運行) (2)CS106B,QT構建 構建錯誤:一般構建錯誤,例如 Erro…

【Java+MySQL】前后端連接小白教程

目錄 🍭【IntelliJ IDEA】操作 🍭1. 連接MySQL數據庫 🌈1.1 錯誤解決 🍭2. 操作MySQL數據庫 🌈2.1 雙擊查看表數據 🌈2.2 編寫SQL腳本 🍭【IntelliJ IDEA】 IntelliJ IDEA是由JetBrains公司…

2013年全國碩士研究生入學統一考試管理類專業學位聯考數學試題——解析版

文章目錄 2013 級考研管理類聯考數學真題一、問題求解(本大題共 15 小題,每小題 3 分,共 45 分)下列每題給出 5 個選項中,只有一個是符合要求的,請在答題卡上將所選擇的字母涂黑。真題(2013-01&…

Django自定義中間件

自定義中間件 傳統方法的的五大鉤子函數:(需要調用MiddlewareMixin類) process_request,請求剛到來,執行視圖之前;正序 process_view,路由轉發到視圖,執行視圖之前;正序…

【Linux】地址空間

本片博客將重點回答三個問題 什么是地址空間? 地址空間是如何設計的? 為什么要有地址空間? 程序地址空間排布圖 在32位下,一個進程的地址空間,取值范圍是0x0000 0000~ 0xFFFF FFFF 回答三個問題之前我們先來證明地址空…

【Python數據結構與算法】—— 搜索算法 | 期末復習不掛科系列

? 🌈個人主頁: Aileen_0v0🔥系列專欄: 數據結構與算法💫個人格言:"沒有羅馬,那就自己創造羅馬~" 這篇博客主要探索的是計算機科學常見問題---搜索算法 “時間緊,任務重!” 話不多說,開始今天…

HarmonyOS--ArkTS(0)--目錄

官方API文檔: HarmonyOS應用開發官網 - 華為HarmonyOS打造全場景新服務 華為開發者官方網站_創新從這里開始

MySQL的鎖機制

1.簡介 MySQL的隔離性是由鎖機制來保證的。鎖是計算機協調多個進程或線程并發地訪問某一資源你的機制。當多線程并發地訪問某個數據時,尤其是在涉及金錢等安全敏感性數據的時候,需要保證數據在任意時刻最多只有一個線程可以對其進行修改,從而…

Android 分享小結

關于作者:CSDN內容合伙人、技術專家, 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 ,擅長java后端、移動開發、商業變現、人工智能等,希望大家多多支持。 目錄 一、導讀二、微信 分享 三、 QQ 、QQ空間(Qz…

MATLAB基礎運算

矩陣和數字相乘 就是矩陣里面每個元素跟這個數字乘一遍,無論是點乘還是叉乘,對于這個都一樣。 >> Aones(3) A 1 1 11 1 11 1 1 >> 10*A ans 10 10 1010 10 1010 10 10 矩陣和矩陣叉乘 能不能相…

C++普通函數與函數模板的調用規則

調用規則 如果函數模板和普通函數都可以實現,優先調用普通函數可以通過空模板參數列表來強制調用函數模板函數模板也可以重載如果函數模板可以產生更好的匹配,優先調用函數模板 總結:既然提供了函數模板,最好就不要提供普通函數…