天天看點

shell腳本程式設計部分技巧總結

shell腳本程式設計部分技巧總結

今天看腳本,發現有好多不懂的地方,于是查找資料,總結了一下。

1、

${var:-word} //如果var定義了,就使用var,如果沒有定義,則使用後面word的值

如:下面的腳本,如果輸入,則顯示輸入的資訊.如果不輸入直接回車,則顯示abc、但是這時候INT的值仍然是空的。

#!/bin/bash

read -p "please input the word: " INT

A=${INT:-abc}

echo $INT

echo $A

此時輸入hello則顯示

hello

此時如果直接點回車

  //空

abc

2、

${var:+word} //如果var定義了,就使用word這個值,如果沒有定義,則顯示為空

A=${INT:+abc}

此時如果輸入hello

此時如果不輸入直接回車

 //空

3、

${var:=word} //這時候如果輸入,則顯示輸入的資訊;如果不輸入則顯示abc,這時候INT的值被指派為abc。

A=${INT:=abc}

如果輸入hello則輸出結果為

如果不輸入直接回車

abc //此時INT被指派為abc

4、

${INT:?error} //此時如果輸入則顯示輸入資訊,如果不輸入,則顯示錯誤資訊并退出程式。

A=${INT:?error}

如果輸入hello則顯示

則輸出錯誤資訊。并推出

5、

函數的變量類型,局部和全局變量。

#!/bin/bash

A=3  //此時定義的A=3是全局變量,在整個腳本中有效

FUN() {

local A=6  //此時定義本地變量A=6隻在函數内部有效

A=$[$A+1] 

echo "it's: $A" 

}

FUN

輸出結果為

it's:7

3

declare -i A=2同樣可以說明A是×××且A=2

declare -r B=3變量為3且不能撤銷

declare -x 聲明一個變量為環境變量

6、

如,截取字元串

FILENAME='/var/log/maillog'

echo ${FILENAME#*/}

echo ${FILENAME##*/}

echo ${FILENAME%/*}

echo ${FILENAME%%/*}

顯示的結果為

var/log/maillog

maillog

/var/log

不多解釋,自己體會一下就會明白

7、

數組

定義數組

declare -a A

初始化數組的幾種方式

1、單獨指派

names[1]=alice

names[0]=hatter

names[2]=duchess

names=([2]=duchess [1]=alice [0]=hatter) //小括号裡面值與值中間有空格

names=(alice hatter duchess)

names=(alice [5]=hatter duchess) //表示此數組有7個值,第1,2,3,4的值沒有定義

如:這裡寫一個腳本,數組裡面是/var下的檔案名,現在我想随機取才出裡面的幾個檔案名。

read -p "please input the number you want to choice: " NOM

declare -i I=0

for FILE in `ls /var`;do

  FILENAME[$I]=$FILE //給數組指派

  let I++

done

  echo ${FILENAME[*]} //這兩行是顯示數組的值,不同的用法

  echo ${FILENAME[@]}

  echo ${#FILENAME[*]} //下兩行是統計個數

  echo ${#FILENAME[*]}

declare A=1

while [ $A -le $NOM ]; do

  INDEX=$[$RANDOM%20] //這裡的20是對20取模

  let A++

  echo ${FILENAME[$INDEX]}

當你執行此腳本的時候就會把所有的檔案名輸出2次,并輸出2次檔案的個數。并輸出你輸入的數字所随機選擇的檔案的名字。

如,你們班級有26位同學,每次上課要随機取幾名來提問。

繼續閱讀