bash的顏色顯示規則:shell
ASCII編碼對於顏色進行設置:編程
\033 :ctrl鍵數組
[:控制字符和顏色代碼之間的間隔字符bash
0m:關閉顏色屬性的命令;dom
1m:對於顯示文本字符加粗編程語言
4m:爲文本字符加下劃線標識ide
5m:使文本字符閃爍編碼
7m:將文本字符的背景色和前景色交換顯示;spa
8m:將文本字符的背景色和前景色設置爲相同顏色。操作系統
30m-39m:設置文本字符的前景色;38m和39m暫時沒用
40m-49m:設置文本字符的背景色;48m和49m暫時沒用
一個完整的程序,通常包含四類文件:
二進制文件(可執行文件)、頭和庫文件、幫助文件、配置文件;
bash——CLI(命令行接口)的一種
bash一樣屬於完整的應用程序,也有這四類文件:
bash的配置文件:
三類:
profile類:
爲交互式登陸的shell進程實現功能初始化的配置文件;
bashrc類
爲非交互式登陸的shell進程實現功能啓動配置的配置文件;
logout類
爲交互式登陸的shell進程提供終止及清理類功能的配置文件;
shell的類型;
交互式登錄的shell:
1.直接經過某個終端輸入帳號和密碼後登錄打開的shell進程;
2.使用su - USERNAME或su -l USERNAME執行切換登錄打開shell進程;
非交互式登錄的shell:
1.在圖形界面下,經過菜單或右鍵菜單打開的終端的SHELL進程;;
2.使用su USERNAME執行切換登錄打開的shell進程
bash的配置文件:
profile類:
全局:對全部用戶都生效的配置文件;
/etc/profile
/etc/profile.d/*.sh
注意:在RHEL或Centos系列的操做系統中,一般狀況下,若是一個配置文件的內容不少,格式複雜
用戶我的的配置文件:僅僅只是針對用戶有效的配置文件;
~/.bash_profile
profile類配置的文件的做用:
1.用於定義用戶的環境變量;
2.用於運行腳本或執行命令;
bashrc類:
全局:
/etc/bashrc
用戶我的:
~/.bashrc
bashrc類配置的文件的做用:
1.用於定義本地變量;
2.用於定義命令的別名;
3.定義umask;
注意:只有超級用戶root能夠修改全局類的配置文件;普通用戶只能修改其家目錄中的我的配置文件;
交互式登陸的shell進程,會按照順序加載下列配置文件;
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登錄的shell進程,會按照順序加載下列配置文件;
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
全部在命令行中執行的命令的操做,只要沒涉及到文件的修改的,通常都只是針對當前的shell生命週期有效;只要shell進程結束,全部的設置均失效;
配置文件的做用:使得咱們賴以生存的配置信息能夠長期有效,只要不修改配置文件中的內容,每一次打開shell都會使曾經的配置生效;
讓配置文件中新定義的配置可以當即生效的方法:
1.source命令:
source /PATH/TO/SOME_CONF_FILES
. /PATH/TO/SOME_CONF_FILES
2.exec命令:
exec /PATH/TO/SOME_CONF_FILES
bash中變量中存放的字符串處理方式:
弱變量:
1.無需事先定義便可使用。
2.沒有變量數據類型的硬性要求,默認是字符串;
1.字符串切片:
${#VAR}:返回字符串類型的變量VAR的長度;
${VAR:offset}:返回字符串變量VAR中第offset個字符後面的內容,不包括第offset個字符;offset的取值範圍爲:0~$[${#VAR}-1]
${VAR:offset:number}:返回字符串變量VAR中從第offset個字符後開始,長度爲number的字符部分;
${VAR: -length}:取字符串最右側的length個字符;
2.基於模式取字串:
${VAR#*PATTERN}:自左而又,查找VAR變量所存儲的字符串中,第一次被PATTERN匹配的字符,刪除從字符串開始到PATTERN匹配的字符之間的全部字符。
${VAR##*PATTERN}:自左而又,查找VAR變量所存儲的字符串中,全部被PATTERN匹配的字符,刪除從字符串開始到最後一個PATTERN匹配的字符之間的全部字符。
${VAR%PATTERN*}:自右向左,查找VAR變量所存儲的字符串中,第一次被PATTERN匹配的字符,刪除從字符串結尾到PATTERN匹配的字符之間的全部字符。
${VAR%%PATTERN*}:自右向左,查找VAR變量所存儲的字符串中,全部被PATTERN匹配的字符,刪除從字符串結尾到最後一個PATTERN匹配的字符之間的全部字符。
3.查找替換:
${VAR/PATTERN/SUBSTRING}:在VAR變量中查找匹配PATTERN的內容,將其第一個匹配到的結果更換爲SUBSTRING.
${VAR//PATTERN/SUBSTRING}:在VAR變量中查找匹配PATTERN的內容,將其全部的匹配到的結果更換爲SUBSTRING.
${VAR/#PATTERN/SUBSTRING}:在VAR變量中查找行首匹配PATTERN的內容,將匹配的結果更換爲SUBSTRING。
${VAR/%PATTERN/SUBSTRING}:在VAR變量中查找行尾匹配PATTERN的內容,將匹配的結果更換爲SUBSTRING。
4.查找刪除:
${VAR/PATTERN}:在VAR變量中查找匹配PATTERN內容,將第一個結果刪除。
${VAR//PATTERN}:在VAR變量中查找匹配PATTERN內容,將第一個結果刪除。
${VAR/#PATTERN}:在VAR變量中查找匹配PATTERN內容,將行首匹配到的結果刪除。
${VAR/%PATTERN}:在VAR變量中查找匹配PATTERN內容,將行尾匹配到的結果刪除。
5.大小寫轉換:
${VAR^^}:小寫變大寫
${VAR,,}:大寫變小寫
6.變量賦值:
${VAR:-value}:若是變量VAR爲空或未被設定,那麼直接返回value的值,不然返回變量VAR的值。
${VAR:+value}:若是變量VAR不爲空,那麼返回value的值
${VAR:=value}:若是變量VAR爲空或未被設定,那麼直接返回value的值,而且將value的值賦給變量VAR,不然返回變量VAR的值
7.變量的間接引用:
若是第一個變量的值剛好是第二個變量的變量名,從第一個變量引用第二個變量的值的方法,就稱爲間接變量引用。
VAR1=VAR2
VAR2=value
bash提供了兩種格式的間接變量引用方法:
eval MYVAR=\$$VAR1 ==> \$VAR2
MYVAR=$(!VAR1)
數組
變量:內存的存儲空間;
變量的特色:每一個變量中只能存放一個數據,變量只能進行一次性的賦值。
存放本班每一個人的名字於變量:
1.一次性賦值:
NAME="name1 name2 name3....."
2.使用多個變量,分別賦值:
NAME1=XXX
NAME2=OOO
3.數組變量:
數組:存放一個或多個元素的連續的內存空間,至關於多個變量的集合。
數組元素:數組中任何一個存放數據的存儲單元;
數組的索引:
1.數字:索引數組(Index ARRAY)
0,1,2......
2.名稱(字符串):關聯數組
bash4.0以上的版本才支持;
稠密數組和稀疏數組:
稠密數組:索引編號必須連續
稀疏數組:索引編號能夠不連續,bash數組屬於此類;
聲明數組:
1.declare命令:
declare -i NAME:將NAME聲明爲整型變量;
declare -x NAME:將NAME聲明爲環境變量;
declare -a NAME:將NAME聲明爲索引數組;(若是支持)
declare -A NAME:將NAME聲明爲關聯數組;(若是支持)
2.直接聲明數組:
直接爲數組賦值:
ARRAY_NAME=("valuel" "value2" "value3"....)聲明稠密數組;
ARRAY_NAME=([0]="valuel" [1]="value2" [2]="value3"....)聲明稀疏數組;
3.定義數組的元素而建立數組:
ARRAY_NAME[0]=value1
ARRAY_NAME[1]=value2
ARRAY_NAME[2]=value3
......
引用數組中元素:
引用變量的方法:${NAME}
引用數組元素的方法:${ARRAY_NAME[INDEX]}
注意:若是不給出INDEX,則表示引用數組的第一個元素,即INDEX=0的元素;
引用整個數組的全部元素:${ARRAY_NAME[*]}或者${ARRAY_NAME[@]}
引用數組的索引:${!ARRAY_NAME[*]}或者${!ARRAY_NAME[@]}
查看數組的長度(數組中有效元素的個數)
${#ARRAY_NAME[*]}或者${#ARRAY_NAME[@]}
數組切片:
${ARRAY_NAME:offset}:顯示包括offset數字所表示的索引位置及之後的全部元素。
${ARRAY_NAME:offset:number}:顯示包括offset數字所表示的索引位置及之後的number個元素;
向數組中追加元素:
1.稠密數組:
ARRAY_NAME[${#ARRAY_NAME[*]}]=valueN
2.稀疏數組:
ARRAY_NAME[INDEX]=valueN
注意:INDEX必須爲未被使用的數組元素索引編號;
撤銷數組:
unset ARRAY_NAME
刪除數組中的元素:
unset ARRAY_NAME[INDEX]
RANDOM變量:0-32767
熵池
/dev/random
/dev/urandom
bash腳本編程:
shell腳本編程的特色:
過程式編程語言
腳本類語言
解釋型語言
過程式編程語言:
順序執行結構
以從左到右,從上而下順序執行全部語句(命令);
shell腳本的主體結構
選擇執行結鉤
依照給定條件的邏輯判斷結果,進而選擇某個分支中的語句來執行;
if:分支選擇標準;邏輯判斷的結果;
case:分支選擇標準,根據可選的取值
循環執行結構
對於某特定操做特定語句,重複執行0次,1次或屢次;
for:遍歷指定的列表;
while:根據邏輯判斷的結果
until:根據邏輯判斷的結果
select:永遠的死循環,利用循環機制提供選擇列表;
選擇執行結構:
if語句:
if: if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
根據條件執行命令。
if語句單分支結構:若是條件爲真,則執行then後面的語句,不然,不作任何操做。
if CONDITION
then STATEMENT
fi
if CONDITION ;then
STATEMENT1
STATEMENT2
...
fi
注意:想要執行then後面的語句,前提條件是CONDITION部分爲真;
if語句的雙分支結構:若是條件爲真,就執行then後面的命令,不然就執行else後面的命令;
if CONDITION;then
STATEMENT
...
else
STATEMENT
fi
if語句的多分支結構:首先判斷CONDITION1是否爲真,若是爲真,就執行第一個then後面的語句,不然判斷第二個CONDITION2是否爲真,若是爲真,就判斷第二個then後面的語句。。。。。若是全部CONDITION都爲假,就執行else後面的語句。
if CONDITION1 ; then
STATEMENT
...
elif CONDITION2 ; then
STATEMENT
...
elif CONDITION3 ; then
STATEMENT
...
...
else
STATEMENT
...
fi
建議:if多分支結構,能不用就不用。
bash腳本編程之用戶交互:
位置參數變量:$1,$2,$3...
特殊變量:
$#:全部位置參數的總和;
$*:給出的全部位置參數的列表;當使用雙引號引用時,整個參數列表被當作一個字符串;;
$@:給出的全部位置參數的列表,當使用雙引號引用時,每一個參數做爲單獨的字符串存在。
$0:所執行的腳本文件自身的路徑
read命令:
read[-a 數組] [-d 分隔符] [-i 緩衝區文字] [-n 讀取字符數] [-p 提示符] [-t 超時] [名稱 ...]
名稱通常爲變量名或數組名,若是不寫名稱,則系統會將read讀到的信息保存在REPLY變量中;
shift [n]
移位位置參數。
繪製流程圖
if語句多分支結構:
if CONDITION1 ;then
STATEMENT
...
elif CONDITION2 ;then
STATEMENT
...
elif CONDITION3 ;then
STATEMENT
...
...
else
STATEMENT
...
fi
循環執行結構:
將一段代碼重複執行0次、1次、或屢次;
一個好的循環結構必需要包括兩個最重要的環節;
進入循環的條件:
開始循環時所知足的條件;
退出循環的條件:
循環結束所知足的條件;
bash腳本:
for
while
until
select
for循環:
1.遍歷列表
for: for 變量名 in 列表 ; do
循環體
done
變量名:任意指定的變量名稱,變量的值是從列表中取值並賦值的;
循環體:通常來講是可以用變量名的命令或命令的組合,若是循環體中沒有包括變量名,則可能出現死循環
列表的生成方式:
1)直接給出
2)純整數列表
seq:輸出一個整數列表
seq [FIRST [INCREMENT]] LAST
3)花括號展開
{FIRST .. LAST}
4) 命令的執行結果的返回值
5) GLOBBING
6) 某些變量的引用:$@, $*
for循環的特色:
1.幾乎不會出現死循環;
2.在執行循環的過程當中須要將整個list載入內存,所以對於大列表來講可能會過多的消耗內存和CPU資源
2.控制變量
for (( 表達式1; 表達式2; 表達式3 )); do 命令; done
for (( 表達式1; 表達式2; 表達式3 )) ; do
循環體
done
表達式1:爲變量賦初始值;
表達式2:循環的退出條件;
表達式3:變量值的變化規律;