Shell 入門系列 (一): 變數

lzw123發表於2019-10-22

shell 中的變數是弱型別的, 可以像PHP 中一樣去使用, 和PHP變數的區別在與 函式中的變數預設為全域性變數. 同時還有環境變數的概念.

變數定義

  • 定義方式: 等號旁邊不能有空格
  • 變數名: 變數名只能包含英文字母/數字/下劃線, 變數名不能以數字開頭, 不能使用bash裡的關鍵字
    #!/bin/sh
    #定義變數
    name='michael'
    age=18
    #只讀變數, 變數值不能被修改, 修改則報錯
    readonly gender='男'
    #變數使用, 加花括號是為了識別變數邊界, 如字串拼接等 skill=Java  echo '${skill}Script'
    echo $name
    echo ${age}
    #變數銷燬, unset 不能刪除只讀變數,會報錯
    unset age
    unset gender
    echo $age
    #變數修改
    name='handsome'

變數型別

  • 字串
    字串變數定義
    #!/bin/sh
    #定義一個字串變數
    str='aaa'
    #操作 todo

    字串變數的使用方法

    #!/bin/bash
    todo
  • 數字
  • 陣列
    #!/bin/sh
    # 陣列的定義: array_name=(value0 value1 value2 value3)
    my_skill=('php','laravel','mysql','linux','html/css','其他技術')
    # 列出 /etc 下的檔案和資料夾,當做陣列賦值給etc_file 變數, 並遍歷陣列
    etc_files=`ls /etc`
    for f in $etc_files; do
    echo $f
    done
    ## 上面例子可以使用 for file in $(ls /etc)
    # 陣列的使用 todo

變數的作用域

  1. 環境變數

    #!/bin/sh
    # 系統的環境變數 /etc/profile
    echo $PATH;
    #子程式中可以使用的變數
  2. shell 指令碼變數
    指令碼內定義的變數, 退出即銷燬
    例1: 函式外呼叫函式內定義的變數

    #!/bin/sh
    #函式外呼叫函式中定義的變數
    first_func()
    {
    # 定義或重新賦值一個全域性變數, 函式執行後這個變數在函式外部可用
    a=1
    # 設定一個函式內部的區域性變數
    local b=2
    }
    first_func
    echo $a
    # 以下沒有輸出
    echo $b

    輸出 1

例2: 函式內呼叫函式外定義的變數

#!/bin/sh
# 函式外呼叫函式中定義的變數
second_func()
{
    # 設定一個區域性變數
    local b=2
    echo $b
}
b=3
second_func
echo $b

輸出 2 3

相關文章