------------恢復內容開始------------
tips:
,{}使用時前後要空格 [ asb=123 ]
1.小括號(( ))
1)命令組
在括號中的命令列表,將會作為乙個子 shell 來執行。
在括號中的變數,由於是在子shell中,所以對於指令碼剩下的部分是不可用的。父程序,也就是指令碼本身,將不能夠讀取在子程序中建立的變數,也就是在子shell 中建立的變數。如:
$ vim test20.sh
輸入**:
#!/bin/bash
a=123
( a=321; )
echo "$a" #a的值為123而不是321,因為括號將判斷為區域性變數
執行**:
$ bash test20.sh
a = 123
在圓括號中 a 變數,更像是乙個區域性變數。
2)初始化陣列
建立陣列
$ vim test21.sh
輸入**:
#!/bin/bash
arr=(1 4 5 7 9 21)
echo $ # get a value of arr
執行**:
$ bash test21.sh
72.
大括號()
1)檔名擴充套件
複製 t.txt 的內容到 t.back 中
$ vim test22.sh
輸入**:
#!/bin/bash
if [ ! -w 't.txt' ];
then
touch t.txt
fiecho 'test text' >> t.txt
cp t.
執行**:
$ bash test22.sh
檢視執行結果:
$ ls
$ cat t.txt
$ cat t.back
注意: 在大括號中,不允許有空白,除非這個空白被引用或轉義。
2)**塊
**塊,又被稱為內部組,這個結構事實上建立了乙個匿名函式(乙個沒有名字的函式)。然而,與「標準」函式不同的是,在其中宣告的變數,對於指令碼其他部分的**來說還是可見的。
$ vim test23.sh
輸入**:
#!/bin/bash
a=123
echo "a = $a"
執行**:
$ bash test23.sh
a = 321
變數 a 的值被更改了。
3.中括號([ ])
1)條件測試
條件測試表示式放在[ ]中。下列練習中的-lt (less than)表示小於號。
雙中括號([[ ]])也用作條件測試(判斷)
2)陣列元素
在乙個array結構的上下文中,中括號用來引用陣列中每個元素的編號。
4.尖括號(< 和 >)
重定向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.豎線(|)
管道分析前邊命令的輸出,並將輸出作為後邊命令的輸入。這是一種產生命令鏈的好方法。
$ vim test26.sh
輸入**:
#!/bin/bash
tr 'a-z' 'a-z'
exit 0
現在讓我們輸送ls -l的輸出到乙個指令碼中:
$ chmod 755 test26.sh
$ ls -l | ./test26.sh
輸出的內容均變為了大寫字母。
6.破折號(-)
1)選項,字首
在所有的命令內如果想使用選項引數的話,前邊都要加上「-」。
if [ "$a" -eq "$b" ]
2)用於重定向stdin或stdout
下面指令碼用於備份最後24小時當前目錄下所有修改的檔案.
$ vim test28.sh
輸入**:
#!/bin/bash
backupfile=backup-$(date +%m-%d-%y)
# 在備份檔案中嵌入時間.
archive=$
# 如果在命令列中沒有指定備份檔案的檔名,
# 那麼將預設使用"backup-mm-dd-yyyy.tar.gz".
tar cvf - `find . -mtime -1 -type f -print` > $archive.tar
gzip $archive.tar
echo "directory $pwd backed up in archive file \"$archive.tar.gz\"."
exit 0
執行**:
$ bash test28.sh
$ ls
------------恢復內容結束------------ Bash常用特殊字元
bash 常用特殊字元 萬用字元,代表乙個或多個字元或數字 萬用字元,代表乙個字母 批註說明 轉義符號 分隔兩個管道命令的界定 連續性命令的界定,在一行輸入多條命令 使用者家目錄 變數前需要加的變數取代值 將指令移動到後台執行 邏輯運算子非 路徑分隔符 輸出重導向,分別是取代 和 累加 單引號,沒有...
Bash 特殊字元 下
test.sh filename 重定向 test.sh 的輸出到檔案 filename 中。如果 filename 存在的話,那麼將會被覆蓋。test.sh filename 重定向 test.sh 的 stdout 標準輸出 和 stderr 標準錯誤 到 filename 中。test.sh ...
Bash中的特殊字元
行首以 開頭 除 之外 的是注釋。是用於指定當前指令碼的直譯器,我們這裡為bash,且應該指明完整路徑,所以為 bin bash 當然,在echo中轉義的 是不能作為注釋的 vim test.sh輸入如下 並儲存。中文為注釋,無需要輸入 bin bash echo the here dose not...