? ? Shell概述
Shell是一種具備特殊功能的程序,它提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令,并把它送入內核去執行。內核是Linux系統的心臟,從開機自檢就駐留在計算機的內存中,直到計算機關閉為止,而用戶的應用程序存儲在計算機的硬盤上,僅當需要時才被調入內存。Shell是一種應用程序,當用戶登錄Linux系統時,Shell就會被調入內存去執行。Shell獨立于內核,它是連接內核和應用程序的橋梁,并由輸入設備讀取命令,再將其轉為計算機可以理解的機械碼,Linux內核才能執行該命令。
優勢
Shell腳本語言的好處是簡單、易學、易用,適合處理文件和目錄之類的對象,以簡單的方式快速完成某些復雜的事情通常是創建腳本的重要原則,腳本語言的特性可以總結為以下幾個方面:
語法和結構通常比較簡單。
學習和使用通常比較簡單,
通常以容易修改程序的“解釋”作為運行方式,而不需要“編譯。
程序的開發產能優于運行效能。
Shell腳本語言是Linux/Unix系統上一種重要的腳本語言,在Linux/Unix領域應用極為廣泛,熟練掌握Shell腳本語言是一個優秀的Linux/Unix開發者和系統管理員必經之路。利用Shell腳本語言可以簡潔地實現復雜的操作,而且Shell腳本程序往往可以在不同版本的Linux/Unix系統上通用。
Shell編程
基本格式
Shell腳本的文件名后綴通常是.sh (當然你也可以使用其他后綴或者沒有后綴,.sh是為了規范)
程序編寫格式:
[java] view plain copy#!/bin/bash
# 注釋使用#號
代碼示例:
[java] view plain copy//使用vi編輯器編寫shell腳本(a.sh不存在則會新建)
vi a.sh
進入vi編輯模式后編寫執行代碼
[java] view plain copy//固定格式,記住就可以了
#!/bin/bash
//執行的代碼
echo Hello World
賦予權限并執行:
[java] view plain copy//賦予可執行權限
chmod +x a.sh
//執行(調用/bin/bash執行a.sh腳本)
。/a.sh
執行結果:
下面是幾種運行情況:
[java] view plain copya.sh
這樣的話需要保證腳本具有執行權限并且在環境變量PATH中有(。),這樣在執行的時候會先從當前目錄查找。
[java] view plain copy./a.sh
只要保證這個腳本具有執行權限即可
[java] view plain copy/usr/local/a.sh
只要保證這個腳本具有執行權限即可
[java] view plain copybash a.sh
直接可以執行,甚至這個腳本文件中的第一行都可以不引入/bin/bash,它是將hello.sh作為參數傳給bash命令來執行的。
[java] view plain copybash -x /path/to/aa.sh
bash的單步執行
[java] view plain copybash -n /path/to/aa.sh
bash語法檢查
變量
變量不需要聲明,初始化不需要指定類型
變量命名
1、只能使用數字,字母和下劃線,且不能以數字開頭
2、變量名區分大小寫
3、建議命令要通俗易懂
注意:變量賦值是通過等號(=)進行賦值,在變量、等號和值之間不能出現空格。
顯示變量值使用echo命令(類似于java中的system.out) ,加上$變量名,也可以使用${變量名}
例如:
[java] view plain copyecho $JAVA_HOME
echo ${JAVA_HOME}
變量的申明和使用:
變量分類:
Shell變量有這幾類:本地變量、環境變量、局部變量、位置變量、特殊變量。
本地變量:
只對當前shell進程有效的,對當前進程的子進程和其它shell進程無效。
定義:VAR_NAME=VALUE
變量引用:${VAR_NAME} 或者 $VAR_NAME
取消變量:unset VAR_NAME
相當于java中的私有變量(private),只能當前類使用,子類和其他類都無法使用。
比如在一個bash命令窗口下再使用bash,則變成了子進程,本地變量不會被這個子進程所訪問。
環境變量:
自定義的環境變量對當前shell進程及其子shell進程有效,對其它的shell進程無效
定義:export VAR_NAME=VALUE
對所有shell進程都有效需要配置到配置文件中
[java] view plain copyvi /etc/profile
source /etc/profile
相當于java中的protected修飾符,對當前類,子孫類,以及同一個包下面可以共用。
和windows中的環境變量比較類似
自定義的環境變量:
局部變量:
在函數中調用,函數執行結束,變量就會消失
對shell腳本中某代碼片段有效
定義:local VAR_NAME=VALUE
相當于java代碼中某一個方法中定義的局部變量,只對這個方法有效。
位置變量:
比如腳本中的參數:
$0:腳本自身
$1:腳本的第一個參數
$2:腳本的第二個參數
相當于java中main函數中的args參數,可以獲取外部參數。
特殊變量:
$?:接收上一條命令的返回狀態碼
返回狀態碼在0-255之間
$#:參數個數
$*:或者$@:所有的參數
$$:獲取當前shell的進程號(PID)(可以實現腳本自殺)(或者使用exit命令直接退出也可以使用exit [num])
引號
Shell編程中有三類引號:單引號、雙引號、反引號。
‘’單引號不解析變量
[java] view plain copyecho ‘$name’
“”雙引號會解析變量
[java] view plain copyecho “$name”
``反引號是執行并引用一個命令的執行結果,類似于$(。。。)
[java] view plain copyecho `$name`
示例:
評論
查看更多