首頁 >運維 >linux運維 >Linux--Bash 和 Shell講解

Linux--Bash 和 Shell講解

巴扎黑
巴扎黑原創
2017-07-18 09:31:282309瀏覽

一、什麼是 Shell?

       狹義的shell指的是指令列方面的軟體,包括基本的Linux操作視窗Bash等,廣義的shell則包括圖形介面的軟體,因為圖形介面其實也可以操作各種驅動程式來呼叫核心進行工作。

       系統合法的 shell 皆寫在 /etc/shells 檔案中。

二、Bash Shell 的基本操作技巧

1、查看前一次登入執行過的命令:vim ~/.bash_history
2、指令與檔案補全功能(Tab鍵)
tab 接在一串指令的第一個字後面,則為指令補全
tab 接在一串指令的第二個字後面,則為檔案補全
3、指令別名設定功能:alias
#alias lm='ls -al'
4、程式化腳本(shell scripts)
5、萬用字元
 
#6、換行輸入\ +[enter]
7、從遊標向前或向後刪除字串[crtl]+u / [crtl] +k
8、從遊標移動到整個指令串的最前面/最後面[crtl] +a / [crtl]+e
#9、使用env 和export 可觀察環境變數;set 可以觀察目前bash 環境下的所有變數
10、連續指令中; 可以讓兩個指令連續執行:
  • #&& 前一個指令必須沒有錯誤訊息

  • #|| 如果正確就不執行第二條。錯誤接著執行第二條

 11、編碼問題:LANG 或 是 LC_ALL設定; locale 列出目前語種。
 12、查看別名的原始程式碼: type -a 別名指令
 13、列出所有的按鍵與按鍵內容:stty -a
 14、設定按鍵功能:stty erase ^h  : 設定crtl + h 向後刪除字元
 15、取得核心版本:echo $(uname -r)
 
#三、Shell Script
        概念:Shell script 是利用shell 的功能所寫的程序,這個程式是使用純文字檔。將一些 shell 的語法與指令寫在裡面,搭配正規表示式、管線指令與資料流重導向等功能,以達到我們的處理指令。
        個人理解:其實Shell script 是window 中的批次指令,它將shell 指令、再加上一點腳本的語法 寫出來的程式。 shell script 用在系統管理上面是很好的工具,但是用在處理大量數值運算上,就不夠好了,因為shell scripts的速度較慢,且使用的CPU資源較多,造成主機資源的分配不良。
        變數:
 變數類型:bash變數型別預設為字串,可以是整數或陣列型,沒有浮點型,所以沒有小數,1/3 結果是0.
 
 變數宣告:預設為字串,可以直接宣告為變數名稱=變數內容(x=123 )這樣,如果要宣告為陣列或整數可以:
  • 變數和變數內容以一個等號=連接,a=123

  • 等號兩邊無法直接接空格符

  • 由英文字母和數字組成,但開頭不能是數字

  • 變數內容中如果有特殊字符,可以用""或''將變數內容結合起來

  • " "中$變量,可以保留原本的特性

  • ##' ' 中$變量,當成一般字元來處理

  • 可以用跳脫字元\ 來使不認識的特殊字元來當成一般字元

  • ##``或()的意義:``或()裡面的指令先被執行,作為外部的輸入訊息
  • #將- 變成+ 可以進行[取消]動作:declare +x sum :
  • 單獨列出變數的類型:declare -p sum
    #升級成環境變數:export PATH
  • 取消變數:unset a
  • 陣列定義:var[1]="123" var[2]="456" var[3]=" 789"
  • ``或()的意義:『或()裡面的指令先被執行,作為外部的輸入訊息
  • 變數$$:出現的數字就是你的PID號碼
  • 變數?:上一個錯誤指令的錯誤碼,如果沒有錯誤就為0

 
變數互動
:read -p "請輸入你的名字:" -t 30 name (-p表示提示世界,-t 表示30秒的輸入時間) 
變數內容的擴展
:PATH="$PATH":/home/bin 
變數內容的刪除
:echo ${path#/*:} 這句話的意思是從/開始到:之間刪除掉最短的字元
 

變數內容的替換

:

 

執行
: 1、直接絕對路徑和相對路徑執行,執行者必須要有腳本的執行權限。
2、全域變數的話可以用bash shell.sh 或sh shell.sh來執行
 
source、 sh script 的執行方式差異?
    sh script 或bash script 都會使用一個新的bash環境來執行腳本中的指令,當子程式完成後,子程式完成後,在子程式內的各個變數或動作將會結束而不會傳回父程式中
    source script 會在父親程式中執行,因此各項動作都會在原本的bash 內生效
 
流程控制(順序)
:shell scripts 依照從上到下、從左到右的順序執行。  
流程控制(條件)
    test -e file 檔案名稱是否存在
  • test -f file 檔案名稱是否存在且為file
  • test -d directory 檔案名稱是否存在且為目錄
  • ##test -r -w -x filename 是否具有可讀可寫可執行的權限
  • test n1 -eq n2 兩數值相等
  • test n1 -ne n2 兩個數值不等
  •             -gt  n1大於n2
  •          與 n# -lt
  • #            -ge  大於等於
  •             -le   小於等於
  •  

    腳本的變數互動還可以用${0}、${1}、${2}、${3}來進行,${0} 表示執行的腳本名稱、${1} 表示輸入的第一個變數、${2}表示輸入的第二個變數、${3} 表示輸入的第三個變數 

     

    if 條件判斷

     

     case 條件判斷

     

    流程控制(循環):

    while 循環

    ## 

     for 迴圈

     

############################################################# for 迴圈########################### ############函數:### #### ##############        注意點:和傳統語言不同,函數必須定義在腳本最前面,以便程式執行的時候可以認識函數。函數形參也是用${1}、${2}、${3} 來傳參,也就是說函數內的${1}/${2}/${3} 辨認的調函數時傳進去的實參。而非 執行腳本傳遞時的參數###### ###             ######

以上是Linux--Bash 和 Shell講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn