認識與學習bash
認識bash這個shell
- 硬體,核心與shell
- 硬體:整個系統中的實體工作者,包含硬碟,顯示卡,網路卡,cpu等。
- 核心:真正控制硬碟工作的,有cpu程式,記憶體管理,磁碟輸入輸出等工作。
- shell:狹義的shell只命令列方面的軟體;廣義的是指只要能夠操作應用程式介面的都叫做shell,本文講的是命令列介面的shell(bash)。
- bash shell的功能
- 命令記憶功能:(history)
- 命令補全功能 :(tab)鍵
- 命令別名設定功能:(alias)
- 作業控制,前臺,後臺控制
- 程式指令碼:shell script
- bash shell的內建命令查詢:type
shell的變數功能
- 什麼是變數:以一組文字或符號等,來代替比較複雜或者容易變動的資料。
- 變數的顯示:echo 例如:echo $PATH
- 變數的設定規則:
- 變數名只能是英文字母與數字,但不能以數字開頭
- 變數名與變數內容之間用=號連線,不能直接接空格字元
- 變數內容若有空格符,可使用單引號或雙引號,注意單引號不解析變數,原樣輸出
- 可使用轉義字元“\”轉義特殊字元
- 該變數增加變數內容時,例如:PATH="$PATH":/home/zj
- 若該變數需要在其它子程式執行,則需要以export來使變數變成環境變數,例如:export PATH
- 取消變數:unset 變數名
- 環境變數的功能
- 檢視環境變數:env
- 自定義變數轉成環境變數:export
- 子程式僅會繼承父程式的環境變數,不會繼承父程式的自定義變數
- 變數鍵盤讀取,陣列與宣告:read,array,decla
- 變數內容的刪除,替代與替換:
從前面開始刪除:
- #:刪除最短的 例如:echo ${path#/:} 把path中/到:最短的刪除,號為萬用字元
- ##:刪除最長的 例如:echo ${path##/:} 把path中/到:最長的刪除,號為萬用字元,即前面的目錄都刪除了,僅保留最後一個目錄。
從後面開始刪除:
- %:刪除最短的 例如:echo ${path%/:} 把path中/到:最短的刪除,號為萬用字元
- %%:刪除最長的 例如:echo ${path%%/:} 把path中/到:最長的刪除,號為萬用字元
變數的替換:
例如:把path變數中的sbin替換為大寫的SBIN
echo ${path/sbin/SBIN} 只替換第一個
echo ${path//sbin/SBIN} 替換所有
- 命令別名與歷史命令:alias , unalias,history
bash shell的操作環境
- 路徑與命令的查詢順序
- 以相對絕對路徑執行命令
- 由alias找到命令來執行
- 由bash的內建命令來執行
- 通過$PATH這個變數的順序找到的第一個命令來執行
- bash的環境配置檔案
- loginshell 取得bash時需要完整的登入流程,需要使用者輸入登入賬號與密碼:系統整體設定檔案/etc/profile與~/.bash_profile
- non-login shell 取得bash的介面方法不需要重複登入,以圖形介面啟動終端機,並不需要再次輸入賬號與密碼:~/.bashrc
資料流重定向
- 標準輸入(stdin):程式碼為0,使用<或<<
- 標準輸出(stdout):程式碼為1,使用>或>>
- 標準錯誤輸出(stderr):程式碼為2 ,使用2>或2>>
- 命令執行的判斷依據:;,&&,,||
管道命令
- 選取命令:cut,grep
- 排序命令:sort,wc,uniq
- 雙向重定向:tee
- 字元轉換命令:tr,col,join,paste,expand
- 引數代換:xargs
- 關於減號-的用途:某些命令需要用到檔名來進行處理時,該stdin與stdout可以利用減號來代替
tar -cvf - /home | tar -xvf -
將home裡面的檔案打包經管道傳送給後面的tar -xvf -