bash是調用機器上命令程序文件進行編寫的。
外部命令由各應用程序提供
程序是由:指令(算法)+數據(數據結構)
面向過程
以指令爲中心,設計算法,數據服務於算法
面向對象
以數據爲中心,設計數據結構,程序服務於數據結構
bash的流程控制語句:
順序執行:逐個執行
選擇執行:按條件選擇多條中的一條執行
循環執行:按條件執行制定次數
變量:程序運行後有名字的內存空間,可反覆調用修改
本地變量:當前shell進程有效。
環境變量:在當前shell進程和其子進程都存在。被導出的本地變量
局部變量:某個函數執行過程中存在的。
位置參數變量:腳本中傳遞給腳本的參數,
特殊變量:
$?(上一條命令執行結果),0爲真,1-255位假
$*(),
$@(),
$#(),
$$()
變量的值類型:
數值:整形和浮點型
字符:ASCII
bash是字符型的,弱類型的且無須事先聲明。
下面可以將變量聲明爲整數類型
declare –i name=5
let name=5
單引號:強引用,其內部的變量會保持原有字符
雙引號:弱引用,其內部變量會做替換成爲變量值
命令引用:`命令`,$(命令),引用命令的執行結果
命名方式:
本地變量
變量名=變量值,默認是字符型
環境變量:
export 變量名
declare –x 變量名
查看:env,printent,export
生命週期:
自動銷燬:shell進程終止會銷燬
手動銷燬:unset 變量名
腳本:是文本文件,由bash從中讀取進行執行。
啓動腳本:
1,bash 腳本名
2,先給執行權限 腳本名
shebang語法格式:第一行寫 #!/bin/bash,解釋器路徑
註釋:#內容
自定義狀態結果 exit 5,會終止當前進程。
有些時候,我們只想要狀態結果,不想要狀態內容,所以要把結果拋棄
/dev/null,會吞下所有傳來的數據然後丟棄。
/dev/zero,會吞下數據然後吐出一堆0.
測試表達式:
1,test 表達式。
2,表達式應該這樣 [ 表達式 ],如果和括號之間沒空格會報錯。
也可以寫成 [[ 表達式 ]],這叫關鍵字。
以下都是上面命令的參數
整數測試:
-gt:大於
-ge:大於等於
-lt:小於
-le:小於等於
-eq:相等
-ne:不等於
字符串測試:
>:大於
<:小於
==:等於
!=不等於
-z $a 是否爲空
-n $a 是否不空
=~:測試左側字符串是否被右側的模式所匹配
文件測試:存在性測試
-e(-a) $file:文件是否存在
-f $file:是否存在且爲普通文件
-d $file:是否存在且爲目錄
-h $file:是否存在且爲符號鏈接
-L $file:同上
-b $file:是否存在且爲快設備文件
-c $file:是否存在且爲字符設備文件
-S $file:是否存在且爲套接字文件
-p $file:是否存在且爲管道文件
權限測試:
-r $file:當前用戶對文件是否擁有讀權限
-w $file:當前用戶對文件是否擁有寫權限
-x $file:當前用戶對文件是否擁有執行權限
-u $file:當前用戶對文件是否擁有suid
-g $file:當前用戶對文件是否擁有:guid
-k $file:當前用戶對文件是否擁有sticky
-O $file:當前用戶對文件是否是文件的屬主
-G $file:當前用戶對文件是否是文件的屬組
$file1 –nt $file2 :比較修改時間戳哪個接近當前時間
$file1 –ot $file2 :比較修改時間戳哪個遠離當前時間
$file1 –ef $file2 :比較兩個文件是否執行同一個inode
組合測試條件:
與:[[ 條件1 –a 條件2 ]]
或:[[ 條件1 –o 條件2 ]]
非:[ !條件 ]
每一個條件是指表達式
與: 條件1 && 條件2
或: 條件1 || 條件2
非: !條件
代碼重用
定義方法:
function name()
{
內容
}
name()
{
內容
}
return可以自定義函數狀態返回值,一旦遇到return,函數終止
數組是連續的多個獨立的內存空間,通過數組名引用
bash4.0以後支持2種:
傳統數組:索引時數字,從0開始 declare -a name
關聯數組:索引可以自定義,使用字符串做索引 declare -A name
bash支持稀疏格式的數組 {0,,,,6}
賦值:
1、單個賦值name[5]=value
2、全部複製name=("value1""value2"...)
3、指定索引進行賦值name=([0]="value1"[3]="vlue3")
4、可以用read 賦值 read -a name
數組的長度可以用
${#name[*|@]}來查看
$RANDOM取得0-32767的隨機數