介紹
shell 是一個解析命令,是人機交互的橋樑,將需要執行的命令保存在文本中,按照順序執行。
作用
用來解決重複化的工作
1 自動化軟件部署
2 自動化管理 系統初始化腳本,批量更改主機信息
3 自動化分析處理 統計網站訪問量
4 自動化部署 數據庫備份,日誌轉儲
5 自動化監聽腳本
基礎語法
開頭 #!/bin/bash 或 #!/bin/enc bash
註釋 #…
執行
1:
chmod +x .sh #修改執行權限
/…/.sh 執行
2:
直接指定解析器
bash *.sh
可以輸出執行過程 bash -n *.sh
3:
使用source命令 重新讀取並執行
source *.sh
定義變量
A=hello 定義變量A
A=命令
將命令結果賦值A
echo $A 調用變量
unset A 取消變量A
變量名:
1 區分大小寫
2 不能包含特殊符號(? * …)
3 值中有特殊符合,使用”“
4 變量名不能以數字開頭
5 等號兩邊不能有空格
read交互是變量賦值
read 選項 變量名
選項:
-p 提示信息 -s 不顯示輸入
-n 限制輸入長度 -t 限制輸入時間
read -p “input:” -n 3 -t 3 A
從文件中讀取
read -p "input: " A < a.txt
定義有類型的變量(declare)
declare 選項 變量名=變量值
declare -i A=123
選項:
-i 整數 -r 只讀 -a 數組
-A 關聯數組 -x 將變量通過環境導出
變量分類
- 本地變量:
只能在當前進程有效。變量聲明默認爲本地變量。變量名=變量值 - 環境變量:
當前用戶有效子進程有效,declare -x 變量名=變量值 | export 本地變量名 - 全局變量:
全部用戶和程序可調用,新建用戶也可調用,修改配置文件(etc/bahsrc etc/profile),並source讓其生效.
用戶讀取文件順序
/etc/profile $HOME/.bash_profile $HOME/.hashrc /etc/bahsrc - 系統變量:
shell固定好的變量
$? 上一條命令的返回值 0表示OK 非0 有問題
$0 當前執行的程序或腳本名
$# 腳本後參數的個數
$* 腳本後面所有參數,
$@ 腳本後面所有參數,
$1-$9 腳本後面的位置參數
$! 當前終端後臺運行的最後一個進程號
! $ 調用最後一條命令中的參數
$$ 當前進程號
四則運算
加+ 減- 乘* 除/ 取餘% n次方 **n
運算符號:
$(())
$[]
expr
let
小數運算 bc echo 1+1.5|bc
條件判斷語句
條件判斷語句格式
1 test 條件表達式
2 [ 條件表達式 ]
3 [[ 條件表達式 ]] 支持正則=~
test判斷參數
1 文件存在判斷參數
-e 判斷文件是否存在 -f 判斷是否存在並且是一個普通文件
-d 判斷是否存在並且是一個目錄 -L 判斷是否存在並且是一個軟連接
-b 判斷是否存在並且是一個設備文件 -S 判斷是否存在並且是一個套接字文件
-c 判斷是否存在並且是一個字符設備 -p 判斷是否存在並且是一個命名管道文件
-s 判斷是否存在並且是一個非空文件
! 取反
2 文件權限判斷參數
-r 是否可讀 -w 是否可寫 -x 是否可執行
-u 是否有suid,冒險位 -g 是否sgid,強制位 -k是否有t位,粘滯位
-ep 兩個文件是否爲同一個文件
3 判斷整數
-eq 相等 -ne 不等 -gt 大於 -lt 小於
-ge 大於等於 -le 小於等於
4 判斷字符串
-z 是否爲空 -n 是否非空
string1 = string2 是否相等 string1 = string2 是否不相等
5 多重條件判斷
-a 和 && 邏輯與
-o 和 || 邏輯或
流程控制語句
1 if結構
if [ condition];then
command
command
fi
if test 條件;then
命令
fi
2 if else
if [condition ];then
command
else
command
fi
3 if elif else
if[ condition ];then
command1
elif [ condition2 ];then
command2
else
command3
fi
循環語句
1 for循環
for variable in {list}
do
command
command
done
{list} 可以{1…10} seq 10 a b c
for ((i=1;i<=5;i++))
do
command
done
seq序列
seq 10 生成1-10的序列
seq 10 -1 1 生成10-1的序列
條件控制語句
continue:
break:
exit:
While循環
while 表達式
do
command
…
done
until循環
until expression //爲假進入循環
do
command
…
done