day075 SHELL_流程控制&代碼發佈

awk命令

  • 強大的文檔編輯工具,可以以行也可以以列來標記文檔

格式

awk 參數 ‘動作’ 文檔

常用參數

-F :指定行的分隔符

常用動作

  • print :顯示內容
  • $0,表示當前行的所有看列
  • $n,表示當前行的第n列

示例:

模板文件 01_awk.txt
nihao awk1 awk2 awk3
nihao awk4 awk5 awk6

1.輸出第一列的內容
awk '{print $1}' 01_awk.txt

nihao 
nihao

2.輸出第13兩列的內容
awk '{print $1,$3}' 01_awk.txt

nihao awk2
nihao awk5

3.輸出第13兩列的內容,並且顯示行號
awk '{print NR, $1, $3}' 01_awk.txt

1 nihao awk2
2 nihao awk5

4.輸出第一行的第一列和第三列內容
awk 'NR==1 {print $1, $3}' 01_awk.txt

nihao awk2

5.模板文件202_awk.txt
you said:lallala  111
i say:hehehe 222

輸出以‘:’分隔的第一列和第2列內容:
之前的語句:
awk '{print $1, $2} 02_awk.txt'

you said:lallala
i say:hehehe

會發現不符合要求,此時需要使用參數-F
awk -F ':' '{print $1,$2}' 02_awk.txt

you said lallala  111
i say hehehe 222

find命令

  • 用來查找文件的命令

格式

find 路徑 選項 關鍵字

路徑
  • 路徑可以使相對路徑,也可以是絕對路徑
選項
  • -name :以文件名查找
  • -type :以文件類型來找
    • d:目錄
    • f:普通文件
    • p:管道文件
    • l:符號鏈接文件
  • perm 按照文件權限來查找文件。
  • user 按照文件屬主來查找文件。
  • group 按照文件所屬的組來查找文件。
關鍵字
  • 使用 -name選項查找時,需要加引號,可以使用正則

實例

# 查找當前目錄下的所有 .txt文件
find ./ -name '*.txt'

# 查找桌面上的所有普通文件
find /Users/.../Desktop/ -type f

# 查找桌面上的所有普通文件中爲.py類型的文件
find /Users/.../Desktop/ -type f -name '*.py'

* 注意,查找爲遞歸查找

流程控制

分支

單分支if

格式

if [ 條件 ]
then
    指令
fi

示例

#!/bin/bash
# 單if
if [ '$1' == 'nan' ]
then 
 echo "男"
fi

雙分支if

格式

if [ 條件 ]
then
    指令1
else
    指令2
fi

示例

#!/bin/bash
# 雙if
if [ "$1" == "nan" ]
then
    echo "男"
else
    echo "nv"
fi

多分支if

格式

if [ 條件1 ]
then
    指令1
elif [ 條件2 ]
then
    指令2
else
    指令3
fi

示例

#!/bin/bash
if [ "$1" == "nan" ]
then
    echo "男"
elif [ "$1" == "nv" ]
then
    echo "女"
else
    echo "性別不明"
fi

case

格式

case 變量名 in1)
        指令1
            ;;
    值2)
        指令2
            ;;
        ...
    值n)
        指令n
            ;;
    esac

示例

              #!/bin/bash
                # case 服務啓動腳本
                case "$1" in
                  "start")
                    echo "服務啓動中..."
                    ;;
                  "stop")
                    echo "服務關閉中..."
                    ;;
                  "restart")
                    echo "服務重啓中..."
                    ;;
                  *)
                    echo "腳本 $0 使用方式: /bin/bash $0 [ start|stop|restart ]"
                    ;;
                esac

循環

for

格式

forin 列表
do 
  執行語句
down

示例

#!/bin/bash
# for 結構
# 輸出當前目錄下的所有文件名
for i in $(ls)
 do
  echo "當前目錄下有文件${i}"
 done

while

格式

while [ 條件 ]
do
  執行語句
done

示例

#!/bin/bash
# while語句的使用
# 輸出1,2,3,4四個數字
a=1
while [ "${a}" -lt 5 ]
do 
 echo "${a}"
 a=$((a+1))
done

until

格式

until [ 條件 ]
do
  執行語句
done 

示例

#!/bin/bash
# 測試until的語法
# 輸出1,2,3,4四行數字
a=1
until [ "${a}" -eq 5 ]
do 
  echo "${a}"
  let a=a+1
done

場景:

        單if:    一條件 一結果         雙if:    一條件     兩結果
        多if:    n 條件    n+1結果           case:   生產服務用
        for:    遍歷列表                while:  條件滿足,循環
        until:  條件不滿足,循環

函數

簡單函數

函數的定義和調用

格式:
函數名(){
    函數體
}

調用函數
函數名

示例:

#!/bin/bash
# 函數的定義和調用
# 輸出12345
fun(){
 echo "12345"
}

函數傳參

函數名傳參

