LinuxShell——變數

来源:https://www.cnblogs.com/shamao/archive/2019/07/16/11195183.html
-Advertisement-
Play Games

LinuxShell——變數 摘要:本文主要學習了Shell命令中的變數。 什麼是變數 簡單的說,變數就是讓某一個特定字串代表不固定的內容。 變數是電腦記憶體的單元,其中存放的值可以改變。當Shell腳本需要保存一些信息時,如一個文件名或一個數字,就把它存放在一個變數中。 每個變數都有一個名字,所以 ...


LinuxShell——變數

摘要:本文主要學習了Shell命令中的變數。

什麼是變數

簡單的說,變數就是讓某一個特定字串代表不固定的內容。

變數是電腦記憶體的單元,其中存放的值可以改變。當Shell腳本需要保存一些信息時,如一個文件名或一個數字,就把它存放在一個變數中。

每個變數都有一個名字,所以很容易引用它。變數可以定製用戶本身的工作環境。使用變數可以保存有用信息,使系統獲知用戶相關設置。變數也可以用於保存暫時信息。

變數的命名規範

在定義變數時,有一些規則需要遵守。

1)變數名可以由字母、數字和下畫線組成,但是不能以數字開頭。

2)變數用等號“=”連接,“=”左右兩側不能有空格。這是Shell語言特有的格式要求。在絕大多數的其他語言中,“=”左右兩側是可以加入空格的。但是在Shell中如果在“=”左右兩側加入空格,那麼Linux會誤以為這是系統命令,是會報錯的。

3)變數值中如果有空格,則需要使用單引號或雙引號包括。雙引號括起來的特殊字元可以保留原有含義,而單引號括起來的內容都是普通字元。

例如:設置變數 var="lang is $LANG" ,獲取變數 echo $var ,得到結果 lang is zh_CN.UTF-8 。

4)在變數值中,可以使用轉義符“\”將特殊字元變成普通字元。

例如:設置變數 var=Hello\ Word ,獲取變數 echo $var ,得到結果 Hello Word 。

5)如果要把命令的執行結果作為變數值賦予變數,則需要使用反引號`命令`或$(命令),建議使用$(命令)。

例如:設置變數 var=$(date) ,獲取變數 echo $var ,得到結果 2019年 07月 15日 星期一 10:14:33 CST 。

6)在BASH中,變數的預設類型都是字元串型,如果要進行數值運算,則必須指定變數類型為數值型。

例如:設置變數 var=1+2 ,獲取變數 echo $var ,得到結果 1+2 。

7)如果需要増加變數值,那麼可以進行變數疊加,變數疊加可以使用"$變數名"或${變數名},建議使用${變數名}。

例如:設置變數 var=123 ,修改變數 var=${var}456 ,獲取變數 echo $var ,得到結果 123456 。

8)自定義變數建議小寫,環境變數名建議大寫,便於區分。

用戶自定義變數

說明

用戶自定義變數是最常用的變數類型,其特點是變數名和變數值都是由用戶自由定義的。

設置和修改變數

變數的設置和修改很簡單,使用“=”符號連接左邊的變數名和右邊的變數值即可:

1 [root@localhost ~]# 變數名=變數值

顯示和使用變數

可以使用echo命令來獲取變數,但是在使用變數時,需要在變數名前面加上“$”符號:

1 [root@localhost ~]# $變數名

也可以使用set命令查看所有的變數,包括用戶自定義變數和環境變數:

1 [root@localhost ~]# set

刪除變數

要想刪除自定義變數,可以使用unset命令:

1 [root@localhost ~]# unset 變數名

環境變數

說明

環境變數和用戶自定義變數最主要的區別在於,環境變數是全局變數,而用戶自定義變數是局部變數。用戶自定義變數只在當前的Shell中生效,而環境變數會在當前Shell和這個Shell的所有子Shell中生效。如果把環境變數寫入相應的配置文件,那麼這個環境變數就會在所有的Shell中生效。

這是有區別的,如果環境變數不寫入配置文件,那麼當前Shell一旦終止,這個環境變數就會消失,而只有寫入配置文件才會永久地在所有Shell中生效。

在Linux中一般通過環境變數配置操作系統的環境,如提示符、查找命令的路徑、用戶家目錄等,這些系統預設的環境變數的變數名是固定的,我們只能修改變數的值。

子程式

如果目前這個shell的情況下,去啟用另一個新的shell,新的那個shell就是子程式。

在一般的狀態下,父程式的自定義變數是無法在子程式內使用的。但是通過export將變數變成環境變數後,就能夠在子程式里使用了。

設置變數

環境變數和用戶自定義變數的設置方法相比,只需通過export命令將變數聲明為環境變數即可:

1 [root@localhost ~]# export var=hello

也可以先把變數聲明為本地變數,再用export聲明為環境變數:

1 [root@localhost ~]# var=hello
2 [root@localhost ~]# export var

顯示和使用變數

環境變數也可以使用echo命令來獲取:

1 [root@localhost ~]# $變數名

