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

Shell全局變量、局部變量與特殊變量的具體使用

 更新時(shí)間:2023年05月06日 11:12:11   作者:Apollon_krj  
本文主要介紹了Shell全局變量、局部變量與特殊變量的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

變量類型:全局變量(環(huán)境變量)和局部變量(本地變量)
環(huán)境變量可以在定義它們的shell及其派生出來的任意子進(jìn)程的shell中使用。局部變量只能在定義它們的函數(shù)/腳本中使用。還有一些變量是用戶創(chuàng)建的,其他的則是專用的shell變量。

1、全局變量(環(huán)境變量):

環(huán)境變量可用于定義shell的運(yùn)行環(huán)境,環(huán)境變量可以在配置文件中定義與修改,也可以在命令行中設(shè)置,但是命令行中的修改操作在終端重啟時(shí)就會(huì)丟失,因此最好在配置文件中修改(用戶家目錄的“.bash_profile“文件或者全局配置“/etc/profile”、“/etc/bashrc”文件或者“/etc/profile.d”文件中定義。)將環(huán)境變量放在profile文件中,每次用戶登錄時(shí)這些變量值將被初始化。比如HOME、USER、SHELL、UID等再用戶登錄之前就已經(jīng)被/bin/login程序設(shè)置好了。

常見系統(tǒng)環(huán)境變量:

TMOUT:設(shè)置自動(dòng)退出的誤操作等待時(shí)間
HOSTTYPE:系統(tǒng)文件系統(tǒng)類型
HISTSIZE:歷史命令記錄條數(shù)
HOME:用戶登錄時(shí)進(jìn)入的目錄,家目錄
UID:當(dāng)前用戶的id
SHELL:當(dāng)前shell解釋器
PWD:當(dāng)前所在路徑(每改變一次目錄,該值就會(huì)改變)
PATH:可執(zhí)行文件默認(rèn)路徑
等等。

可以用echo來顯示查看全局變量(eg:echo $HOME)。env(或printenv)、set也可以用來查看系統(tǒng)的環(huán)境變量,但不是單獨(dú)查看。而用unset臨時(shí)取消環(huán)境變量(eg:unset USER),要永久生效還是要寫到配置文件中

自定義環(huán)境變量(采用export):
①export 變量名=value
②變量名=value;export 變量名
③declare -x 變量名=value
這里依舊是臨時(shí)生效,在shell終端關(guān)閉后就消失了,寫到配置文件中則永久生效(注意:寫到配置文件中后需要運(yùn)行一遍配置文件的腳本才可生效,否則等重啟時(shí)生效)

命令行的三種方式測(cè)試如下:

關(guān)于環(huán)境變量PATH與export的更詳細(xì)的內(nèi)容,可參考: Linux環(huán)境變量與系統(tǒng)編程學(xué)習(xí)筆記

2、局部變量(本地變量):

本地變量在用戶當(dāng)前的shell生存期的腳本中使用。在一個(gè)函數(shù)中將某個(gè)變量聲明為local,則該變量就是一個(gè)局部變量,只在本函數(shù)中有效。
定義:

變量名=value
變量名=’value’
變量名=”value”
shell中變量名的要求:一般遵循字母、數(shù)字、下滑線組成,不能以數(shù)字開頭

eg:以下腳本執(zhí)行后(交互式非交互式都可以測(cè)試)輸出什么( c與 {c}等同)?

a=192.168.1.1
b='192.168.1.2'
c="192.168.1.3"
echo "A=$a"
echo "B=$b"
echo "C=${c}"
a=192.168.1.1-$b
b='192.168.1.2-$b'
c="192.168.1.3-$b"
echo "A=$a"
echo "B=$b"
echo "C=${c}"

輸出結(jié)果如下:

A=192.168.1.1
B=192.168.1.2
C=192.168.1.3
A=192.168.1.1-192.168.1.2
B=192.168.1.2-$b
C=192.168.1.3-192.168.1.2-$b

總結(jié)分析:
單引號(hào)與雙引號(hào)的區(qū)別在于:?jiǎn)我?hào)內(nèi)若存在變量,存在的變量當(dāng)做字符串不會(huì)被解析,原樣輸出;而雙引號(hào)中若存在變量,該變量會(huì)被解析出其具體的值再加入到字符串中。①不加引號(hào)可以直接定義內(nèi)容包含數(shù)字、字符串、路徑名等,適合定義數(shù)字②單引號(hào)適合于純定義字符串,③而雙引號(hào)適合于字符串的內(nèi)容中包含有變量的內(nèi)容的定義。(習(xí)慣:數(shù)字以及不帶空格的簡(jiǎn)單字符串不加引號(hào),其它長(zhǎng)的特別是有空格的字符串加雙引號(hào);遇到“$變量名”,但不想解析的加單引號(hào),但一般出現(xiàn)$都是為了解析變量,所以單引號(hào)較少使用)

