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