天天看點

bash基本知識

bash的顔色顯示規則:

ascii編碼對于顔色進行設定;

\033:Ctrl鍵

[:控制字元和顔色代碼之間的間隔字元

0m:關閉顔色屬性指令;

1m:加粗顯示文本字元;

4m:為文本字元加下劃線辨別;

5m:使文本字元閃爍;

7m:将文本字元的背景色和前景色交換顯示;

8m:将文本字元的背景色和前景色設定為相同顔色;

30m-39m:設定文本字元的前景色;38m和39m暫時保留;

40m-49m:設定文本字元的背景色;48m和49m暫時保留;

例子:echo -e "\033[5;1;31;47mhello world\033[0m"

bash——CLI(指令行接口)的一種

一個完整的程式,一般包括4類檔案:二進制檔案(可執行檔案)、頭和庫檔案、幫助檔案、配置檔案;

同樣bash也屬于完整的應用程式,也有這四類檔案:

bash的配置檔案:

 三類:

   profile類:

     為互動式登入的shell程序實作功能初始化的配置檔案;

   bashrc類:

    為非互動式登入的shell程序實作功能啟動配置的配置檔案;

   logout類:

    為互動式登入的shell程序提供終止及清理類功能的配置檔案;

profile類:

全局:對所有使用者都生效的配置檔案;

/etc/profile

/etc/profile.d/*.sh

注意:在RHEL或CentOS系列的作業系統中,通常情況下,如果一個配置檔案内容很多,格式複雜,我們會将其切割成多個片段,将切割出來的片段統一的存放在"程式名稱.d"目錄中;在這樣目錄中所儲存的片段檔案,大多以統一的檔案字尾名來命名;

使用者個人:僅僅隻是針對某個使用者有效的配置檔案;

~/.bash_profile

profile類配置的檔案的作用:1.用于定義使用者的環境變量;2.用于運作腳本或執行指令;

bashrc類:

全局:

/etc/bashrc

使用者個人:

~/.bashrc

bashrc類配置的檔案的作用:

1.用于定義本地變量;

2.用于定義指令的别名;

3.定義umask;

/////注意:

隻有超級使用者root可以修改全局類的配置檔案;普通使用者隻能修改其家目錄中的個人配置檔案;

shell的類型:

   1)互動式登入的shell:

    1.直接通過某個終端輸入賬号和密碼後登入打開的shell程序;

    2.使用su - USERNAME或su -l USERNAME執行切換登入打開的shell程序;

   2)非互動式登入的shell:

     1.在圖形界面下,通過菜單或右鍵菜單打開的終端的shell程序;

    2.使用su USERNAME執行切換登入打開的shell程序;

互動式登入的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變量中的所有小寫字母轉換為大寫字母;

${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

MYVAR=$(!VAR1)

1.有大文本檔案file1,查詢file1裡面空行的所在行号;

2.編寫shell腳本查詢file1以abc結尾的行,并列印出前3行。

數組

變量:記憶體的存儲空間;

變量的特點:每個變量中隻能存放一個資料,變量隻能進行一次性的指派;

存放本班每個人的名字于變量:

1.一次性指派:

NAME="name1 name2 name3 ..."

2.使用多個變量,分别指派:

NAME1=xu

NAME2=shen

3.數組變量:

數組:存放一個或多個元素的連續的記憶體空間;相當于多個變量的集合;

數組元素:數組中任何一個存放資料的存儲單元;

數組的索引:

1.數字:索引數組(Index ARRAY)

0,1,2,...

2.名稱(字元串):關聯數組(Related ARRAY)

bash4.0以上的版本才支援;

稠密數組和稀疏數組:

稠密數組:索引編号必須連續

稀疏數組:索引編号可以不連續,bash數組屬于此類;

聲明數組:

1.declare指令

declare -i NAME:将NAME聲明為整型變量;

declare -x NAME:将NAME聲明為環境變量;

declare -a NAME:将NAME聲明為索引數組(如果支援);

declare -A NAME:将NAME聲明為關聯數組(如果支援);

declare -a NAME=("value1" "value2" "value3" ...)

declare -a NAME=([0]="value1" [1]="value2" [5]="value3" ...)

2.直接聲明數組:

 直接為數組指派:

  ARRAY_NAME=("value1" "value2" "value3" ...) 聲明稠密數組;

  ARRAY_NAME=([0]="value1" [1]="value2" [5]="value3" ...) 聲明稀疏數組;

3.定義數組的元素而建立數組:

ARRAY_NAME[0]=value1

ARRAY_NAME[1]=value2

...

引用數組中元素:

引用變量的方法:${NAME}

引用數組元素的方法:${ARRAY_NAME[INDEX]}

注意:如果不給出INDEX,則表示引用數組的第一個元素,即INDEX=0的元素;

引用整個數組的所有元素:${ARRAY_ANME[*]}或者${ARRAY_ANME[@]}

引用數組的索引:${!ARRAY_ANME[*]}或者${!ARRAY_ANME[@]}

檢視數組的長度(數組中有效元素的個數)

${#ARRAY_NAME[*]} 或者 ${#ARRAY_NAME[@]} 

數組切片:

${ARRAY_NAME:offset}:顯示包括offset數字所表示的索引位置及以後的所有元素;

${ARRAY_NAME:6}:跳過0-5,從6開始顯示

${ARRAY_NAME:offset:number}:顯示包括offset數字所表示的索引位置及以後的number個元素;${ARRAY_NAME:6:3}:跳過0-5,從6開始顯示3個元素;

想數組中追加元素:

1.稠密數組:

ARRAY_NAME[${#ARRAY_NAME[*]}]=valueN

0 1 2 3 4 5 6 7

2.稀疏數組:

ARRAY_ANME[INDEX]=valueN

注意:INDEX必須為未被使用的數組元素索引編号;

撤銷數組:

usnet ARRAY_NAME

删除數組中的元素:

unset ARRAY_NAME[INDEX]

RANDOM變量:0-32767 

熵池

/dev/random

/dev/urandom

RANDOM變量是以後我們會常用的東西,在腳本的的編寫過程中用于數字的範圍的取值,應用廣泛。

下一篇: less基本知識

繼續閱讀