文章目錄
歡迎訪問筆者個人技術博客:http://rukihuang.xyz/
一、爲什麼要學習Shell編程
- Linux運維工程師在進行服務器集羣管理時,需要編寫Shell程序來進行服務器管理。
- 對於JavaEEhe Python程序員來說,是工作的需要,如要求編寫一些Shell腳本進行程序或服務器的維護。
- 對於大數據程序員來說,需要編寫Shell程序來管理集羣。
二、Shell是什麼
- Shell是一個命令行解釋器,它爲用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用Shell來啓動、掛起、停止甚至是編寫一些程序。
三、Shell腳本的快速入門
3.1 腳本格式要求
- 腳本以
#!/bin/bash
開頭 - 腳本需要有可執行權限
3.2 編寫第一個Shell腳本
-
創建一個Shell腳本,輸出一個Hello world
-
步驟如下:
- 先創建一個
myshell.sh
文件,並輸入命令
- 賦予可執行權限
- 執行,相對路徑和絕對路徑都可以
四、Shell變量
4.1 Shell變量的介紹
- Linux Shell變量分爲:系統變量和用戶自定義變量
- 系統變量:
$HOME
$PWD
$SHELL
$USER
- 顯示當前shell中所有的變量:
set
4.2 Shell變量的定義
4.2.1 基本語法
- 定義變量:
變量=值
- 撤銷變量:
unset 變量
- 聲明靜態變量:
readonly 變量=值
(靜態變量是不能unset
的)
4.2.2 定義變量的規則
- 變量名稱可以由字母、數字、下劃線組成,但是不能以數字開頭
- 等號兩側不能有空格
- 變量名稱一般習慣爲大寫
4.2.3 將命令的返回值賦給變量
- A=
ls -l 目錄名
。反引號(這裏編程代碼塊了) A=$(ls -l 目錄名)
,$
等價於反引號
4.3 設置環境變量
4.3.1 基本語法
export 變量名=變量值
:將shell變量輸出爲環境變量source 配置文件
:讓修改後的配置信息立即生效echo $變量名
:查詢環境變量的值
4.3.2 快速入門
- 在
/etc/profile
文件中定義TOMCAT_HOME
環境變量 - 查看環境變量
TOMCAT_HOME
的值- 讓其生效才能查看:
source /etc/profile
- 讓其生效才能查看:
- 在另外一個shell程序中使用
TOMCAT_HOME
- linux中的多行註釋
:<<要註釋的內容!
4.4 位置參數變量
4.4.1 介紹
- 當執行一個shell腳本時,如果希望獲取到命令行的參數信息,就可以使用到位置參數變量
- 如:
./myshell.sh 100 200
,可以在myshell
腳本中獲取到這個命令行所包含的信息
- 如:
4.4.2 基本語法
$n
:n爲數字,$0
代表命令本身,$1
-$9
代表第一到第九個參數,十以上的參數,需要用大括號包含,${10}
$*
:這個變量代表命令行中所有的參數,把所有的參數看做一個整體$@
:這個變量也代表命令行中的所有參數,把每個參數區分對待$#
:這個變量代表命令行中所有參數的個數
4.4.3 應用實例
- 編寫一個shell腳本positinoPara.sh,在腳本中獲取到命令行的各個參數信息
4.5 預定義變量
4.5.1 基本介紹
- shell事先已經定義好的變量,可以直接在shelle腳本中使用
4.5.2 基本語法
$$
:當前進程的進程號(PID)$!
:後臺運行的最後一個進程的進程號(PID)$?
:最後一次執行的命令的返回狀態。- 如果這個變量的值爲0,證明上一個命令正確執行;
- 如果這個變量的值爲非0,則證明上一個命令執行不正確。
4.6 運算符
4.6.1 基本介紹
- 在shell中進行運算操作
4.6.2 基本語法
$((運算式))
或$[]
expr m + n
- 注意expr運算符間要有空格
\*
/
%
:乘、除、取餘
4.7 條件判斷
4.7.1 判斷語句 基本語法
[ condition ]
:condition前後都要有空格- 非空返回
true
,可使用$?
驗證(0爲true
,>1爲false
)
- 非空返回
- 應用實例
[ nihao ] | true |
---|---|
[ ] | false |
4.7.2 常用判斷條件
兩個整數的比較
=
:字符串比較-lt
:小於-le
:小於等於-eq
:等於-gt
:大於-ge
:大於等於-ne
:不等於
按照文件權限進行判斷
-r
:有讀的權限-w
:有寫的權限-x
:有執行的權限
按照文件類型判斷
-f
:文件存在並且是一個常規的文件-e
:文件存在-d
:文件存在並且是一個目錄
4.7.3 應用實例
- "ok"是否等於“ok”
- 23是否大於等於22
/root/install.log
目錄中的文件是否存在
4.8 流程控制
4.8.1 if 判斷
- 基本語法
if[ 條件判斷式 ]
then
程序
elif[ 條件判斷式 ]
then
程序
fi
- 注意:
[ 條件判斷式 ]
中條件判斷式兩邊都有空格
4.8.2 case 語句
- 基本語法
case $變量名 in
"值1")
如果變量的值等於值1,則執行程序1
;;
"值2")
如果變量的值等於值2,則執行程序2
;;
"值3")
如果變量的值等於值3,則執行程序3
;;
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac
4.8.3 for循環
- 基本語法1
for 變量 in 值1 值2 值3
do
程序
done
- 基本語法2
for ((初始值;循環控制條件;變量變化))
do
程序
done
4.8.4 while循環
- 基本語法
while [ 條件判斷式 ]
do
程序
done
4.9 read讀取控制檯輸入
4.9.1 基本語法
-
read [選項] [參數]
-
選項:
-p
:指定讀取值時的提示符-t
:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待
-
參數:
變量名
:指定讀取值的變量名
4.10 函數
4.10.1 函數介紹
- shell編程和其他編程語言一樣,有系統函數,也可以自定義函數。
4.10.2 系統函數
basename
- 基本語法1:
basename [pathname] [suffix]
- 功能:返回完整路徑最後
/
的部分,常用於獲取文件名;若指定後綴,就會把後綴刪除
- 功能:返回完整路徑最後
dirname
- 基本語法:
dirname [pathname]
- 功能:返回完整路徑最後
/
的前面部分,常用於返回路徑部分
- 功能:返回完整路徑最後
4.10.3 自定義函數
- 基本語法
[function] funname[()]
{
Action;
[return int;]
}
- 調用直接寫函數名:
funname[值]