1. 變數的定義
1.1 變數名可以由字母、數字、底線組成,但數字不能作為變數名的第一個字元。
1.2 通過賦值符號“=”來定義變數的值,e.g:
myname='test', 字串類型,不解析任何字元
myname="abcd", 雙引號內部會解析$和反斜線特殊字元
num=100; price=1.2345
now_date=`date`, 反引號會執行系統命令。
2. 變數的引用
2.1 使用貨幣符號$加變數名,來引用一個變數的值,e.g:
定義變數:test = "hello demo", 輸出變數:echo $test
2.2 變數名外面的花括弧, 主要是為了協助解譯器識別變數的邊界,e.g.:
language = 'Java' echo "I am a ${language}Coder", 在這種情況下,如果不加花括弧,解譯器會誤以為是飲用lanuageCoder這個變數的值,而導致出錯。
3. 簡單樣本:
4. 環境變數
4.1 環境變數是指在作業系統中用來質地ing作業系統運行環境的一些參數,e.g. PATH等。
4.2 常見的環境變數:
PATH: 系統路徑
HOME: 目前使用者家目錄
HISTSIZE: 儲存曆史命令紀錄的條數
LOGNAME: 目前使用者登入名稱
HOATNAME: 主機名稱
SHELL: 目前使用者用的是哪種shell
LANG: 和語言相關的環境變數
MAIL: 目前使用者的郵件存放目錄
4.3 查看環境變數:
env: 顯示所有環境變數
5. 局部變數
5.1 在shell指令碼中由使用者自訂的變數:範圍為從被定義的地方開始,到shell指令碼結束為止,起範圍為本指令碼,離開本指令碼,變數無效,e .g.:
編寫一個指令碼,定義一個變數,輸出結果,退出指令碼,再輸出這個變數,將看不到結果:
5.2 在使用者登入的shell中定義的變數,重新登入後該變數消失,e.g.
6. 預定義變數
6.1 預定義變數和環境變數類似,也是在shell一開始就定義了的變數。不同的是,使用者只能根據shell的定義來使用這些變數,而不能重定義它。所有的預定義變數都是由$符和另一個符號組成的。
6.2 常用的shell預定義變數:
$#: 位置參數的數量
$*: 所有位置參數的內容
$?: 命令執行後返回的狀態,0表示成功,非0表示失敗
$$: 當前進程的進程號
$!: 後台啟動並執行最後一個進程號
$0: 當前執行的進程名
6.2 簡單樣本:
7. 輸出與輸入
7.1 echo命令發送資料到標準的輸出裝置,資料採用的是字串方式,echo中有兩個重要參數:
-e: 識別輸出內容裡的逸出序列,e.g. echo -e "hello\tworld"
-n: 忽略結尾的換行, e.g:echo -e -n "hello\tworld"
7.2 printf命令和echo的功能類似,printf也可以輸出變數,而且可以按照格式輸出變數,不過printf的預設輸出沒有換行,換行需要自己加“\n”,e.g:
7.3 read命令讀取標準輸入裝置的下一行,標準輸入中的新一行到分行符號前的所有字元都會被讀取,並賦予給對應的變數,e .g.:
7.4 "<<" 是一種重新導向符,重新導向指令檔中的一行作為到一個命令的輸入,操作符 <<被放在輸入重新導向的命令之後,緊跟<<的各行作為命令的輸入,輸入的結尾通過檔案結束符(ctrl+D)表示,也可以自己定義定界符,定界符後的單詞作為輸入各行結束的定界符,另外定界符需要頂格寫,e.g. 通過指令碼自動連接ftp伺服器來下載資料:
#!/bin/shftpserver=127.0.0.1ftp -i -n <<! #。為定界符open $ftpserverusr account password #具體的操作帳號和密碼cd testdirbinget test.txtbye!