【Shell】20天学会shell脚本命令(2)变量的详解
一、問題
1.1、環(huán)境
電腦環(huán)境:Windows 10;
Docker版本:Server Version: 19.03.3
1.2、問題
shell腳本一直是Linux的必回只語言;就像去英語系國家工作,shell就是英語;如果不會英語,那么工作起來就會舉步維艱;
聲明:本學(xué)習(xí)內(nèi)容,來自嗶哩嗶哩網(wǎng)站上的公開課內(nèi)容【京峰教育】的吳光科老師的視頻編寫而成;僅供學(xué)習(xí)參考;網(wǎng)站地址
二、解答
2.1、基本知識;
任何的語言,都有常量和變量,什么是變量呢,未知數(shù)x就是變量,變量可以等于任何滿足條件的值,并且不同的條件下,會有不同的值;shell的變量分為兩類:
這個和java一樣,java也有局部變量和環(huán)境變量;局部變量和環(huán)境變量有什么區(qū)別,就好比一個演員,他在電影里可以扮演某個角色,使用該角色的身份;但是在現(xiàn)實中,他就無法使用電影中的角色的權(quán)力;但是在現(xiàn)實中,他可以行使自己作為正常公民的所有權(quán)力;如果你非要讓他本色出演,在局部變量里聲明一個系統(tǒng)變量原有的值,也是可以的;
1、定義變量
A=1變量賦值通過賦值號來連接,也就是我們常見的等于號,但是它不是等于號;打個比方,變量A就是一個杯子,現(xiàn)在杯子里裝的如果是水,你不能說杯子等于水;現(xiàn)在杯子里裝的是數(shù)值1,隨著編程的進行,后面A的值會發(fā)生變化;定義的格式是:
變量名=值這里注意變量名前面沒有任何單詞,不像java,要規(guī)定變量的類型,由此可見,shell是弱語言類型的;并且,這里的【值】不一定指數(shù)值,也有可能是字符串或者其他內(nèi)容;還有要注意的是,shell里的變量,我們最好用大寫字母來表示,這樣我們能一眼認(rèn)出哪些是我們自定義的變量;方便我們調(diào)取;
2、運行
我們新建一個vary.sh,輸入內(nèi)容如下:
運行后的結(jié)果為:
3、與Java的對比
①、這里的echo就是shell腳本里面的打印函數(shù)或者叫打印方法,后面跟打印的內(nèi)容即可,類似于Java里的System.out.println()方法;并且Java還需要有一個main方法(或者@Test標(biāo)注的測試類)才能完成打印動作;顯然,shell更方便;
②、shell定義變量時,不需要規(guī)定變量的類型,但是Java是強語言類型,必須聲明變量的類型;各有利弊;
③、并且對比Java,我們可以發(fā)現(xiàn),變量的引用方式也不一樣,Java是直接引用變量名a,不需要使用美元符號;但是shell需要;這里Java搬回1分;
④、Java在引用變量時,會受到英文的雙引號的干擾,因為變量一旦寫在英語的雙引號內(nèi),系統(tǒng)無法識別他是文字內(nèi)容還是變量,所以Java的變量必須要切斷引號,暴露在引號外,才能打印;而shell因為有美元符號加持,所以不用怕,系統(tǒng)照樣識別$A是一個變量;
⑤、shell里的等號前后不能有空格,而Java不必?fù)?dān)心;這里要非常注意;
4、系統(tǒng)變量
系統(tǒng)規(guī)定了一部分特殊的變量,內(nèi)容如下:
$0:當(dāng)前程序的名稱;
$n:當(dāng)前系統(tǒng)的第n個參數(shù),n=1,2,3,4,5,6,7,8,9
$*:當(dāng)前參數(shù)的所有參數(shù)(不含程序本身)
$# 當(dāng)前程序的參數(shù)個數(shù)(不包括程序本身)
$?:命令或者程序執(zhí)行后的狀態(tài),返回0表示成功;這里跟我們常識感覺可能不一樣,因為我們一般以0為無,沒有的意思;通常認(rèn)為0表示失敗,這里恰恰相反,大家注意;
$UID:當(dāng)前用戶的ID;
$PWD:當(dāng)前所在的目錄;(這里的PWD不是密碼的意思,不是表示password,而是print working directory,一般英語大寫縮寫都是多個單詞的縮寫,這里注意,容易誤解);
我們編寫打印腳本,把這幾個變量都打印一遍,腳本內(nèi)容:
執(zhí)行結(jié)果截圖:
我們發(fā)現(xiàn),因為該腳本沒有輸入任何參數(shù),所以第1,2個參數(shù)都為空;并且,程序的執(zhí)行狀態(tài)為$?,而不是返回0或者其他數(shù)字來表示成功與否,因為在打印過程中,腳本還沒結(jié)束,系統(tǒng)執(zhí)行到這里時無法判斷接下來程序是否正常運行結(jié)束,所以在自己的腳本中,系統(tǒng)無法判斷腳本自己是否正常結(jié)束;如果想看剛才執(zhí)行的腳本是否成功,我們可以再執(zhí)行完腳本后,立馬執(zhí)行
echo $?這樣就可以看到返回值是否是0來判斷腳本是否執(zhí)行成功(剛剛說的,0代表成功);
但是,如上圖,我們?nèi)绻獯蛴??,命令行是無法識別的;
如果要想打印第1,2個參數(shù),我們可以這樣運行腳本,在sh systemVariables.sh 后面加空格123,再加空格456(這就是執(zhí)行腳本傳遞參數(shù)的方式,按照空格后錄入?yún)?shù),以空格區(qū)分,依次順序錄入);
4、轉(zhuǎn)義
如果我們要打印【$1】或者【$0】這里具有特殊意義的文本該如何處理呢?
來運行shell腳本了,這樣,我們就不用授權(quán),也能執(zhí)行了;執(zhí)行結(jié)果如下圖:
本篇說明內(nèi)容完畢;
三、總結(jié)
歡迎關(guān)注我的
CSDN博客: https://blog.csdn.net/River_Continent
微信公眾號:幕橋社區(qū)
* 知乎:張牧野, https://www.zhihu.com/people/zhang-mu-ye-37-76/activities
* 簡書: https://www.jianshu.com/u/02c0096cbfd3
總結(jié)
以上是生活随笔為你收集整理的【Shell】20天学会shell脚本命令(2)变量的详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 校验身份证的行政区域代码(包含已撤销区域
- 下一篇: PyQt5报错Process finis