Shell介紹與入門

來源:互聯網
上載者:User

標籤:

1. 什麼是Bash?

Bash是一個為GNU計劃編寫的Unix Shell, 也是許多Linux平台預設使用的Shell。

Shell是一個命令直譯器,是介於作業系統核心和使用者之間的一個絕緣層。同時, Shell也是一種解釋性語言或指令碼語言。它通過將系統調用、公用程式、工具和編譯過的二進位程式"粘合"在一起來建立應用, 也稱"膠水語言"。

2. 為什麼學Bash?

對於任何想適當精通一些系統管理的人來說, 掌握Shell指令碼的編寫都是最基本的。

3. Bash指令碼的運行方式:

# 使用shell來執行$ sh script.sh# 使用bash來執行$ bash script.sh# 賦予指令碼的所有者該執行許可權,允許該使用者執行該指令碼$ chmod u+rx script.sh# 執行命令,這將使用指令碼第一行指定的shell來執行,如果指定shell不存在,將使用系統預設shell來執行$  ./script.sh

4. 清空/var/log下的log檔案:

#!/bin/bash# 初始化一個變數LOG_DIR=/var/logcd $LOG_DIRcat /dev/null > messagescat /dev/null > wtmpecho "Logs cleaned up."exit

5. Bash中的特殊字元

1). # 注釋

行首以"#"開頭(除"#!"之外)的是注釋。"#!", 用於指定當前指令碼的解譯器(使用絕對路徑)

 #!/bin/bash echo "The # here dose not begin a comment." echo ‘The # here dose not begin a comment.‘ echo The \# here dose not begin a comment. echo The # 這裡開始一個注釋 echo ${PATH#*:}         # 參數替換,不是一個注釋 echo $(( 2#101011 ))    # 數制轉換(使用二進位表示),不是一個注釋

2). ; 命令分隔字元

使用";"可以在同一行上寫多個命令

echo hello; echo world

3). ;; case語句選項終止標記

使用";;"可以終止case選項

 #!/bin/bash varname=b case "$varname" in     [a-z]) echo "alphabet"
;; [0-9]) echo "number"
;; esac

4). . 點號 等價於source命令

. script.shsource script.sh

5). " 雙引號

將逸出字元視為一般字元, 允許Shell變數、Shell命令替換

6). ‘ 單引號

將逸出字元都是為一般字元, 不允許Shell變數、Shell命令提換

7). / 斜線

檔案名稱路徑分隔字元, 除法運算子

8). \ 反斜線

取消逸出字元的特殊含義

9). ` 反冒號

命令替換

10). : 冒號 

i. 空命令, 與Shell內建的命令true作用相同

 #!/bin/bash while :    # while true do     echo "endless loop" done
 #!/bin/bash condition=5 if condition>0 then :   # 什麼都不做,退出分支 else     echo "$condition" fi

ii. 變數擴充/字串替換

 $ : > file   # 檔案“file”現在被清空了 # 與 cat /dev/null > file 的作用相同 # 然而,這並不會產生一個新的進程, 因為“:”是一個內建命令

11). ? 測試操作符

等價於C語言中的三元操作符

#!/bin/basha=10(( t=a<2?8:9 ))echo $techo $((a<2?8:9))

12). $ 變數替換

13). $( ) 命令替換

14). () 小括弧

i. 命令組

在括弧中的命令列表, 將會作為一個子Shell來執行(子Shell中的變數在父Shell中不可見):

#!/bin/basha = 123( a=321; )echo $a   # 123

ii. 初始化數組

#!/bin/basharray=(1 2 3 4 5)echo ${array}

15). {} 大括弧

i. 檔案名稱擴充

mv file{,.bak}

注意: 大括弧中, 不允許有空白, 除非這個空白被引用或轉義!

ii. 代碼塊

等同於與一個匿名函數, 但其內聲明的變數, 在之後的代碼仍可見

#!/bin/basha=123{ a=321; }echo $a  # 321

16). [] 中括弧

i. 條件測試

[ 是Shell內建test命令的一部分, 不是/usr/bin/test中的外部命令的一個連結

#!/bin/basha=5if [ $a -lt 10 ] ; then    echo $aelse    echo 10fi

注意: [[ ]] 雙中括弧也可用於條件測試:

[[ 2 -lt 1 ]] || echo "false"[[ 1 -lt 2 ]] && echo "true"

ii. 數組元素

#!/bin/basharray=(1 2 3 4 5)array[3]=10echo ${array[3]}

17). <, > 角括弧

i. 重新導向

> 標準輸出重新導向, &> 標準輸出、標準錯誤輸出重新導向, >&2標準輸出重新導向到標準錯誤輸出, >> 追加

18). | 豎線  管道

cat file | tr ‘a-z‘ ‘A-Z‘

19). - 破折號

i. 選項, 首碼

   -eq, -le, -ge, ...

ii. 用於重新導向stdin, stdout

#!/bin/bashBACKUPFILE=backup-$(date +%m-%d-%Y)# 在備份檔案中嵌入時間.archive=${1:-$BACKUPFILE}#  如果在命令列中沒有指定備份檔案的檔案名稱,#+ 那麼將預設使用"backup-MM-DD-YYYY.tar.gz".tar cvf - `find . -mtime -1 -type f -print` > $archive.targzip $archive.tarecho "Directory $PWD backed up in archive file \"$archive.tar.gz\"."exit 0

20). ~ 波浪號

i. 使用者主目錄

6. 變數替換

echo $HOMEecho "$HOME"echo ‘$HOME‘

注: 如果沒有引號, 將自動刪除輸出中多餘的空白符!

7. 變數賦值 =

注意: 賦值操作前後不能有空白!

8. 特殊變數

i. 局部變數: 只在代碼塊或函數中可見

ii. 環境變數: Shell中定義的變數

iii. 位置參數: $0, $1, ... $9, ${10}, ${11},...

     $*, [email protected]

 

Shell介紹與入門

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.