欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解shell 變量

 更新時(shí)間:2020年08月31日 14:55:35   作者:Dabelv  
這篇文章主要介紹了shell 變量的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)shell,感興趣的朋友可以了解下

1.簡(jiǎn)介

變量是任何一種編程語(yǔ)言都必不可少的組成部分,變量用來(lái)存放各種數(shù)據(jù)。腳本語(yǔ)言在定義變量時(shí)通常不需要指明類(lèi)型,直接賦值就可以,Shell變量也遵循這個(gè)規(guī)則。

在Bash shell 中,每一個(gè)變量的值都是字符串,無(wú)論你給變量賦值時(shí)有沒(méi)有使用引號(hào),值都會(huì)以字符串的形式存儲(chǔ)。這意味著,Bash shell 在默認(rèn)情況下不會(huì)區(qū)分變量類(lèi)型,即使你將整數(shù)和小數(shù)賦值給變量,它們也會(huì)被視為字符串,這一點(diǎn)和大部分的編程語(yǔ)言不同。如C/C++ ,變量分為整數(shù)、浮點(diǎn)數(shù)、字符串、布爾等多種類(lèi)型。當(dāng)然,如果有必要,你也可以使用declare/typeset Shell內(nèi)建命令顯式定義變量的類(lèi)型,但在一般情況下沒(méi)有這個(gè)需求,Shell 開(kāi)發(fā)者在編寫(xiě)代碼時(shí)自行注意值的類(lèi)型即可。

2.變量類(lèi)型

Shell中按照變量的作用域和生命周期,Shell變量可分為四大類(lèi):

(1)永久環(huán)境變量:需要修改配置文件,變量永久生效。

(2)臨時(shí)環(huán)境變量:使用export命令行聲明即可,變量在Shell腳本進(jìn)程結(jié)束后仍然有效,但在關(guān)閉當(dāng)前Shell會(huì)話后失效。

(3)全局變量:在腳本中定義,僅在當(dāng)前Shell腳本中有效,其他Shell腳本進(jìn)程不能訪問(wèn),其作用域從定義的位置開(kāi)始,到腳本結(jié)束或被顯示刪除的地方為止。注意,全局變量既可以在Shell函數(shù)內(nèi)定義,也可以在Shell函數(shù)外定義,因?yàn)镾hell函數(shù)內(nèi)定義的變量默認(rèn)為global,且作用域從“函數(shù)被調(diào)用時(shí)執(zhí)行變量定義的地方”開(kāi)始,到腳本結(jié)束或被顯示刪除的地方為止。

#!/bin/bash

globalVar=dablelv	#全局變量

(4)局部變量。在Shell腳本中函數(shù)內(nèi)顯示使用local關(guān)鍵字定義的變量。其作用域局限于函數(shù)內(nèi)。同名local變量會(huì)屏蔽global變量。

#!/bin/bash

function test()
{
	local localVar=dablelv	#局部變量
}
test
echo $localVar			 	#輸出為空

3.定義變量

Shell 支持以下三種定義變量的方式:

var=value
var='value'
var="value"

var是變量名,value是賦給變量的值。如果value不包含任何空白符(例如空格、Tab等),那么可以不使用引號(hào);如果value 包含了空白符,那么就必須使用引號(hào)包圍起來(lái)。使用單引號(hào)和使用雙引號(hào)也是有區(qū)別的,稍后我們會(huì)詳細(xì)說(shuō)明。注意,賦值號(hào)的周?chē)荒苡锌崭瘢@可能和你熟悉的大部分編程語(yǔ)言都不一樣。

Shell變量的命名規(guī)范和大部分編程語(yǔ)言都一樣:
(1)變量名由數(shù)字、字母、下劃線組成;
(2)必須以字母或者下劃線開(kāi)頭;
(3)不能使用Shell里的關(guān)鍵字(通過(guò)help命令可以查看保留關(guān)鍵字)。

變量定義示例:

name='dablelv'
home="安徽"
age=28

4.訪問(wèn)變量

使用一個(gè)定義過(guò)的變量,只要在變量名前面加美元符號(hào)$即可,如:

name="dablelv"
echo $name
echo ${name}

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

skill="Java"
echo "I am good at ${skill}Script"

如果不給skill變量加花括號(hào),解釋器就會(huì)把$skillScript當(dāng)成一個(gè)變量(其值為空),代碼執(zhí)行結(jié)果就不是我們期望的樣子了。

推薦給所有變量加上花括號(hào){ },這是個(gè)良好的編程習(xí)慣。

5.修改變量的值

已定義的變量,可以被重新賦值,如:

name='dablelv'
echo $name
name="billwong"

第二次對(duì)變量賦值時(shí)不能在變量名前加,只有在使用變量時(shí)才能加,只有在使用變量時(shí)才能加,只有在使用變量時(shí)才能加。

6.單引號(hào)和雙引號(hào)的區(qū)別

定義變量時(shí),變量的值可以由單引號(hào)包圍,也可以由雙引號(hào)包圍,它們到底有什么區(qū)別呢?不妨以下面的代碼為例來(lái)說(shuō)明:

#!/bin/bash

name='dablelv'
str1='我的名字是${name}'
str2="我的名字是${name}"
echo $str1
echo $str2

運(yùn)行結(jié)果:

我的名字是${name}
我的名字是dablelv