注意:單引號(hào)與雙引號(hào)的特點(diǎn)不具有普遍性,如下:
在普通shell中:

ETT=123
echo '$ETT'	//打印$ETT(單引號(hào)不解析)
echo "$ETT"    //打印123(雙引號(hào)解析)

而在awk中調(diào)用shell變量:

awk 'BEGIN {print '$ETT'}'//打印123(單引號(hào)解析)
awk 'BEGIN {print "$ETT"}'//打印$ETT(雙引號(hào)不解析)

雖然在awk中不具有普遍性,但是在普通Shell中還是具有普遍性的。

3、關(guān)于局部變量的其它一些問題

①用反引號(hào)將命令的結(jié)果作為變量名是常用的方法,eg:cmd=`date +%F`
②用$符號(hào)將命令的結(jié)果作為變量名也比較常用,eg:cmd=$(date +%F)
③變量在大括號(hào)上的使用:在以時(shí)間、主機(jī)名等為包名一部分來打包的時(shí)候常用

eg1:用時(shí)間作為文件名的一部分打包

cmd=$(date +%F)    //由于`date +%F`的反引號(hào)不容易辨認(rèn),就不太使用`date +%F`
tar -zcf code_$(date+ %F)_kang.tar.gz /etc //沒有問題
tar -zcf code_`date +%F`_kang.tar.gz /etc   //沒有問題
tar -zcf code_kang_$cmd.tar.gz /etc    //沒有問題
tar -zcf code_$cmd_kang.tar.gz /etc	//會(huì)有歧義,因?yàn)橄到y(tǒng)會(huì)不清楚是應(yīng)該解析$cmd還是cmd_kang
tar -zcf code_${cmd}_kang.tar.gz /etc  //不會(huì)有歧義

對(duì)后兩種測(cè)試結(jié)果如下(不加{}的與理想結(jié)果是不符的):

eg2:用主機(jī)名與時(shí)間打包

cmd=$(date +%F)
host=$(hostname)
tar -zcf code_${cmd}_${host}.tar.gz /etc   

測(cè)試:

養(yǎng)成將字符串括起來使用的習(xí)慣防止不易發(fā)現(xiàn)的錯(cuò)誤。

4、Shell的特殊變量:

$0:獲取當(dāng)前執(zhí)行的shell腳本的文件名(執(zhí)行時(shí)給定的是完整路徑則獲取到的也是完整路徑)

兩個(gè)命令與$0的組合測(cè)試:獲取一個(gè)帶路徑的文件的路徑名與文件名兩部分

dirname(獲取目錄名部分)
basename(獲取文件名部分)

測(cè)試:

$n:獲取當(dāng)前執(zhí)行的shell腳本的第n個(gè)參數(shù),如果n=0則獲取的是腳本的文件名。如果n>9則需要用大括號(hào)括起來,eg:${21}

測(cè)試$n:

$*:獲取當(dāng)前執(zhí)行的shell的所有參數(shù),將所有的命令行參數(shù)視為單個(gè)字符串
$#:獲取當(dāng)前shell命令行中參數(shù)的總個(gè)數(shù)
$@:這個(gè)程序的所有參數(shù)"$1" "$2" "$3" "...",這是將參數(shù)傳遞給其它程序的最佳方式,因?yàn)樗鼤?huì)保留所有內(nèi)嵌在每個(gè)參數(shù)里的任何空白

$*與$@的區(qū)別:
$*將命令行的所有參數(shù)視為一個(gè)字符串:"$1$2$3..."
$@將命令行的每個(gè)參數(shù)視為單個(gè)的字符串:"$1" "$2" "$3" ...

基本測(cè)試如下:

獲取狀態(tài)變量:
$$:獲取當(dāng)前的shell進(jìn)程號(hào)
$?:獲取執(zhí)行上一個(gè)指令的返回值(0為成功,非零為失敗),可以對(duì)上一個(gè)命令執(zhí)行是否成功進(jìn)行判斷。
$_:在此之前執(zhí)行的命令或腳本的最后一個(gè)參數(shù)

