標籤:長度 情況 number 退出 enter ike font 調試 中括弧
shell及其他解釋型語言的一般格式?
#!/bin/bash #shell指令碼的首行格式 #!/usr/bin/python #python指令碼的格式 #!/usr/bin/perl #perl指令碼的格式 #Description: #"#"開頭的單個井字型大小是注釋符,其後內容不當做指令碼程式執行 COMMAND #指令碼的編程內容部分,命令的堆砌,單一命令的組合完成複雜任務
怎樣使得定義的變數生效?
1.~]# . /etc/profile # 點後跟定義變數檔案2.~]# source /etc/profile #直接在當前shell生效
什麼是位置變數?
用來描述參數位置的變數. $0:代表指令碼本身的名字 $1:指令碼的第一個參數 $2:指令碼的第二個參數 ... ${10}:指令碼的第10個參數 #注:從第十個開始以後要加大括弧 $*:指令碼所有參數,以一個整體字串儲存 [email protected]:指令碼所有參數,以單個參數作為一個整體儲存 $#:指令碼所有參數的總個數
如何定義一個變數?
1.declare -i #定義整型 -x #定義環境 -r #唯讀變數2.export variable=expression #定義環境變數
變數如何引用?
1.$variable #$後跟變數名2.${variable} #可加大括弧
如何在指令碼中調用命令的執行結果?
1.$(command) #命令的執行結果可賦值給變數2.`command` #反引號同樣是命令的執行結果
怎樣得知系統定義了哪些變數?
1.set #查看系統定義的所有變數2.env/printenv #查看定義的所有環境變數
該怎樣取消一已定義好的變數?
1.unset variable#取消或者刪除變數 注:variable= #變數賦值為空白不等同於變數被取消
查看bashell的版本?
echo $BASH_VERSION
幾個常見的環境變數:
MAIL:儲存mail檔案MAILCHECK:隔多長時間巡檢一次並發送mailSHLVL:當前處於多少層shellRANDOM:軟體類比實現隨機數變數
1 Shell中的特殊符號
1.1 $ 貨幣符號。用來表示變數的值。如變數NAME的值為Mike,則使用$NAME就可以得到“Mike”這個值。
1.2 # 井號。除了做為超級使用者的提示符之外,還可以在指令碼中做為注釋的開頭字母,每一行語句中,從#號開始的部分就不執行了。
1.3 “” 雙引號。shell不會將一對雙引號之間的文本中的大多數特殊字元進行解釋,如#不再是注釋的開頭,它只表示一個井號“#”。但$仍然保持特殊含義。(在雙引號中的$加變數名,即:$PARAM_NAME,依然會轉換成變數的值。)
1.3.1 雙引號對於某些特殊符號是不起作用的, 例如:”,$,\,`(反引號)
1.3.2 雙引號和單引號不能嵌套。即:echo ‘””’ 輸出””, echo “’’” 輸出’’
1.4 ‘’ 單引號。shell不會將一對單引號之間的任何字元做特殊解釋。(在雙引號中的$加變數名,即:$PARAM_NAME,不會轉換成變數的值。)
1.4.1 echo “$HOME” (結果:/home/xiongguoan)
1.5 `` 倒引號。命令替換。在倒引號內部的shell命令首先被執行,其結果輸出代替用倒引號括起來的文本,不過特殊字元會被shell解釋。
1.5.1 echo ‘$HOME’ (結果:$HOME)
1.6 \ 斜杠。用來去掉在shell解釋中字元的特殊含義。在文本中,跟在\後面的一個字元不會被shell特殊解釋,但其餘的不受影響。
1.7 []中括弧, 主要是用來測試條件的,通常放在if語句的後面。 (不過還是不太明白),但是中括弧本身不會在測試語句執行後消失。
1.7.1 echo [$HOME] (結果:出現錯誤)
1.7.2 echo [$HOME ] (結果:[/home/xiongguoan ]) (注意:HOME後面有空格哦。)
1.7.3 echo [$HOME –eq ‘/xiong’] (結果:[/home/xiongguoan –eq /xiong])
1.8 {}大括弧,主要是和$符號配合,作為字串串連來使用
1.8.1 echo ${HOME}ismydir (結果:/home/xiongguoanismydir)
2 預定義的變數
2.1 特殊變數
$ shell變數名的開始,如$var
| 管道,將標準輸出轉到下一個命令的標準輸入
$# 記錄傳遞給Shell的自變數個數
# 注釋開始
& 在後台執行一個進程
? 匹配一個字元
* 匹配0到多個字元(與DOS不同,可在檔案名稱中間使用,並且含.)
$- 使用set及執行時傳遞給shell的標誌位
$! 最後一個子進程的進程號
$? 取最近一次命令執行後的退出狀態(返回碼)
$* 傳遞給shell script的參數
[email protected] 所有參數,個別的用雙引號括起來
$0 當前shell的名字
$n (n:1-) 位置參數
$$ 進程標識號(Process Identifier Number, PID)
> 輸出重新導向
< 輸入重新導向
>> 輸出重新導向(追加方式)
[] 列出字元變化範圍,如[a-z]
2.2 代值變數
* 任一字元串
? 一個任一字元
[abc] a, b, c三者中之一
[a-n] 從a到n的任一字元
2.3 特殊字元的表達
\b 退回
\c 列印一行時沒有分行符號 這個我們經常會用到
\f 換頁
\r 斷行符號
\t 製表
\v 垂直製表
\\ 反斜線本身
2.4 其他字元
2.4.1 分號
; 表示一行結束
2.4.2 圓括弧
() 表示在新的子shell中執行括弧內的命令(這樣可以不改變當前shell的狀態。)
但是圓括弧在單/雙引號內失去作用,只作為一般字元。
2.4.3 花括弧
2.4.3.1 分割命令的用法
與圓括弧相似,但是:1. 花括弧內的命令在當前shell中執行;2.花括弧必須作為命令的第一個字元出現。
2.4.3.2 引用變數的用法
在$後面,表示變數名的開始和結束
2.4.4 方括弧
相當與test命令,用來執行測試條件,通常用在需要判斷條件的語句後面,例如:if,while等等。
3 設定變數
3.1 格式:VARNAME=value (i.e. PARAM=’hello’)
3.2 注意:
3.2.1 等號的前後不能有空格
3.2.2 如果變數的值是一個命令的執行結果,請加上反引號(`)。
4 引用變數
4.1 $VARNAME
4.1.1 e.i. echo $HOME (結果:/home/xiongguoan)
4.2 變數預設值
4.2.1 在引用一個變數的時候可以設定預設值。如果在此之前,該變數已經設定了值,則此預設值無效。如果此時變數沒有被設定值,則使用此預設值(但是沒有改變此變數的值)。
4.2.2 echo Hello ${UNAME:-there} #其中there是UNAME的預設值
4.2.3 其他關於預設值與判讀變數的方法:
利用大括弧表示變數替換
表示形式 |
說明 |
${VARIABLE} |
基本變數替換。大括弧限定變數名的開始和結束 |
${VARIABLE:-DEFAULT} |
如果VARIABLE沒有值,則這種表示形式返回DEFAULT的值 |
${VARIABLE:=DEFAULT} |
如果VARIABLE沒有值,則這種表達形式返回DEFAULT的值。另外,如果VARIABLE沒有設定,則把DEFAULT的值賦予它 |
${VARIABLE:+VALUE} |
如果VARIABLE被設定,則這種表示形式返回VALUE;否則,返回一個空串 |
${# VARIABLE} |
這種表示形式返回VARIABLE值的長度,除非VARIABLE是* 或者@在為*或者@的特殊情況下,則返回[email protected]所表示的元素的個數。要記住,$ @儲存傳給該指令碼的參數清單 |
${VARIABLE:?MESSAGE} |
如果VARIABLE沒有值,則這種表示形式返回MESSAGE的值。Shell也顯示出VARIABLE的名字,所以這種形式對捕獲得錯誤很有用 |
4.2.4 注意:
4.2.4.1 使用${VALIABLE:?MESSAGE},如果發現此變數此時沒有值,則指令碼停止運行並顯示行號和變數名稱。 主要用於調試。
4.2.4.2
5 位置變數
5.1 使用$1,$2,$3…$9,${10},${11}…來代表輸入的參數。其中$0代表被執行的命令或者指令碼的名字。$1,$2…代表輸入的第1,2…個參數
5.2 例子:
# cat count.sh#!/bin/sh
A=$1 # 將位置$1的數值讀入,並賦給變數A
B=$2 # 將位置$2的數值讀入,並賦給變數B
C=$[$A+$B] # 將變數A與B的值相加,將結果賦給C
echo $C # 顯示C的數值
結果:
# ./count.sh 3 6
9
# ./count.sh 34 28
62
5.3 [email protected]和$*代表參數的列表,$#代表參數的數量 (不知道[email protected]和$*之間的差別)
6 運算子和優先順序
Shell運算子和它們的優先順序順序
層級 |
運算子 |
說明 |
13 |
-, + |
單目負、單目正 |
12 |
!, ~ |
邏輯非、按位取反或補碼 |
11 |
* , / , % |
乘、除、模數 |
10 |
+, - |
加、減 |
9 |
<< , >> |
按位左移、按位右移 |
8 |
< =, > =, < , > |
小於或等於、大於或等於、小於、大於 |
7 |
= = , ! = |
等於、不等於 |
6 |
& |
按位與 |
5 |
^ |
按位異或 |
4 |
| |
按位或 |
3 |
&& |
邏輯與 |
2 |
| | |
邏輯或 |
1 |
=, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> = |
賦值、運算且賦值 |
shell指令碼常用命令(HandBook_1)