以單引號(hào)包圍變量的值時(shí),單引號(hào)里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來(lái))也會(huì)把它們?cè)瓨虞敵?。這種方式比較適合定義顯示純字符串的情況,即不希望解析變量、命令等的場(chǎng)景。

以雙引號(hào)包圍變量的值時(shí),輸出時(shí)會(huì)先解析里面的變量和命令,而不是把雙引號(hào)中的變量名和命令原樣輸出。這種方式比較適合字符串中附帶有變量和命令并且想將其解析后再輸出的變量定義。

建議:如果變量的內(nèi)容是數(shù)字,那么可以不加引號(hào);如果真的需要原樣輸出就加單引號(hào);其他沒(méi)有特別要求的字符串等最好都加上雙引號(hào),定義變量時(shí)加雙引號(hào)是最常見(jiàn)的使用場(chǎng)景。

7.將命令的結(jié)果賦值給變量

Shell 也支持將命令的執(zhí)行結(jié)果賦值給變量,常見(jiàn)的有以下兩種方式:

variable=`command`
variable=$(command)

第一種方式把命令用反引號(hào)包圍起來(lái),反引號(hào)和單引號(hào)非常相似,容易產(chǎn)生混淆,所以不推薦使用這種方式;第二種方式把命令用$()包圍起來(lái),區(qū)分更加明顯,所以推薦使用這種方式。

例如將兩個(gè)數(shù)值相加賦給某一變量。

var1=1
var2=2
varAdd1=`expr $var1 + $var2`
varAdd2=$(expr $var1 + $var2)

8.只讀變量

使用readonly命令,或者使用declare -rtypeset -r可以將變量定義為只讀變量,只讀變量的值不能被改變。

name="dablelv"
readonly name

declare -r name="dablelv"

typeset -r name="dablelv"

9.刪除變量

使用unset內(nèi)置命令可以刪除變量。語(yǔ)法:

unset variable_name

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

#!/bin/bash

name="dablelv"
unset name
echo $name

上面的腳本沒(méi)有任何輸出。

以上就是詳解shell 變量的詳細(xì)內(nèi)容,更多關(guān)于shell 變量的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • windows下寫(xiě)的shell腳本在linux執(zhí)行出錯(cuò)的解決辦法

    windows下寫(xiě)的shell腳本在linux執(zhí)行出錯(cuò)的解決辦法

    這篇文章主要介紹了windows下寫(xiě)的shell腳本在linux執(zhí)行出錯(cuò)的解決辦法,需要的朋友可以參考下
    2014-03-03
  • Shell腳本實(shí)現(xiàn)IP地址合法性判斷

    Shell腳本實(shí)現(xiàn)IP地址合法性判斷

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)IP地址合法性判斷,本文給出了實(shí)現(xiàn)代碼和運(yùn)行代碼,需要的朋友可以參考下
    2014-10-10
  • 通過(guò)shell腳本循環(huán)進(jìn)入目錄執(zhí)行命令的方法

    通過(guò)shell腳本循環(huán)進(jìn)入目錄執(zhí)行命令的方法

    今天小編就為大家分享一篇通過(guò)shell腳本循環(huán)進(jìn)入目錄執(zhí)行命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Linux?screen命令使用示例

    Linux?screen命令使用示例

    Screen是一個(gè)全屏窗口管理器,它在多個(gè)進(jìn)程(通常是交互式shell)之間多路傳輸物理終端。每個(gè)虛擬終端提供DEC?VT100終端的功能,以及ANSI?X3的幾個(gè)控制功能,本文給大家分享Linux?screen命令使用示例,感興趣的朋友一起看看吧
    2023-03-03
  • 2022最新vmstate?命令詳解

    2022最新vmstate?命令詳解

    這篇文章主要介紹了vmstate?命令詳解2022,主要包括使用vmstat命令的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • shell?判斷語(yǔ)句腳本用法解析

    shell?判斷語(yǔ)句腳本用法解析

    這篇文章主要為大家介紹了shell判斷語(yǔ)句腳本用法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Shell腳本實(shí)現(xiàn)監(jiān)控iptables規(guī)則是否被修改

    Shell腳本實(shí)現(xiàn)監(jiān)控iptables規(guī)則是否被修改

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)監(jiān)控iptables規(guī)則是否被修改,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • shell中使用expect命令進(jìn)行遠(yuǎn)程執(zhí)行命令腳本

    shell中使用expect命令進(jìn)行遠(yuǎn)程執(zhí)行命令腳本

    今天小編就為大家分享一篇關(guān)于shell中使用expect命令進(jìn)行遠(yuǎn)程執(zhí)行命令腳本,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • shell腳本實(shí)現(xiàn)文件鎖功能

    shell腳本實(shí)現(xiàn)文件鎖功能

    這篇文章主要介紹了shell腳本實(shí)現(xiàn)文件鎖功能,本文實(shí)現(xiàn)了一個(gè)排它鎖,從而實(shí)現(xiàn)避免腳本重復(fù)執(zhí)行,需要的朋友可以參考下
    2014-12-12
  • Linux中執(zhí)行shell腳本的4種方法總結(jié)

    Linux中執(zhí)行shell腳本的4種方法總結(jié)

    這篇文章主要介紹了Linux中執(zhí)行shell腳本的4種方法總結(jié),即在Linux中運(yùn)行shell腳本的4種方法,需要的朋友可以參考下
    2014-08-08

最新評(píng)論