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位同學,每次上課要随機取幾名來提問。