1.
shopt bash2.0以上新的命令,功能和set相似。
給變量賦值時等號兩邊不可留空格。
環境變量通常使用大寫。
2.
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數,與位置變量不一樣,參數可超過9個
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的進程ID號
$@ 傳遞到腳本的參數列表,並在引號中返回每一個參數
$- 顯示shell使用的當前選項,與set命令功能相同
$? 顯示最後命令的退出狀態,0表示沒有錯誤,其餘表示有錯誤
3.
echo 命令中使用" "沒法直接識別轉義字符,必須使用選項 -e,但能夠使用$和`引用變量和命令替換。
$[] 告訴shell對方括號中表達式求值 $[a+b],如$[1+8]
4.
tee
把輸出的一個副本輸送到標準輸出,另外一個副本拷貝到相應的文件中
tee -a file -----a表示在文件末尾追加,不要-a則覆蓋
該命令通常與管道合用
5.
command>filename>&1 ---把標準輸出和標準錯誤重定向
command<<delimiter ---輸入直到delimiter分解符
eg:
sqlplus / as sysdba <<EOF
show parameters
exit
EOF
6.命令替換有兩種方式,老的korn風格的`linux command`和新的bash風格$(linux command)
7.定義數組
declare -a arry=(a1 a2 a3 ...)
echo ${a[n]}
8.read使用
read -a arryname ---讀入爲數組
read -p prompt ----輸出提示,並把提示後的輸入存到REPLY內建變量中
[test@szbirdora 1]$ read -p "Enter your name:"
Enter your name:jack
[test@szbirdora 1]$ echo $REPLY
jack
[test@szbirdora 1]$ read -a name
jack tom susan
[test@szbirdora 1]$ echo ${name[2]}
susan
[test@szbirdora 1]$ echo ${name[0]}
jack
9.多進制整型變量表示
declare -i number
number=base#number_in_the_base
如:
declare -i number
number=2#101
number=16#A9
10.條件語句if then fi中if後的表達式能夠是條件表達式(布爾表達式)或一組命令,若是是布爾表達式則表達式爲真執行then後的語句,若是是命令組,則命令組狀態($?)爲0執行then後面的語句。但若是是C shell則if後只能跟布爾表達式。
linux
11.here文檔和case創建菜單:
eg.
echo "Select a terminal type:"
cat <<EOF
1) linux
2)xterm
3)sun
EOF
read choice
case $choice in
1)TERM=linux
export TERM
;;
2)TERM=xterm
export TERM
;;
3)TERM=sun
export TERM
;;
*) echo "please select correct chioce,ths!"
;;
esac
echo "TERM is $TERM"sql
12.循環比較:
for variable in wordlist;do ---從文件或列表中給定的值循環
while command;do ----當command的返回值爲0時作循環
until command;do ----當command的返回值不爲0時做循環
select循環菜單
用select創建菜單,須要用PS3來提示用戶輸入,輸入保存在REPLY內建變量中,REPLY的值與內建菜單關聯。在構建菜單過程當中能夠使用COLUMNS和LINES兩個變量,COLUMNS決定菜單的列寬度,LINES決定可顯示的行數。select和case命令聯用能夠有效的構造循環菜單。
eg
#!/bin/bash
#Author: hijack
#Usage:Menu
t=0
j=0
d=0
PS3="Please choose one of the three boys or quit:"
select choice in Tom Jack David Quit
do
case $choice in
Tom)
t=$t+1
if (($t==5));then
echo "Tom win"
break
fi
;;
Jack)
j=$j+1
if (($j==5));then
echo "Jack win"
break
fi
;;
David)
d=$d+1
if (($d==5));then
echo "David win"
break
fi
;;
Quit) exit 0;;
*) echo "$REPLY is invalide choice" 1>&2
echo "Try again!"
;;
esacshell
done
[test@szbirdora 1]$ sh menu
1) Tom
2) Jack
3) David
4) Quit
Please choose one of the three boys or quit:1
Please choose one of the three boys or quit:2
Please choose one of the three boys or quit:1
Please choose one of the three boys or quit:1
Please choose one of the three boys or quit:1
Please choose one of the three boys or quit:1
Tom win
P328數組