$?變量其實(shí)獲取的是上一個(gè)程序返回給父進(jìn)程shell的返回值(該值在0-255之間:0表示運(yùn)行成功,2表示權(quán)限拒絕,1~125為運(yùn)行失敗原因是腳本命令、系統(tǒng)命令錯(cuò)誤或參數(shù)傳遞錯(cuò)誤,126為找到該命令但是無法執(zhí)行,127為無該命令/程序,>128表示命令被系統(tǒng)強(qiáng)制結(jié)束)

$?的不同返回值測(cè)試:

$?的值范圍測(cè)試如下:

$?在腳本中的應(yīng)用:

常用來判斷上一步是否成功(壓縮失敗打印ERROR壓縮成功打印OK):

到此這篇關(guān)于Shell全局變量、局部變量與特殊變量的具體使用的文章就介紹到這了,更多相關(guān)Shell全局變量、局部變量與特殊變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shell中的變量使用小結(jié)

    Shell中的變量使用小結(jié)

    這篇文章主要介紹了Shell中的變量使用小結(jié),本文總結(jié)了變量的語法、常見使用形式等內(nèi)容,并分別給出代碼示例,需要的朋友可以參考下
    2015-05-05
  • shell兩個(gè)文件去重的多種姿勢(shì)

    shell兩個(gè)文件去重的多種姿勢(shì)

    最近在利用shell幫公司優(yōu)化挖掘關(guān)鍵詞的流程,用shell替代了多個(gè)環(huán)節(jié)的操作,極大提高了工作效率。下面這篇文章就給大家分享了利用shell實(shí)現(xiàn)兩個(gè)文件去重的多種姿勢(shì),有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • Shell腳本中實(shí)現(xiàn)切換用戶并執(zhí)行命令操作

    Shell腳本中實(shí)現(xiàn)切換用戶并執(zhí)行命令操作

    這篇文章主要介紹了Shell腳本中實(shí)現(xiàn)切換用戶并執(zhí)行命令操作,看了示例代碼就秒懂了,原來如此簡(jiǎn)單,需要的朋友可以參考下
    2014-12-12
  • Shell中的數(shù)學(xué)運(yùn)算使用

    Shell中的數(shù)學(xué)運(yùn)算使用

    這篇文章主要介紹了Shell中的數(shù)學(xué)運(yùn)算使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spark-shell批量命令執(zhí)行腳本的方法

    Spark-shell批量命令執(zhí)行腳本的方法

    今天小編就為大家分享一篇Spark-shell批量命令執(zhí)行腳本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 詳談linux中sar的使用方法

    詳談linux中sar的使用方法

    下面小編就為大家?guī)硪黄斦刲inux中sar的使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Shell編程之循環(huán)語句示例詳解

    Shell編程之循環(huán)語句示例詳解

    在Shell 腳本開發(fā)中,經(jīng)常碰到一些規(guī)范方面的問題,例如忘了便用引號(hào)或在 if 語句末尾處忘記加 fi 結(jié)束,這篇文章主要介紹了Shell編程之循環(huán)語句,需要的朋友可以參考下
    2023-12-12
  • Shell腳本注釋寫法

    Shell腳本注釋寫法

    這篇文章主要介紹了Shell腳本注釋的3種寫法,包含單行注釋的方法和多行注釋的多種方法,需要的朋友可以參考下
    2014-07-07
  • 自動(dòng)生成linux網(wǎng)卡配置腳本分享

    自動(dòng)生成linux網(wǎng)卡配置腳本分享

    這篇文章主要介紹了自動(dòng)生成linux網(wǎng)卡配置的腳本,因?yàn)長(zhǎng)inux虛擬機(jī)在復(fù)制時(shí)候網(wǎng)卡信息會(huì)更新,所以導(dǎo)致需要重新配置網(wǎng)卡。本腳本功能,第一次添加網(wǎng)卡后,啟動(dòng)虛擬機(jī),然后運(yùn)行腳本(可以寫在啟動(dòng)腳步中),然后根據(jù)ifconfig -a 的信息來創(chuàng)建ifcfg-ethX的配置文件或者修改對(duì)應(yīng)的ifcfg-ethX的mac
    2014-03-03
  • linux tar命令簡(jiǎn)介

    linux tar命令簡(jiǎn)介

    tar命令用來打包,解包和壓縮。這篇文章主要介紹了linux tar命令簡(jiǎn)介,需要的朋友可以參考下
    2017-10-10

最新評(píng)論