shell 基礎知識

Ps:本內容摘自「鳥哥的私房菜」shell

kernel 是【核心】的意思,而shell 是【殼】的意思。核心是操做系統的最底層的
東西,包括了各類的支持硬件的工具!
echo:在一串指令中,還須要由其它的指令提供的信息,可使用quote
[`command`]
若該變量須要在其它子程序執行,則須要以export來使變量變成環境變量。
若該變量爲擴增變量內容時,則需以雙引號及$變量名稱 如:["$PATH":/home]繼續
累加內容bash

#! /bin/sh
echo "hello shell!"
第一行的#!是一個約定標記, 它告訴腳本這段腳本須要什麼解釋器來執行. 網絡

運行shell程序有3種方法:ssh

chmod +x使文件具備可執行權限, 直接運行
直接調用解釋器, 將腳本文件做爲參數傳入 (好比bash hi.sh)
使用source(也可用 . 代替)執行文件
一般狀況下, 最方便的方式就是方式1, 經過方式1執行你須要在腳本第一行寫好這
段腳本由哪一個解釋器來解釋, 而經過方式2來執行則沒有這個限制, 寫了也沒用.
除此以外方式1與方式2執行命令就沒有區別了, 但方式3執行的方式與前兩種都不一樣
:函數

變量
和其它語言同樣Shell中也有變量, 並且更簡單, 但有一些比較特殊的地方.工具

Shell中的變量只有字符串這一種類型
Shell中變量名與變量值沒有長度限制
Shell的變量也容許比較操做和整數操做, 只要變量中的字符串爲數字
使用source執行shell腳本時, 不會建立子進程, 而是在父進程中直接執行!oop


關於某個檔名的【類型】偵測(存在與否),如 test -e filename
-e 該【檔名】是否存在?
-f 該【檔名】是否爲檔案(file)?
-d 該【檔名】是否爲目錄(directory)?
-r,-w,-x 偵測該文件名是否具備【可讀】【可寫】【可執行】的屬性?
-nt (newer than)判斷file1 是否比file2新
-ot (older than)判斷file1是否比file2舊操作系統

斷定字符串的數據:
test -z string: 判斷字符串是否爲0?若string爲空字符串,則爲true
test -n string: 判斷字符串是否非爲0?若string爲空字符串,則返回false。
test str1 = str2: 判斷str1是否等於str2?
test str1 != str2: 判斷str1是否不等於str2?debug

多重條件判斷:
-a(and)兩情況同時成立!
-o (or)兩情況任何一個成立!
! (反相狀態)進程

利用判斷符號[]
判斷符號進行數據的判斷

利用 if ... then
if [條件判斷式]; then
       當條件判讀式成立時,能夠進行的指令工做內容;
fi
多條件的狀況:可使用&& 或||來隔開括號與括號之間。他們的意義是:
&& 表明 AND; || 表明 OR
if [條件判斷式一]; then
       當條件判斷式一成立時,能夠進行的指令工做內容;
elif [條件判斷式二]; then
       當條件判斷式二成立時,能夠進行的指令工做內容;
else
       當條件判斷式一與二均不成立時,能夠進行的指令工做內容;

fi

既定變量內容:
針對既定變量內容使用case in esac。
case $變量名稱 in
  "第一個變量內容")
        程序段
    ;;

  "第二個變量內容")
        程序段
    ;;
*)
     不包含第一個變量內容與第二個變量內容的其它程序執行段
      exit 1
        ;;
esac

通常來講,使用[case $變量 in]這個語法中,當中的那個$變量大體有兩種取得的
方式:
* 直接下達方式:例如[script.sh variable]的方式來直接給予$1變量內容
* 交互式:透過read 這個指令來讓使用者輸入變量的內容。

利用function功能:
函數能夠在shell script當中作出一個相似自訂執行指令的東西。
function的語法是這樣:
function fname(){
    程序段
}
fname 就是咱們的自訂的執行指令名稱~而程序段就是咱們要他執行的內容了
要注意的是,在
shell script 當中, function 的設定必定要在程序的最前面, 這樣纔可以在執
行時被找到可用的程序段喔!

循環(loop)
循環能夠不斷的執行某個程序段落,直到使用者設定的條件達成爲止。
while do done, until do done
通常來講,循環最多見的就是底下這兩種狀態:
while [condition]
do
    程序段落
done
while是[當... 時]即【當condition條件成立時,就進行循環,直到condition的
條件不成立才中止】

until [condition]
do
    程序段落
done
這種方式與while相反,它說的是[當condition條件成立時,就終止循環,不然就持
續進行循環的程序段。]

for ... do ... done
相對於while,until的循環方式是必需要[符合某個條件]的狀態,for這種語法,則
是[已經知道要進行幾回循環]的狀態!
for((初始值;限制值;執行步階))
do
    程序段
done

初始值:某個變量在循環當中的起始值,直接以相似i=1設定好;
限制值;當變量的值在這個限制值的範圍內,就繼續進行循環。
執行步階:每次循環,變量的變化量。

非數字方面的循環:
for var in con1 con2 con3 ... 
do
    程序段
done
第一次循環時,$var 的內容爲 con1;
第二次循環時,$var 的內容爲 con2;
第三次循環時,$var 的內容爲 con3;

shell script 的追蹤與debug
sh [-nvx] scripts.sh
參數:
-n : 不要執行script,僅查詢語法的問題;
-v : 在執行script前,先將scripts的內容輸出到屏幕上;
-x : 將使用到的scirpt內容顯示到屏幕上。

PS:netstat 能夠查詢目前主機有開啓的網絡服務端口(service ports) netstat -tuln 來獲取目前主機有啓動的服務。 常見的port與相關網絡服務的關係是: 80:WWW 22:ssh 21:FTP 25:mail  

相關文章
相關標籤/搜索