shell指令碼與變數
shell指令碼的用途:
自動化常用命令
執行系統管理和故障排除
建立簡單的應用程式
處理文字或檔案
shell指令碼編寫格式:
第一行:shebang機制 用#加shell型別開頭
後續可直接跟命令,用命令達到需要的效果即可
如需內容注釋行首加#即可 例如:
#/bin/bash #testcat /etc/passwd shell指令碼執行方法:
bash /絕對路徑
加入$path變數,給指令碼檔案新增執行許可權,然後直接輸入指令碼檔名即可執行
cat /指令碼路徑 | bash ;檢查指令碼語法是否錯誤的方法:
bash -n 加指令碼檔名: 檢查語法是否錯誤,如有錯則列印至終端
bash -x 夾指令碼檔名: 逐步執行指令碼,如遇到錯誤則終止並報錯
shell變數: 變數是指用乙個熟悉的,或者意義明顯的單詞、位元組來給變數另起乙個名字,達到每次使用變數名就可以是其本身作用發揮的功能 shell變數命名法則:
不能使用程式中的保留字 (內部命令)
只能使用數字、字母、下劃線,且不能以數字開頭
見名知意
統一命名規則:駝峰命名法 命名建議: 1. 變數名大寫
區域性變數小寫
函式名小寫
用英文單體、體會實際作用
shell賦值 x=y
例如:
[root@centos6 ~]:name=`hostname`
[root@centos6 ~]:echo $name
centos6.localdomain hostname本身是乙個命令,功能是可以列印出主機名,這裡給hostname定了乙個變數為name ,所以列印 $name 就可以直接顯示出主機名了。 這裡注意因為hostname本身是乙個命令,所以定變數的時候需要用``引起來,才能夠辨別出命令。 同樣的方法也可以用變數來定義另外乙個變數,這個時候就需要用""引起來,是可以辨別變數的,同時引號內需要加變數符號$ ""不加一般也可以,但是變數符$必須加上才能夠辨別 如果定義乙個字元,本身字元就是乙個變數或者命令,可以用''引起來,不辯別任何變數和命令,和什麼都不加效果一樣 以上為普通變數,不可傳遞給子程序 另有環境變數以及位置變數、唯讀變數 環境變數:可傳遞給子程序 環境變數賦值的兩種簡單方法 :
[root@centos7 ~]:export name=`hostname`
[root@centos7 ~]:declare -x name=`hostname`用nev命令或export可顯示所有環境變數。
環境變數一般主要用途在於,定義的環境變數可以在編輯檔案、寫指令碼的介面也可以用
唯讀變數:故名思意,只能宣告及顯示,不可修改和刪除 唯讀變數賦值:
readonly name=`hostname`
或 declare -r name=`hostname`readonly -p 命令可以顯示所有定義了的唯讀變數 位置變數:位置變數一般在一些shell指令碼中使用 ,一般shell有自帶唯讀變數$1,$2,$3··· $*,$#,$0
$1 指指令碼後跟的第乙個引數、
$2 指指令碼後跟的第二個引數,以此類推
$* 指指令碼後跟的所有引數
$# 指指令碼後跟的引數個數
$0 指指令碼本身的絕對路徑例如
[root@centos7 data] cat /data/shell.sh
echo $1
[root@centos7 data] bash /data/shell.sh centos6
centos6/data/shell.sh是乙個指令碼,功能是列印出$1,而$1是乙個位置變數,表示指令碼後跟的第乙個引數centos6 ,所以指令碼實現的功能就是列印centso6 還有一些系統本身的特殊變數:
$$ 程序本身pid
$pathpid 程序本身pid
$ppid 父程序pid
$_ 上乙個命令的結果以上普通變數、環境變數、唯讀變數賦值只本次登陸生效,如需永久生效需寫入配置檔案: 全域性生效: /etc/profile 只對單個賬戶生效: ~/bash_profile
補充一些括號以及引號的用法: '' 單括號,最單純的引號,不辯別命令,也不辯別變數 "" 雙括號 稍微聰明一點 可以辨別變數,但不辯別命令 `` 反向單引號 ,最聰明的引號,可以辨別變數,也辨別命令 引用命令也可以用$( ) ( )中括號,可以在中括號內命名變數,然後跟子命令,只對括號內的子命令生效 花括號,在花括號內命令變數,無需子命令,後續也繼續生效
至此
shell指令碼(變數)
1 定義及賦值 格式 變數名 變數值 等號兩邊沒有空格 2 引用 檢視 變數 格式 變數名 例 title shaodianlingxing echo title 輸出 shaodianlingxing 3 雙引號 功能 允許引用 轉義 例如 echo title group 輸出 shaodian...
shell指令碼 變數
1 shell 指令碼中變數分為三種,區域性變數,環境變數,shell變數。區域性變數 定義在函式內部 基本型別 local num hello world 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。如果同名,shell函式定義的loc...
shell指令碼變數
環境變數和本地變數,環境變數是具有全域性屬性的。在互動式shell下面定義變數 value 100 這定義的即為本地變數,如果要將其變成環境變數則需要export value 匯出環境變數,取消環境變數則可以使用unset命令。環境變數是可以被子程序繼承的更是可以被子子孫孫都繼承的。環境變數在程式替...