1. 程式人生 > >實驗樓-高級Bash腳本編程指南

實驗樓-高級Bash腳本編程指南

文件file 編寫 /var/ 等價 可執行 -bash unix col 權限

實驗1.Bash介紹與入門

1.簡介:Bash是一個為GNU計劃編寫的Unix shell,它是許多Linux平臺默認使用的shell

    shell是一個命令解釋器,是介於操作系統內核與用戶之間的一個絕緣層。所有的UNIX命令和工具再加上公共程序,對於Shell腳本來說,都是可調用的。

2.運行Bash腳本的方式: 1)使用shell來執行:sh hello.sh

           2)使用Bash來執行:bash hello.sh

           3)還可以讓腳本本身就具有可執行權限,通過chmod命令可以修改:chmod u+rx hello.sh 然後運行 ./hello.sh

3.使用重定向:>為重定向符號,例如將輸出文件保存在一個txt中, eg: echo "hello world">my.txt

4.使用腳本清除/var/log下的log文件:

  /dev/null 可以理解為一個黑洞,裏面是空的,什麽東西都可以往裏面扔,扔了就沒了。

實驗2.Bash中的特殊字符(上)

1.註釋:#為註釋

    #!用於指定當前腳本的解釋器,這裏用bash,應該知名其完整路徑,即#!/bin/bash

    在echo中轉義的#是不能作為註釋的,eg:echo The \# here doesn‘t begin a comment

2.分號:1)使用分號可以在同一行上寫兩個或兩個以上的命令

    2)使用雙分號可以終止case選項

3.點號:等價於source命令,用於在當前Bash環境下讀取並執行filename.sh中的命令

4.引號:1)“ ”:雙引號會組織string中大部分特殊字符

    2)‘ ’:單引號會組織string中所有特殊字符的解釋,這是一種比雙引號更強烈的形式

5.斜線和反斜線:1)斜線 /:文件名路徑分隔符,分割文件名不同的部分;也可以用作除法算術操作符。註意在Linux中表示路徑的時候,許多個/和一個/是一樣的效果

        2)反斜線:一種對單字符的引用機制,轉義表示

6.反引號:命令替換,command結構可以將命令的輸出賦值到一個變量中去。反引號中的命令會優先執行

  eg: cp `mkdir back` hello.sh back

7.冒號:1)空命令:等價於“NOP”,也可以被認為與shell的內建命令true作用相同,退出碼是(0),即while:與while true語義相同

    2)變量擴展/子串替換

        與>重定向操作符結合使用時,將會把一個文件清空,但不會修改這個文件的權限,如果之前這個文件不存在,就創建這個文件

        與>>重定向操作符結合使用時,將不會對預先存在的目標文件產生任何影響,如果這個文件不存在,就創建這個文件

    3)註釋行(不推薦)

    4)用來在/etc/passwd和$PATH變量中做分隔符

8.冒號

  1)測試操作符:在一個雙括號結構中,?就是c語言的三元操作符

9.美元符號($)

  1)變量替換

  2)命令替換

實驗3-bash中的特殊字符(下)

1.小括號()

  1)命令組:在括號中的命令列表,會作為一個子shell來運行。由於是在子shell中,所以腳本剩下的部分是不可用的。父腳本,即腳本本身,將不能夠讀取在子進程中創建的變量。

  2)初始化數組:arr=(1 2 4 5)

          echo ${arr[2]}

2.大括號{}

  1)文件名擴展,eg cp t.{txt,back}---沒太懂

  2)代碼塊,又被稱為內部組,這個結構事實上創建了一個匿名函數。然而,與標準函數不同的是,其聲明的變量,對於腳本其他部分的代碼來說還是可見的

3.中括號[]

  1)條件測試:條件測試放在[]中,其中[shell內建test命令的一部分,不是/usr/bin/test中的外部命令的一個鏈接,雙中括號[[ ]]也用作條件測試

  2)數組元素:數組中每個元素的標號

4.尖括號(< 和 >)

  1)重定向:test.sh>filename 重定向test.sh的輸出到文件filename中,如果filename存在,那麽將會被覆蓋

        test.sh&>filename 重定向test.sh的stdout(標準輸出)和stderr(標準錯誤)到filename中

        test.sh>&2重定向test.sh的stdout到stderr中

        test.sh>>filename把test.sh的輸出追加到文件filename中,如果filename不存在將會被創建

5.豎線(|)

  1)管道:分析前邊命令的輸出,並將輸出作為後邊命令的輸入,這是一種產生命令鏈的好方法。eg: ls -l | ./test.sh #把ls -1的輸出輸送到一個腳本中

6.破折號(-)

  1)選項,前綴:在所有的命令內如果想使用選項參數的話都要加上前綴

  2)用於重定向stdin或stdout

7.波浪號(~):表示home目錄

實驗4-變量和參數

1.變量賦值:賦值時等號前後一定不要有空格;等號既可以做條件測試操作,也可以用於賦值操作

 變量引用:引用一個變量將保留其中的空白,如果是變量替換就不會有了,所以在shell中如果想打印空白字符,需要用雙引號進行引用"$hello"

 多變量設置:同一行要設置多個變量,應該用空格隔開

2.變量不區分類型:與大多數編譯型語言不同,Bash不區分變量的類型。本質上,Bash變量都是字符串,但是依賴於具體的上下文,Bash也允許比較操作和整數操作,其中的關鍵因素是,為變量賦的值是否只有數字。

case "$varname" in
    [a-z]) echo "abc";;
    [0-9]) echo "123";;
esac

實驗樓-高級Bash腳本編程指南