Bash簡介:
Bash(GNU Bourne-Again Shell)是一個為GNU計劃編寫的Unix shell,它是許多Linux平臺默認使用的shell。
shell是一個命令解釋器,是介于操作系統內核與用戶之間的一個絕緣層。準確地說,它也是能力很強的計算機語言,被稱為解釋性語言或腳本語言。
不管學習哪種語言,我們程序猿編寫的第一個程序就是:hello world,shell腳本也不例外。
vim hello.sh
運行shell腳本的方式:
sh hello.sh
bash hello.sh
或者可以給其添加可執行權限:
chmod u+x hello.sh
./hello.sh
下面來描述一個小的腳本程序(用于清除/var/log下的log文件):
vim cleanlogs.sh
/dev/null 是指內容為空
運行腳本后,就可以清除文件啦。
可是,原因是什么呢,,為什么這樣就可以清除文件了呢。首先,是因為 /dev/null 是指內容為空,將空的內容寫進messages和wtmp中,就會使文件的內容全部為空,這樣就清空了。
入門Bash:
1. Bash中#是代表注釋的意思,(如果需要用到’#’字符的話,需要轉義為\#哦)#!用于解釋當前腳本的解釋器,這里用的是bash,所以用全路徑/bin/bash。
2. 在shell腳本中是用;作為命令分隔符,一行中如果有分號,則還可以寫其他命令。
我們還是以一個例子來說明吧:
這個例子是檢測是否有ttt.sh這個文件,如果有的話,輸出文件存在,然后將其拷貝到ttt.sh.bak中,否則輸出文件不存在,然后創建一個ttt.sh的文件。最后輸出文件測試完成。(這里的條件分支,后續會具體講到哦~)
執行腳本后sh hello.sh,結果為:
3. 我們用雙分號”;;”來終止case命令,相當于是C語言中的break。
運行結果為:
123
4. 關于引號,主要有雙引號和單引號
雙引號:對引號中的字符串中的大部分特殊字符的解釋進行阻止
單引號:對引號中的字符串中的大部分特殊字符的解釋進行阻止
對于雙引號來說,它會將雙引號中的值當做是一個變量,而對于單引號,它會看成是一個字符串
5.關于斜線,有斜線,反斜線,一般情況下,斜線(/)看做是根目錄,或者是路徑分隔符,注意這里,一個斜線(/)和多個斜線()是一樣的。那么,反斜線(\)的作用呢,是用來轉義的,也可以轉義單引號和雙引號的內容,這里就會將單引號和雙引號區分開來而不用被解釋成特殊的字符。
6. 關于反引號,“將優先執行反引號中的內容;舉個例子吧:
這里,我們將先執行mkdir back,創建好back目錄后,再將test.sh拷貝到back目錄下。
7.關于冒號,表示空,是shell的一個內建命令,其退出碼為0。和C語言中的true類似。
這樣的話,結果就會是一個永無止境的死循環了。一直輸出endless loop
當然,:也可以什么都不做,當做一個占位符,如下例子:
結果為:
:還有另外一個作用是用于清空文件中的內容
:> test.sh
這時,就把test.sh中的內容清空了,文件權限等并不會受影響哦
:還用來做分隔符:
echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games
8.關于問號,我們通常用在三目運算符中
9.關于$符號,我們用在變量替換中
結果為:
$還用于命令替換,
cd $(echo back)
pwd
10. 關于小括號,代表是子shell中創建的內容,所以在父腳本中不可見。如下:
結果為:
這個倒是和C語言中的作用域{ }有些類似。
11. 初始化數組,和C語言中的數組類似,只是這里是用空格將數據分隔開。
結果為:
12.關于大括號{ },在大括號中不允許有空白哦。可對于文件進行操作,其次可進行代碼塊的區分,也可以當做塊域
13.關于中括號[ ],是條件測試的塊域。之前寫例子的時候也有所涉及,就不多說了。[ ]還用來表示數組的元素,例如arr[1];取元素的編號
14.尖括號>,>>,是重定向。前面也涉及到了。
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 不存在的話,將會被創建。
15.關于管道:|,這個之后會詳細講解
16.破折號,’-‘用于顯示選項參數時經常會用到。
ls -l
if [ 5 -eq 0] then