日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Shell】20天学会shell脚本命令(2)变量的详解

發(fā)布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Shell】20天学会shell脚本命令(2)变量的详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、問題

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的變量分為兩類:

  • 局部變量:僅在本shell內(nèi)有效;
  • 環(huán)境變量:在本Linux系統(tǒng)內(nèi)有效;
    這個和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)容如下:

    #!/bin/bash #study varialbes A=1 echo "$A"

    運行后的結(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)容:

    echo "當(dāng)前程序名稱為:$0" echo "當(dāng)前系統(tǒng)第1個參數(shù)為:$1" echo "當(dāng)前系統(tǒng)第2個參數(shù)為:$2" echo "當(dāng)前系統(tǒng)的所有參數(shù)為:$*" echo "當(dāng)前系統(tǒng)的執(zhí)行狀態(tài)為:$?" echo "當(dāng)前程序的參數(shù)個數(shù)為:$#" echo "當(dāng)前用戶的ID:$UID" echo "當(dāng)前所在的目錄為:$PWD"

    執(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】這里具有特殊意義的文本該如何處理呢?

    echo "\$1" echo "\$#"

    來運行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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。