格式
函數名(){
    函數體 $n
}
調用函數:
    函數名 參數
示例
#!/bin/bash
# 測試函數傳參
# 給函數輸入’Michael‘ 並且輸出
fun1(){
  echo "$1"
}

fun1 "Michael"

腳本傳參

格式
腳本傳參數
/bin/bash 腳本名 參數
函數體調用參數

函數名(){
  函數體 $1
}

函數名 $1
示例
#!/bin/bash
# 測試腳本傳參
# 給腳本傳遞‘Michael’,輸出
fun2(){
  echo $1
} 

fun2 $1

注意此處函數內調用的依然是函數名傳給他的參數
測試,函數名傳遞的參數和腳本傳遞的不同即可
#!/bin/bash
# 測試腳本傳參
# 給腳本傳遞‘Michael’,輸出 jackson
fun2(){
  echo $1
} 

fun2 'jackson'

代碼發佈

什麼是代碼發佈

  • 代碼,平臺,效果
  • 是指將功能完善,測試完畢的代碼,上傳部署到在有公網ip的服務器上(可以是遠程虛擬主機,如阿里雲,騰訊雲,等各種雲),通過瀏覽器/移動端可以查看展示效果的過程

發佈方式

  • 手動發佈
  • 自動發佈,手工是自動發佈的前提

發佈的流程

  • 1.獲取代碼
  • 2.打包代碼
  • 3.傳輸代碼
  • 4.關閉服務
  • 5.解壓代碼
  • 6.放置代碼
  • 7.啓動服務
  • 8.測試效果
  • 9.正式發佈代碼

流程詳解

1.獲取代碼

從哪裏獲取?

  • 代碼倉庫獲取
    • 代碼倉庫有集中式的SVN和分佈式的git
    • svn的幾乎所有的操作命令都需要讓客戶機和主機保持網絡連接狀態
    • git是每一臺客戶機都可以有完整的代碼倉庫,都可以充當主機,不要與所謂的主機保持鏈接
    • 需要考慮倉庫的訪問權限和代碼的訪問權限(開發,管理,查看)

提交的方式

  • 以版本號的形式提交

2.打包代碼

  • 將所有的代碼統一打包,方便整體快速傳輸, 使用 tar命令
  • 常見的打包方式:
    • windows:zip, rar
    • linux: tar, zip

3.傳輸代碼

  • 將打包後的代碼傳到需要部署的服務器上
  • 常見的傳輸方式
    • 有網:scp, git, ftp
    • 無網:U盤,硬盤

4.關閉應用

  • 停止與發佈的相關代碼有關的服務,不能關閉網站
  • 注意關閉應用要由近到遠,即先關閉離用戶最近的頁面,發出友好提示,再關閉後端的服務,這樣是考慮到用戶體驗,否則,用戶體驗會很糟糕。

5.解壓代碼

  • 將傳遞過來的壓縮代碼包進行解壓處理
  • 使用tar xf

6.放置代碼

  • 將新的代碼替換舊的代碼
  • 注意,爲了防止新代碼可能會有問題,導致該功能塊沒有優化好,反而不能像之前一樣正常運行,需要先進行備份舊代碼,再放置新代碼
  • 使用rm -rf + data 時間戳進行備份

7.打開應用(相關服務)

  • 只打開之前關閉的應用(相關服務)
  • 注意打開的順序是先遠後近,因爲要讓用戶感覺在點點擊相關服務頁面的時候,就有反應,這就需要先把後端的相關服務開起來

8.測試

  • 使用瀏覽器或者移動端進行各項功能性,穩定性測試

9.正式發佈代碼

  • 宣佈正式發佈代碼

技術關鍵點

文件的壓縮和解壓縮

壓縮

  • tar zcvf 壓縮後的文件名 將要壓縮的文件

  • 示例

tar zcvf ./scripts.tar.gz ./scripts

解壓縮

  • tar xf 壓縮後的文件名
  • 示例

tar xf scripts.tar.gz

  • 查看壓縮文件的內容: zcat 壓縮文件(以二進制的形式查看)

zcat scripts.tar.gz linux中可正常查看

文件的傳輸

  • 格式:scp 要傳輸的文件 要放置的位置
  • 關鍵點:因爲scp的底層是SSH,所以遠端主機都需要用戶名@公網IP

文件備份

  • 時間戳:date +%Y%m%d%H%M%S
  • 備份命令 :mv scripts.tar.gz scripts.tar.gz-$(date +%Y%m%d%H%M%S)

小結

  • 代碼發佈:安全可靠的代碼部署到服務器上
  • 代碼發佈的方式:手工+腳本
  • 代碼發佈流程:
    • 獲取代碼:權限
    • 打包:tar
    • 傳輸:scp
    • 停止應用:先近後遠
    • 解壓代碼: tar
    • 放置代碼:備份 mv date時間按戳
    • 開啓代碼:先遠後近
發佈了69 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章