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 20:45
下一篇 2016-08-21 20:45

相關推薦

  • 淺談TCP三次握手和四次分手

          TCP(Transmission Control Protocol傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議提供可靠的連接服務,采用三次握手確認建立一個連接,比如我們去訪問一個網站,從輸入網址到頁面顯示我們所想要瀏覽的內容,這個過程其中就包含了小編要說的三次握手和四次揮手。 一、首先我們來了解…

    2017-09-02
  • MySQL基礎入門詳解

    MySQL MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下公司。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。 想要使用MySQL來存儲并操作數…

    2017-09-16
  • N21_第09周_shell腳本

    作業題目: 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 預置條件: [root@zhouyong148 N21_09]# cat /etc/passwd root:x:0:0:root:/root:/b…

    Linux干貨 2016-11-14
  • N25-第十一周作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。   以Bob和Alice安全通訊為例:     Bob<———>Alice    1. Bob要和Alice安全通信首先要取得對方的公鑰,即對方的證書,并驗證證書的合法性。驗證過程和內容: &n…

    Linux干貨 2017-03-20
  • 國際標準OSI七層模型和事實標準TCP/IP四層模型

    我們知道,標準分為三種:國際標準、國家標準和事實標準。那我們學習的兩個重要模型:OSI和TCP/IP模型分別屬于國際標準和事實標準,接下來我們來總結一下兩種模型的分層及功能還有異同: 一:國際標準OSI模型 OSI:(Open System Interconnect) 開放系統互連,總共分為七層,從下到上順序為:物理層(physical)、數據鏈路層(dat…

    2017-09-02
  • 第一天課程內容

    一 連接VNC 主機名:172.20.0.100 二 課堂資源下載 ftp://172.16.0.1 三 博客作業 ??? 優秀示例 www.yulongjun.com ??? 博客地址 www.www58058.com ??? 作業要求 1.每周一篇或更多,整理當周內容。 2.老師周五發鏈接地址,提交博客鏈接。 四 職業發展線路 運維 > Pytho…

    Linux干貨 2018-03-26
欧美性久久久久