shell指令碼常用命令(HandBook_1)

來源:互聯網
上載者:User

標籤:長度   情況   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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.