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
變數的作用域
-
環境變數
#!/bin/sh # 系統的環境變數 /etc/profile echo $PATH; #子程式中可以使用的變數
-
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