Linux Shell 編程

爲什麼要學習 Shell 編程

1)Linux 運維工程師在進行服務器集羣管理時,需要編寫 Shell 程序來進行服務器管理。
2)對於 JavaEE 和 Python 程序員來說,工作的需要,你的老大會要求你編寫一些 Shell 腳本進行程序或者是服務器的維護,比如編寫一個定時備份數據庫的腳本。
3)對於大數據程序員來說,需要編寫 Shell 程序來管理集羣。

Shell 是什麼
Shell 是一個命令行解釋器,它爲用戶提供了一個向 Linux 內核發送請求以便運行程序的界面系統級程序,用戶可以用 Shell 來啓動、掛起、停止甚至是編寫一些程序.

腳本格式要求

腳本以#!/bin/bash 開頭
腳本需要有可執行權限

在這裏插入圖片描述
腳本的常用執行方式
•方式 1(輸入腳本的絕對路徑或相對路徑)
1)首先要賦予 helloworld.sh 腳本的+x 權限
2)執行腳本
在這裏插入圖片描述
•方式 2(sh+腳本),不推薦
說明:不用賦予腳本+x 權限,直接執行即可
在這裏插入圖片描述
shell 的變量
1)Linux Shell 中的變量分爲,系統變量和用戶自定義變量。
2)系統變量:HOMEHOME、PWD、SHELLSHELL、USER 等等比如: echo $HOME 等等…
1)定義變量:變量=值
2)撤銷變量:unset 變量
3) 聲明靜態變量:readonly 變量,注意:不能 unset
在這裏插入圖片描述
定義變量 A
撤銷變量 A
在這裏插入圖片描述
聲明靜態的變量 B=2,不能 unset
在這裏插入圖片描述

定義變量的規則

1)變量名稱可以由字母、數字和下劃線組成,但是不能以數字開頭。
2)等號兩側不能有空格
3)變量名稱一般習慣爲大寫

將命令的返回值賦給變量(重點)
1)A=ls -la 反引號,運行裏面的命令,並把結果返回給變量 A
2)A=$(ls -la) 等價於反引號
在這裏插入圖片描述
設置環境變量
1)export 變量名=變量值 (功能描述:將 shell 變量輸出爲環境變量)
2)source 配置文件 (功能描述:讓修改後的配置信息立即生效)
3)echo $變量名 (功能描述:查詢環境變量的值)
在這裏插入圖片描述
1)在/etc/profile 文件中定義 TOMCAT_HOME 環境變量
在這裏插入圖片描述
2)查看環境變量 TOMCAT_HOME 的值
echo $TOMCAT_HOME
3) 在另外一個 shell 程序中使用 TOMCAT_HOME
在這裏插入圖片描述
注意:在輸出 TOMCAT_HOME 環境變量前,需要讓其生效
source /etc/profile

位置參數變量
當我們執行一個 shell 腳本時,如果希望獲取到命令行的參數信息,就可以使用到位置參數變量,比如 : ./myshell.sh 100 200 , 這個就是一個執行 shell 的命令行,可以在 myshell 腳本中獲取到參數信息

$n (功能描述:n 爲數字,$0 代表命令本身,$1-99 代表第一到第九個參數,十以上的參數,十以上的參數需要用大括號包含,如{10})
* (功能描述:這個變量代表命令行中所有的參數,*把所有的參數看成一個整體)
@@(功能描述:這個變量也代表命令行中所有的參數,不過@把每個參數區分對待)
$#(功能描述:這個變量代表命令行中所有參數的個數)

在這裏插入圖片描述
在這裏插入圖片描述
預定義變量
就是 shell 設計者事先已經定義好的變量,可以直接在 shell 腳本中使用

$$ (功能描述:當前進程的進程號(PID))
$! (功能描述:後臺運行的最後一個進程的進程號(PID))
$? (功能描述:最後一次執行的命令的返回狀態。如果這個變量的值爲 0,證明上一個命令正確執行;如果這個變量的值爲非 0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。

在這裏插入圖片描述

運算符

  1. (())((運算式))”或“[運算式]”
    2)expr m + n
    注意 expr 運算符間要有空格
    3)expr m - n
    4)expr *, /, % 乘,除,取餘

  2. $((運算式))
    在這裏插入圖片描述

) $[運算式
在這裏插入圖片描述
3)expr
在這裏插入圖片描述
在這裏插入圖片描述
條件判斷

[ condition ](注意 condition 前後要有空格)
#非空返回 true,可使用$?驗證(0 爲 true,>1 爲 false)

= 字符串比較
-lt 小 於
-le 小於等於
-eq 等 於
-gt 大 於
-ge 大於等於
-ne 不等於
2) 按照文件權限進行判斷
-r 有讀的權限 [ -r 文件 ]
-w 有寫的權限
-x 有執行的權限
3)按照文件類型進行判斷
-f 文件存在並且是一個常規的文件
-e 文件存在
-d 文件存在並是一個目錄

1:“ok"是否等於"ok”
在這裏插入圖片描述
2 :23 是否大於等於 22
在這裏插入圖片描述
3 :/root/install.log 目錄中的文件是否存在
在這裏插入圖片描述

流程控制

if 判斷

if [ 條件判斷式 ];then
     程序
fi

或者

if [ 條件判斷式 ]
  then
       程序
elif [條件判斷式]
   then
        程序
fi

注意事項:(1)[ 條件判斷式 ],中括號和條件判斷式之間必須有空格 (2) 推薦使用第二種方式

在這裏插入圖片描述
case 語句

case $變量名 in
"值 1")
如果變量的值等於值 1,則執行程序 1
;;
"值 2")
如果變量的值等於值 2,則執行程序 2
;;
…省略其他分支…
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac

在這裏插入圖片描述
for 循環

for 變 量 in 值 1 值 2 值 3…
   do
      程序
done

在這裏插入圖片描述

for (( 初始值;循環控制條件;變量變化 ))
  do
     程序
done

在這裏插入圖片描述

while 循環

while [ 條件判斷式 ]
   do
      程序
 done

在這裏插入圖片描述
read 讀取控制檯輸入
read(選項)(參數)
選項:
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了。。參數
變量:指定讀取值的變量名

在這裏插入圖片描述

函數

shell 編程和其它編程語言一樣,有系統函數,也可以自定義函數。系統函數中,我們這裏就介紹兩個。

系統函數
•basename 基本語法
功能:返回完整路徑最後 / 的部分,常用於獲取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename 命令會刪掉所有的前綴包括最後一個(‘/’)字符,然後將字符串顯示出來。
選項:
suffix 爲後綴,如果 suffix 被指定了,basename 會將 pathname 或 string 中的 suffix 去掉。

•dirname 基本語法
功能:返回完整路徑最後 / 的前面的部分,常用於返回路徑部分
dirname 文件絕對路徑 (功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),然後返回剩下的路徑(目錄的部分))

在這裏插入圖片描述
在這裏插入圖片描述
自定義函數

•基本語法
[ function ] funname[()]
{
    Action;
   [return int;]
}

調用直接寫函數名:funname	[值]

在這裏插入圖片描述

Shell 編程綜合案例
需求分析
1)每天凌晨 2:10 備份 數據庫 atguiguDB 到 /data/backup/db
2)備份開始和備份結束能夠給出相應的提示信息
3)備份後的文件要求以備份時間爲文件名,並打包成 .tar.gz 的形式,比如:
2018-03-12_230201.tar.gz
4)在備份的同時,檢查是否有 10 天前備份的數據庫文件,如果有就將其刪除。

編寫一個 shell 腳本。思路分析:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章