天天看點

01自動化運維之基本指令

自動化運維

​ 1 shell文法 運作機制 常見應用

2 自動化代碼釋出案例

1 自動化運維:

​ 編寫shell腳本實作運維過程自動化

開發規範

1 不要用中文注釋
2 成對内容一次性寫出
3 适當縮進(類似python縮進風格)
           

2 shell

​ 1 shell概念:

指令解釋器(應用程式和作業系統之間的接口)

3.基本指令

2 shell分類
	常用:linux指令行(重點是bash)
	
3 檢視目前系統shell:
	echo $SHELL
	/bin/bash
	
4 檢視目前系統相容性支援的其他shell版本
	cat /etc/shells
	
5 shell腳本
	指令放到檔案中執行,檔案就叫shell腳本
           

4.建立腳本和腳本執行

1 建立腳本
	1 用記事本(vim)建立腳本檔案
	2 檔案名要有意義,.sh結尾
	3 檔案内容首行指定腳本解釋器:#!/bin/bash
	4 單行注釋: #開頭
		多行注釋: :<<字元 ... 字元  (将字元們重定向到啥都不幹)

2 腳本執行
	1 ./腳本名(啟動子程序(名字叫腳本名),在子程序中執行腳本指令)
	2 source 腳本名(不啟動子程序,直接在目前shell執行指令)
           

5.定義變量和變量的使用

1 定義變量
	普通變量:
		1 變量名=變量值 (變量值不可用有特殊字元)
		2 變量名='變量值'(變量值可以有特殊字元)
		3 變量名="變量值" (變量套變量)
		
	指令變量:
		将指令的輸出作為變量值賦給變量名
		變量名=`指令`
		變量名=$(指令)
		
		指令隻在定義時執行一遍
		
2 變量通路
	1 $變量名 
	2  "$變量名"  (将變量值作為字元串)
	3 ${變量名} (限定變量名範圍)
	4 "${變量名}"  (推薦使用)
	unset 變量名 (取消變量)
	
3 本地變量
	在哪定義,在哪通路
4 全局變量(環境變量)
	1 檢視目前系統全局變量
		env
	2 定義全局變量
		1 變量名=值 
		  export 變量
			先定義後轉換
		2 export 變量名=值 (二合一)
		
	3 全局變量生效範圍:
		目前shell 和子shell生效(子shell繼承父shell的全局變量)
		
	要想所有環境都生效:
		1 修改~/.bashrc (目前使用者生效---》打開新shell或source執行後生效)
		2 修改/etc/profile(所有使用者都生效--》重新開機或者source執行)
		
5 内置變量
	腳本相關:
		$0 腳本名
		$$ 執行腳本的程序号
		$n 第n個參數(n>=10時要加{})
		$# 參數個數
		$? 上一條指令的執行結果(0--》成功  非0----》失敗,上一條指令若是腳本,代表腳本中最後一條指令的傳回值)
	字元串截取:
		${變量名:起始位置:截取長度}
		(反向截取時,0-X)
		
	預設值:
		${變量名:-預設值} (變量不存在則輸出預設值)
		${變量名:+提示資訊} (變量存在則是從提示資訊)
           

6.表達式的使用

1 表達式
	邏輯轉化成控制
1.1 測試語句
	test 條件
	[ 條件 ]  (方括号内左右各有一個空格)
		
	數值比較(比較符左右各有一個空格)
		n1 -eq n2 相等
		n1 -gt n2 大于
		n1 -ge n2 大于等于
		n1 -lt n2 小于
		n1 -le n2 小于等于
		n1 -ne n2 不等于
			
	字元串比較:
		== != (跟python相同)
			
1.2 邏輯表達式
	指令1 && 指令2 (1 成功則執行2)
	指令1 || 指令2 (1 失敗則執行2)
	
1.3 檔案表達式
	-f 判斷是否是檔案
	-d 判斷是否是目錄
	-x 判斷是否可執行(目錄可執行)
	
1.4 計算表達式
	$(( 計算表達式 ))  (括号中間是計算過程)
	let 等式			
           