set既可以查詢用戶自定義變數,也可以查詢環境變數。也可以使用env命進行環境變數的查詢,env命令不會顯示用戶自定義變數:

1 [root@localhost ~]# env

刪除變數

環境變數的刪除方法和用戶自定義變數是一樣的,都使用unset命令:

1 [root@localhost ~]# unset 變數名

其他類型的變數

位置參數變數

在Linux的命令行中,當一條命令或腳本執行時,後面可以跟多個參數,我們使用位置參數變數來表示這些參數。

其中,$0代表命令行本身,$1代表第1個參數,$2代表第2個參數,依次類推。當參數個數超過10個時,就要用大括弧把這個數字括起來,例如,${10}代表第10個參數。

在Shell中可以識別的位置參數變數:

1 $n:n為數字,$0代表命令本身,$1到$9代表第1個到第9個參數,10以上的參數需要用大括弧包含,如${10}。
2 $*:這個變數代表命令行中所有的參數,把所有的參數看成一個整體。
3 $@:這個變數也代表命令行中所有的參數,不過$@把每個參數區別對待。
4 $#:這個變數代表命令行中所有參數的個數。

預定義變數

預定義變數是在Shell一開始時就定義的變數,這一點和預設環境變數有些類似。不同的是,預定義變數不能重新定義,用戶只能根據Shell的定義來使用這些變數。

嚴格來說,位置參數變數也是預定義變數的一種,知識位置參數變數的作用比較統一,所以我們把位置參數變數單獨劃分為一類數量。

Shell中主要的預定義變數:

1 $?:最後一次執行的命令的返回狀態。如果這個變數的值為0,則證明上一條命令正確執行。如果這個變數的值不為0,則證明上一條命令執行錯誤。
2 $$:當前進程的進程號(PID)。
3 $!:後臺運行的最後一個進程的進程號(PID)。

聲明變數類型

所有變數的預設類型是字元串型,使用declare命令可以聲明變數的類型。

基本語法

1 [root@localhost ~]# declare [+/-] [選項] 變數名

選項說明

1 -:給變數設定類型屬性。
2 +:取消變數的類型屬性。
3 -a:將變數聲明為數組型。
4 -i:將變數聲明為整數型。
5 -r:將變數聲明為只讀變數。註意,一旦設置為只讀變數,既不能修改變數的值,也不能刪除變數,甚至不能通過+r取消只讀屬性。
6 -x:將變數聲明為環境變數。
7 -p:顯示指定變數的被聲明的類型。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本項目採用ASP.Net Core微服務技術,搭建博客和Saas平臺。 全文將圍繞(1)設計模式 (2)敏捷開發 目的: 結構足夠合理,代碼足夠優美,擴展性、可讀性、易維護性做到最優。 以下目錄僅為整體思路,後期逐漸完善補充。 1.配置linux環境實現持續集成 2.快速搭建 ASP.net cor ...
  • LinuxShell——正則表達式 摘要:本文主要學習了Shell中的正則表達式。 簡介 含義 正則表達式,也稱作正規表示法,是用於描述字元排列和匹配模式的一種語法規則,它主要用於字元串的模式分割、匹配、査找及替換操作。 正則表達式是用來匹配文件中的字元串的方法,它會先把整個文本分成一行一行的字元串 ...
  • 本文主要介紹了 cgroup 的一些基本概念,包括其在 CentOS 系統中的預設設置和控制工具,以 CPU 為例闡述 cgroup 如何對資源進行控制。 ...
  • 我所使用的Contiki系統是contiki-sensinode。理解該文需要有cc2530里uart的相關知識,具體寄存器的用法不做介紹。 先放上所有代碼,然後再仔細分析。 首先是包含的頭文件,就不多說了。 然後是一個巨集定義,#if UART0_ENABLE,若該巨集未被定義,則uart0_init ...
  • 參考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/article/details/83684052 1.syslog是 Unix 系統的一個常見組件,用於執行 ...
  • [toc] 操作系統 人與電腦硬體之間的中介 類別 window7,8,10 linux unix mac 32位和64位有什麼區別 設計定位不同 運算能力不同 定址能力不同,32位支持4G,64位支持128G物理記憶體 安裝要求不同 磁碟管理 磁碟的基本概念 磁碟 磁碟就像是森林,是所有硬式存儲的 ...
  • LinuxShell——特殊符號 摘要:本文主要學習了Shell命令中具有特殊功能的一些符號。 多命令執行 順序執行“;” 如果使用“;”連接多條命令,那麼這些命令會依次執行,但是各命令之間沒有任何邏輯關係,也就是說,不論哪條命令報錯了,後面的命令仍會依次執行。 舉個例子: 可以看到即便有命令執行錯 ...
  • 首先,在使用Git的同時,我們需要擁有碼雲賬號,在官網註冊即可(官網:https://gitee.com/)。 註冊結束後創建一個代碼倉庫,最好和要上傳的文件夾名字一樣: 1、首先在電腦上安裝windows版本Git(官網:https://git-scm.com/download/),64位系統直接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...