天天看點

數組

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

變量:記憶體的存儲空間

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

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

數組的索引:

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

 0,1,2,...

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

 bash4.0以上的版本才支援

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

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

聲明數組:

 1.declare

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

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

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

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

 declare -a NAME=("VALUE1" "VALUE2" ...)

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

 2.直接聲明數組

 直接為數組指派

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

 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_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

 熵池:/dec/random

     /dev/urando

 随機  

  $[$RANDOM%8+1]這可以生成随機數

bash腳本程式設計:

shell腳本程式設計特點

 過程式程式設計語言

 腳本類語言

 解釋型語言

 過程式程式設計語言:

  順序執行結構 以從左到右,從上到下順序執行所有的語句(指令)shell腳本的主體結構

  選擇執行結構 依照給定條件的邏輯判斷結果或者依照可選的取值範圍,進而選擇某個分支中的語句來執行  if:分支選擇标準邏輯判斷的結果   case分支選擇标準根據可選的取值

  循環執行結構 對于某特定語句重複執行0次1次或多次

   for:周遊指定的清單

   while:根據邏輯判斷的結果;

   until:根據邏輯判斷的結果;

   select:永遠的死循環,利用循環機制提供選擇清單

選擇執行結構

if語句

 if 指令; then 指令; [ elif 指令; then 指令; ]... [ else 指令; ] fi

if語句的單分支結構:如果條件為真則執行then後的指令否則不做任何操作;

 if CONDITION

 then STATEMENT

 fi

 if CONDITION;then

  STATEMENT1

  STATEMENT2

 注意:想要執行then後面的STATEMENTS,前提條件是CONDITION部分為真

if語句的雙分支結構:如果條件為真,就執行then後面的指令否則執行else後面的指令

 if CONDITION ; then

  STATEMENT

  ...

 else

 fi 

if語句的多分支結構:首先判斷CONDITION1是否為真,如果為真,則執行第一個then後面的語句,否則判斷CONDITION2是否為真,如果為真,就執行第二個then後面的語句,如果所有的CONDITION都為假,就執行else後面的語句

 if CONDITION1 ; then

 elif CONDITION2 ; then

  STATEMENT 

 ...

 建議if多分支結構能不用就不用

bash腳本程式設計值使用者互動

位置參數變量:$1,$2,$3...

特殊變量

$#:所有的位置參數的總數

$*:所有位置參數的清單,當使用雙引号引用時,整個參數被當成一個字元串

$@:所有位置參數的清單,當使用雙引号引用時,每個參數作為單獨的字元串存在

$0:所執行的腳本檔案自身的路徑

read:read  [-a 數組] [-p 提示符] [-t 逾時]  [名稱 ...]

名稱一般為變量名或數組名,如果不寫名稱,則系統會将read讀到的資訊儲存到REPLY變量中

[ -z $NAME1 ] && NAME1=link

注意:在使用read指令的時候,通常會使用-t選項來規定逾時時間,一旦使用-t選項定義了逾時時間,必須在後面判斷給定的變量是否為空,如果為空需要為變量提供變量值

shift [n] 移位位置參數

if語句的多分支結構

循環執行結構

将一段代碼重複執行0次1次或多次;

一個好的循環結構,必須包括兩個最重要的環節

進入循環的條件

 開始循環時所滿足的條件

退出循環的條件

 循環結束所滿足的條件

for循環:

 1.周遊清單

  for VAR_NAME in LIST  ; do 循環體 ; done

  for VAR_NAME in LIST  ; do

   循環體

  done

  VAR_NAME:任意指定的變量名稱,變量的值是從LIST中取值并指派的

  循環體:一般來說是能夠用到VAR_NAME指令或指令的組合,如果循環體中沒有包括VAR_NAME,則可能出現死循環

LIST的生成方式

 1)直接給出

 2)純整數清單

 seq:輸出一個整數清單

 seq [FIRST [INCREMENT]] LAST

 3) 花括号展開{FIRST..LAST}

 4) 指令的執行結果傳回值

 5)通配符

 6)某些變量的引用:$@,$*

    進入循環的條件:LIST有元素可以取用

    退出循環的條件:LIST中以被取空,在無元素可用

   for循環的特點:

    1.幾乎不會出現死循環

    2.在執行循環的過程中,需要将這個LIST載入記憶體;是以對于大清單來說可能會過多的消耗記憶體和CPU資源

    注意:使用for循環嵌套的時候,外層for循環,控制行數的輸出,内層for循環,控制清單的輸出

 2.控制變量

 for ((表達式1;表達式2;表達式3)) ; do

 循環體

 done

 表達式1:為變量賦初始值

 表達式2:循環的退出條件

 表達式3:變量值的變化規律

      本文轉自Vincent一馬 51CTO部落格,原文連結:http://blog.51cto.com/mazhenbo/1916722,如需轉載請自行聯系原作者