7.常見符号

1 常見符号
1.1 重定向
	應用程式的輸出:
	1 标準輸出(正常運作時)
	2 标準錯誤(錯誤提示)
			
	分别重定向:
		bash 6-chongdingxiang.sh 1> res.log 2>err.log
	合并重定向:
		bash 6-chongdingxiang.sh > res.txt 2>&1(将标準錯誤重定向到标準輸出相同的位置)
	丢棄:
		bash 6-chongdingxiang.sh > /dev/null(垃圾桶) 2>&1

1.2 管道符
	指令1 | 指令2 
	(1 的輸出作為2的輸入)
	
1.3 背景展示符 
	指令 &  (指令放到背景運作)
           

8.常用指令

1 常用指令
1.1 grep   搜尋檔案内容
	grep -rn bash .
	在目前目錄下遞歸所有檔案(包含子目錄),查找包含bash的行并顯示行号
	
2 find
	find . -name "*sh"
	在目前目錄以及子目錄中查找檔案名末尾是sh的檔案
	
3 sed 文本編輯工具
	-i 代表修改原檔案
	替換
		sed "2s#sed#SED#2" sed.txt
		`2(第二行)` `s替換` `#sed(原内容)` `#SED(替換後内容)` `#2(替換次數)` `g代表全部替換)`
			
	增加:
		sed -i "2a\hello" sed.txt
		2(第二行)a(在第二行下面增加)\hello(待增加内容)
		sed -i "5i\world" sed.txt
		5(第5行)i(在第五行上邊增加)\world(待增加内容)
	删除
		sed "2(第2行)d(删除)" sed.txt			
           

9.awk 基于行的編輯工具

1. awk 基于行的編輯工具
	awk '{print $3,$1}' awk.txt
	(列印awk.txt檔案中的第3 列和第1列(用空格分割))
		
   内置變量:
        FILENAME  檔案名
   NR 行号:
       awk 'NR==2 {print $3}' awk.txt
        (隻對第二行進行列印操作)
    NF  列數:
       awk '{print $NF}' awk.txt
        (列印最後一列)
    FS  指定分割符:
       awk 'BEGIN{FS="a"} {print $2}' awk.txt
        (用a分割每一行, 更推薦用參數:-F "a")
    OFS  指定多個輸出時的連接配接符
       awk 'BEGIN{OFS="->"} {print $1,$3}' awk.txt
        (列印第1列和第3列并用->連接配接)
           

10.分支,函數

1 分支
1.1 if分支:
	if [ 條件 ]
	then
		指令1
	elif [ 條件2 ]
	then
		指令2
	else
		指令3
	fi
		
	`别忘了fi`
2 case分支  `一對多的分支判斷`
		case 變量名 in
		   值1)
			  指令1
				 ;;(情況1的結束)
		   ...
		   值n)
			 指令n
				 ;;
			*)
				其他情況
				;;
		esac
3 循環
	for循環
		for 值 in 清單(一般用指令變量的輸出)
		do
		   執行語句
		done
		
	while循環(跟python完全一樣)
		while 條件
		do
		   執行語句
		done

4 函數
	定義:
		函數名() {
			函數體
			$n 代表第n個函數的參數
			$0 永遠都是腳本名
		}
	
	調用:
		函數名 參數1 參數2 。。。。
	傳回值
		return (0~255)
		擷取傳回值:$?
	指令變量也适用于函數
           

11.虛拟環境指令們導入方法

1 虛拟環境指令們導入方法:
	export WORKON_HOME=/root/.venv   (定義存儲虛拟環境的路徑)
	source /usr/local/bin/virtualenvwrapper.sh	
           

12.shell中可執行指令的種類

1-shell中可執行指令的種類
	1 應用程式---》which查到資訊
	2 腳本-------》 file查到檔案類型
	3 函數-------》以上兩條指令查不到
           

自動化運維之手動釋出代碼參考連結

https://blog.csdn.net/zui0302/article/details/85063064

01自動化運維之基本指令