文章目錄
- Shell編程文檔整理
- 一、Shell介紹
- 1.1 簡介
- 1.2 Shell解釋器
- 二、快速入門
- 2.1 編寫Shell腳本
- 2.1.1 創建腳本示例
- 2.1.2 賦予執行權限
- 2.2 執行Shell腳本
- 三、Shell程序:變量
- 3.1 語法格式
- 3.2 變量使用
- 3.3 變量類型
- 四、字符串
- 4.1 單引號
- 4.2 雙引號
- 4.3 獲取字符串長度
- 4.4 提取子字符串
- 4.5 查找子字符串
- 五、Shell程序:參數傳遞
- 5.1 參數傳遞方式
- 5.2 特殊字符
- 5.3 `$*` 和 `$@` 的區別
- 六、Shell程序:運算符
- 6.1 算術運算符
- 6.1.1 **通過`( ( ) )`,`$[ ]`進行算術運算**
- 6.2 關系運算符
- 6.3 邏輯運算符
- 6.4 字符串運算符
- 6.5 文件測試運算符
Shell編程文檔整理
一、Shell介紹
1.1 簡介
Shell 是一個用 C語言編寫的程序,通過 Shell 用戶可以訪問操作系統內核服務。
Shell類似于 DOS 下的 command 和后來的 cmd.exe。
Shell既是一種命令語言,又是一種程序設計語言。
Shell script 是一種為 shell 編寫的腳本程序。
Shell 編程一般指 shell 腳本編程,不是指開發 shell 自身。
1.2 Shell解釋器
Shell 編程跟傳統的編程語言一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Linux 的 Shell 解釋器種類眾多,一個系統可以存在多個 shell,可以通過 cat /etc/shells 命令查看系統中安裝的 shell。
bash 由于易用和免費,在日常工作中被廣泛使用。同時,bash 也是大多數 Linux 系統默認的 Shell。
二、快速入門
2.1 編寫Shell腳本
使用vi編輯器新建一個文件hello.sh(擴展名并不影響腳本執行)
#!/bin/bash
echo "Hello World !"
#!
是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一種Shellecho
命令用于向窗口輸出文本
2.1.1 創建腳本示例
mkdir shelldemo
cd shelldemo
vi hello.sh
內容:
#!/bin/bash
echo "Hello World!"
2.1.2 賦予執行權限
chmod +x ./hello.sh
2.2 執行Shell腳本
執行方式:
./hello.sh
:在當前目錄執行/xx/xxx.sh
:書寫全路徑執行sh /xx/xxx.sh
:作為解釋器參數執行(無需執行權限)source xxx.dh
:可以沒有執行權限
三、Shell程序:變量
3.1 語法格式
變量名=值
命名規則:
- 等號兩邊不能有空格
- 首個字符必須為字母(a-z,A-Z)
- 中間不能有空格,可以使用下劃線(_)
- 不能使用標點符號
- 不能使用 bash 里的關鍵字
3.2 變量使用
your_name="bigdata.com"
echo $your_name
echo ${your_name}
- 花括號可選,用于幫助解釋器識別變量邊界
- 變量可重新定義
readonly
定義只讀變量unset
刪除變量(不能刪除只讀變量)
3.3 變量類型
-
局部變量:僅在當前 shell 實例中有效
-
全局變量(環境變量):所有程序都可訪問
四、字符串
字符串是shell編程中最常用最有用的數據類型,字符串可以單引號,也可以用雙引號,也可以不用引號
4.1 單引號
實例:
skill='linux'
str='I am goot at $skill' # 變量無效
echo $str #輸出
輸出結果: I am goot at $skill
單引號字符串限制:
· 單引號里任何數字字符都會原樣輸出,單引號字符串中的變量是無效的;
· 單引號字串中不能出現單獨一個單引號,但可以成對出現,作為字符串拼接使用。
4.2 雙引號
示例:
skill='linux'
str="I am goot at $skill" # 變量有效
輸出結果: i am goot at linux
4.3 獲取字符串長度
skill='hadoop'
echo ${#skill} # 輸出6
4.4 提取子字符串
str="I am goot at hadoop"
echo ${str:2} # 輸出:am goot at hadoop
echo ${str:2:2} # 輸出:am
4.5 查找子字符串
str="I am goot at hadoop"
echo `expr index "$str" am` # 輸出3
五、Shell程序:參數傳遞
5.1 參數傳遞方式
./shell程序 參數1 參數2 ...
腳本內獲取參數:
$0
:腳本名稱$1
、$2
…:第1、2個參數
執行結果
5.2 特殊字符
符號 | 含義 |
---|---|
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數 |
$$ | 顯示腳本運行的當前進程ID號 |
$! | 最后一個后臺進程ID |
$@ | 所有參數作為列表 |
$? | 上一條命令退出狀態,顯示0則表示沒有錯誤 |
$?:判斷上一條命令是否正確,若輸出為“0”則表示執行成功,非“0”則執行失敗
5.3 $*
和 $@
的區別
- 不加引號時相同
- 加引號時:
"$*"
:所有參數作為一個字符串"$@"
:每個參數作為獨立字符串
六、Shell程序:運算符
6.1 算術運算符
Shell和其他編程語言一樣,支持包括:算術、關系、邏輯、字符串等運算
符。
原生 /bin/bash 不支持簡單的數學運算,但是可以通過其他命令來實現,
例如: expr
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
使用 expr
、$(())
、$[]
val=`expr 2 + 2` #此處需要用反引號,且”2 + 2“之間需要空格
val=$((1+1))
val=$[1+2]
附加內容:read命令
·read -p 提示用戶顯示
·read -n 第一字符數
6.1.1 通過( ( ) )
,$[ ]
進行算術運算
案例1、通過(())
進行算術運算
案例2 通過“$[ ]"進行運算
6.2 關系運算符
運算符 | 含義 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-lt | 小于 |
-gt | 大于 |
-le | 小于等于 |
-ge | 大于等于 |
6.3 邏輯運算符
-a
:雙方都成立(and)表達式1 -a表達式2-o
:單方成立(or)表達式1 -0 表達式2&&
、||
:用于 echo 或條件判斷
6.4 字符串運算符
運算符 | 含義 |
---|---|
-n | 非空字符串 |
-z | 空字符串 |
= | 判斷兩個字符串是否一樣 |
!= | 判斷兩個字符串是否不相等 |
6.5 文件測試運算符
運算符 | 含義 |
---|---|
-f | 存在且是普通文件 |
-d | 存在且是目錄 |
-s | 非空文件 |
-e | 文件存在 |
-r | 可讀 |
-w | 可寫 |
-x | 可執行 |