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
hello
此時如果直接點回車
//空
abc
2、
${var:+word} //如果var定義了,就使用word這個值,如果沒有定義,則顯示爲空
#!/bin/bash
read -p "please input the word: " INT
A=${INT:+abc}
echo $INT
echo $A
此時如果輸入hello
hello
abc
此時如果不輸入直接回車
//空
//空
3、
${var:=word} //這時候如果輸入,則顯示輸入的信息;如果不輸入則顯示abc,這時候INT的值被賦值爲abc。
#!/bin/bash
read -p "please input the word: " INT
A=${INT:=abc}
echo $INT
echo $A
如果輸入hello則輸出結果爲
hello
hello
如果不輸入直接回車
abc //此時INT被賦值爲abc
abc
4、
${INT:?error} //此時如果輸入則顯示輸入信息,如果不輸入,則顯示錯誤信息並退出程序。
#!/bin/bash
read -p "please input the word: " INT
A=${INT:?error}
echo $INT
echo $A
如果輸入hello則顯示
hello
hello
如果不輸入直接回車
則輸出錯誤信息。並推出
5、
函數的變量類型,局部和全局變量。
如
#!/bin/bash
A=3 //此時定義的A=3是全局變量,在整個腳本中有效
FUN() {
local A=6 //此時定義本地變量A=6只在函數內部有效
A=$[$A+1]
echo "it's: $A"
}
FUN
echo $A
輸出結果爲
it's:7
3
declare -i A=2同樣可以說明A是整形且A=2
declare -r B=3變量爲3且不能撤銷
declare -x 聲明一個變量爲環境變量
6、
如,截取字符串
#!/bin/bash
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
2、
names=([2]=duchess [1]=alice [0]=hatter) //小括號裏面值與值中間有空格
3、
names=(alice hatter duchess)
4、
names=(alice [5]=hatter duchess) //表示此數組有7個值,第1,2,3,4的值沒有定義
如:這裏寫一個腳本,數組裏面是/var下的文件名,現在我想隨機取才出裏面的幾個文件名。
#!/bin/bash
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]}
done
當你執行此腳本的時候就會把所有的文件名輸出2次,並輸出2次文件的個數。並輸出你輸入的數字所隨機選擇的文件的名字。
如,你們班級有26位同學,每次上課要隨機取幾名來提問。
#!/bin/bash
read -p "please input the number you want to choice: " NOM
STUD=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
declare A=1
while [ $A -le $NOM ]; do
INDEX=$[$RANDOM%26]
let A++
echo ${STUD[$INDEX]}
done
輸入幾就會隨機抽出幾個