標籤:
http://blog.chinaunix.net/uid-26827001-id-3154024.html
首先看到好多以這樣開頭的 #!/bin/bash 這個是告訴系統 解釋此指令檔的Shell程式
# 這個是注釋行,當行有效
指令碼程式一般用 xx.sh 檔案表示,這樣一樣就可以看出檔案的屬性,當然也可以不這樣
一個指令碼程式寫完後,如果要執行它,則必須先賦+x 執行許可權給它
例如:chmod +x xx.sh,然後用命令 ./filename 執行
以下是一些知識點:
1. echo :用於顯示(不帶參數,如果有多行則換行輸出) 例如:echo "hello shell"
如果加上參數 -n 表示如果有多行的話,將不換行輸出
點擊(此處)摺疊或開啟
- #!/bin/bash
- # filename is while.sh
- count=0
- while(($count < 5 ))
- do
- echo -n " count=" $count
- let count=count+1
- done
順便說一句,linux提供2中命令:一種是內部命令,一種是外部命令。解釋執行內部命令要比外面命令快的 多, 同時,解釋內部命令時候,shell不需要建立子進程,而外部命令則需要建立子進程,這就增大了系統的開銷。查看是不是內部命令,可以用如下命令:type command 例如:type echo
2. $xx 表示引用變數:如上面的代碼中,第三行定義了變數count, 第四行,第六行 $count 則引用該變數。
3. 位置變數 : $0 檔案名稱,$1 第一個參數 $2 第二個參數
點擊(此處)摺疊或開啟
- #!/bin/bash
- #filename is first.sh
- #have 3 parameter to first.sh
- #command is: ./first.sh 1 2 3
- # $#:傳入指令碼的參數個數
- # $*:顯示所以的參數,並以空格隔開
- # $0:命令本身,即要執行的檔案名稱
- # $1:第一個參數
- # $2:第二個參數
- # $3:第三個參數 後面一樣 ~等等
-
- echo "number of vars:"$#
- echo "var of vars:"$0
- echo "first var:"$1
- echo "second var:$2
- echo "third var:$3
4. let :用來執行算數運算和數值運算式測試。
let 命令的替代表示形式是: ((算術運算式)) ,這樣做的好處是如果運算式中含有特殊的字元,可以告示shell 進行特殊處理:例如,let ″val=a|b″。如果不括起來,Shell會把命令列let val=a|b中的“|”看成管道符,將其左右兩邊看成不同的命令,因而無法正確執行。
以下代碼執行結果為:1 3 7 10
點擊(此處)摺疊或開啟
- #!/bin/bash
- #filename is let.sh
-
- i=1
- echo "i="$i
- let i=i+2
- echo "i="$i
- let "i=i+4"
- echo "i="$i
- ((i+=3))
- echo "i="$i
5. 函數調用:聲明函數 function name(){~~~~},函數的調用,直接寫函數名稱name即可。
點擊(此處)摺疊或開啟
- #!/bin/bash
- # filename is second.sh
- # 函數申明和調用
- function fun1(){
- local a="hello world"
- echo "函數調用成功 "$a
- }
- echo "函數調用前"
- fun1
- echo "函數調用結束"
6. Shell中的變數種類:局部變數和全域變數
局部變數 是在函數中用local 聲明的變數:他的範圍是在函數調用開始到函數結束。
全域變數 在shell指令碼下聲明的變數,他的範圍是整個shell的生存周期內。shell結束,全域變數的周期也結束。
點擊(此處)摺疊或開啟
- #!/bin/bash
- #filename is localvar.sh
- var1="hello shell"
- function fun(){
- #定義局部變數
- local var2="hello local variable"
- echo "在函數中 使用局部變數 var2="$var2
- echo "調用全域變數1 var1="$var1
- }
- fun
- echo "在函數外調用 局部變數 var2="$var2
- echo "調用全域變數2 var1="$var1
補充:環境變數、位置變數、標準變數、特殊變數等
環境變數:用於所有的使用者進程,可以看成是windows下的環境變數,用export定義:如
export LOGNAME="fjsm20", 可以用env或export查看系統內容變數
位置變數:就是調用函數時候的參數,例如:./first.sh 11 22 33 如上面的第3知識點
標準變數:就是bash環境建立的一些標準環境的標量,他會自動去解析,基本都在/etc/profile中定義了有EXINIT,HOME,IFS,LOGNAME,MAIL,MAILCHECK等(引用網上資料)
特殊變數: $# 參數個數,$* 列出所有參數,$!顯示後天指令碼的進程Id ,$$顯示當成指令碼的進程id,$? 最後命令退出的狀態,0 表示正常;
Shell指令碼之let,echo變數