shell-變量

bash中變量的種類

?根據變量的生效范圍等標準:
    本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效

    環境變量:生效范圍為當前shell進程及其子進程

    局部變量:生效范圍為當前shell進程中某代碼片斷(通常指函數)

    位置變量:$1, $2, ...來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數

        注:腳本運行是在當前shell的子shell下運行的,如有(command)括號中的再開一個子shell,腳本shell之下開啟的子shell,不可以調用的其他腳本的本地變量

    特殊變量:$?, $0, $*, $@, $#

本地變量

變量賦值:name=‘value’,

可以使用引用value:
    (1) 可以是直接字串; name=“root"
            name=var
            name=“xxx xxx  xx”多個字符串中間有空格的需要用引號如果不引用其他變量或引用命令的話單雙引號都可以。
    (2) 變量引用:
        $name, ${name} 
                $a
                $b
                $ab
                ${a}b

        name="$USER" 通過引用起它變量的值賦值
    (3) 命令引用:name=`COMMAND`, name=$(COMMAND)

            注:可以多行內容賦值到一個變量。

變量引用:${name}, $name
    "":弱引用,其中的變量引用會被替換為變量值
    '':強引用,其中的變量引用不會被替換為變量值,而保持原字符串

            "弱引用----雙引號
            [root@localhost ~]# echo "echo $USER"
            echo root

            ''強引用------單引號
            [root@localhost ~]# echo 'ehco $USER'
            ehco $USER

            ``命令引用----~下的符號
            [root@localhost ~]# echo `echo $USER`
            Root

顯示已定義的所有變量:set

刪除變量:unset name 腳本運行完畢要釋放變量。養成良好習慣。

環境變量

環境變量的使用必須先聲明
變量聲明、賦值:
    export name=VALUE
    declare -x name=VALUE

    declare - name=number 聲明變量為數值型
變量引用:$name, ${name}

顯示所有環境變量:
    export
    env
    printenv

刪除:unset name

bash有許多內建的環境變量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

    聲明環境變量后,shell的子進程及其子進程的子進程都可使用。
    新的終端后就不可以使用。

注
source 腳本 和 . 腳本 執行腳本效果是一樣的,都是在當前shell下執行。
當前shell下的用戶可調用該腳本的本地變量

通過 bash 腳本和直接執行 ./腳本 效果是一樣的,都是在當前shell下開啟子shell后運行的。
當前shell不可以調用該腳本定義的本地變量。

只讀和位置變量

只讀變量:只能聲時,但不能修改和刪除,不能使用unset撤銷。
    readonlyname=VLAUE
    declare -r name=VLAUE

        可以與-x一起使用 declare -rx name=VALUE 只讀的環境變量

位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數
    $1, $2, ...:對應第1、第2等參數,shift [n]換位置
    $0: 命令本身,腳本名稱。
    $*: 傳遞給腳本的所有參數,全部參數合為一個字符串
    $@: 傳遞給腳本的所有參數,每個參數為獨立字符串
    $#: 傳遞給腳本的參數的個數
        $@ $* 只在被雙引號包起來的時候才會有差異

            [root@yangyouwei ~]# ./test1.sh a b
            first a b
            secd 
            all a b
            ========
            first a
            secd b
            all a b

            [root@yangyouwei ~]# cat test1.sh 
            #!/bin/bash
            ./test2.sh "$*"
            echo ========
            ./test2.sh "$@"

            [root@yangyouwei ~]# cat test2.sh 
            #!/bin/bash
            echo first "$1"
            echo secd "$2"
            echo all "$*"

shift

位置參數可以用shift命令左移。比如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。不帶參數的shift命令相當于shift 1。

腳本test1加上參數a和b 調用腳本test2
    test1中
            test2運行兩次但是調用的 參數不同
            (雖然某些情況下$*和$@效果是一樣的,在這里這兩個變量的值作為test2的參數,參與test2的執行。)

示例:判斷給出的文件的行數

    linecount="$(wc-l $1| cut -d' ' -f1)"
    echo "$1 has $linecountlines."

declare

-i 聲明為整數

-a 聲明為數組

-f 聲明為函數

-r 聲明為只讀

local 局部變量

定義局部變量
多用于函數內部的變量定義。定義后該變量只在該函數體內部生效。

原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/38465

(0)
yywyyw
上一篇 2016-08-21
下一篇 2016-08-21

相關推薦

  • 以水滸為例解釋文件權限

    關于文件權限的內容學起來比較繞,稍不注意就會把自己繞暈,這時候不如找一個例子來記憶,這樣記起來比較容易而且還會記憶深刻,接下來就以水滸為例解釋下關于文件權限方面的內容 桃園三結義,兄弟三人組成一個組,選劉備當大哥,兄弟三人都在這個組里 兄弟三人還是居無定所的,要給劉關張兄弟三人造個房子,給兄弟三人一個容身之所,而且給兄弟三人一人一個房間   但建好…

    2017-07-30
  • 選擇判斷專題腳本編程_第九周練習

    Q1:寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i y=0 declare -i n=0 for i in $(cut…

    Linux干貨 2016-12-25
  • MBR分區和GPT分區詳解

    什么是磁盤分區?               磁盤分區是使用分區編輯器(partition editor)在磁盤上劃分幾個邏輯部分,盤片一旦劃分成數個分區(Partition),不同類的目錄與文件可以存儲進不同的分區。越多分區,也就有更多不同的地方,可以將文件的性質區分得更細,按…

    Linux干貨 2016-08-29
  • shell編程循環語法作業

    判斷/var/目錄下所有文件的類型 [root@www sh.log]# cat typefile.sh  #!/bin/bash #author:DYW #顯示目錄下文件類型 if [ $# -lt 1 ];then echo "Please&nb…

    Linux干貨 2016-08-21
  • VSFTPD+PAM+[基于文件虛擬用戶認證 | 基于MYSQL虛擬用戶認證]

    VSFTPD+PAM+[基于文件虛擬用戶認證 | 基于MYSQL虛擬用戶認證] VSFTPD+PAM+[基于文件虛擬用戶認證 | 基于MYSQL虛擬用戶認證] 一、實驗環境 二、實驗步驟 1、通過mysql數據庫方式虛擬用戶認證 1.1數據庫配置 1.2FTP配置 1.3測試 2、通過文件方式進行虛擬用戶認證 一、實驗環境 CentOS 6.7+vsftpd…

    Linux干貨 2016-04-18
  • LINUX磁盤及文件系統管理

    LINUX磁盤及文件系統管理 cpu,Memory(RAM),I/O I/O:Disks,Entercard    Disks:持久存儲數據       接口類型:        IDE(ata):并…

    Linux干貨 2016-08-29
欧美性久久久久