內核是Linux系統的心臟,從開機自檢就駐留在計算機的內存中,直到計算機關閉爲止;而用戶的應用程序存儲在計算機的硬盤上,僅當須要時才被調入內存; 而Shell獨立於內核,是鏈接內核和應用程序的橋樑,並由輸入設備讀取命令,再將其轉爲計算機能夠理解的機械碼,Linux內核才能執行該命令
(能夠理解爲 Shell是一種應用程序,當用戶登陸 Linux系統時,Shell就會被調入內存去執行;Shell提供了用戶與內核進行交互操做的一種接口,接收用戶輸入的命令,並把它送入內核去執行)shell
Shell不但能夠與用戶進行逐個命令交互執行,還能夠經過腳本語言進行編程;經過對Shell進行編程,可以使大量任務自動化,對系統管理、系統維護方面特別有用編程
Shell腳本的基本結構bash
Shell腳本的運行函數
使用變量:在Shell程序中全部變量保存的值都是字符串學習
變量類型 | 說明 |
---|---|
環境變量 | 與Shell的執行環境相關的一些變量,如PATH、HOME等,用戶可從新定義。(1)環境變量的建立:export,export ABCD=2;(2)環境變量的查看:使用echo命令查看單個環境變量,如echo $PATH;使用printenv查看全部環境變量;使用set查看全部本地定義的環境變量 |
預約義變量 | 用戶不能修改,只能引用的變量。由「$」+其餘符號組成 |
位置變量 | 在執行腳本時,傳入到腳本中對應腳本位置的變量 |
標準變量 | 也是環境變量,在bash環境創建時生成,可以使用printenv命令查看 |
自定義變量 | 變量名=變量值(變量名前不需加$,等號兩邊不能有空格) |
經常使用的預約義變量設計
預約義變量 | 說明 |
---|---|
$# | 傳遞到腳本或函數的參數數量 |
$* | 傳遞到腳本或函數的所有參數 |
$? | 前一個命令執行狀況,返回0表示成功,其餘值表示失敗 |
$$ | 當前進程的ID(PID) |
$! | 後臺運行的最後一個進程的進程ID(PID) |
$0 | 當前腳本的名稱 |
輸入/輸出內部命令
輸出命令:echo
輸入命令:read調試
常見的通常錯誤
輸入錯誤:如輸入了錯誤的關鍵字、成對的符號漏輸入一部分等
字符大小寫錯誤:在Linux中,嚴格區分字符大小寫。全部關鍵字都用小寫字母表示,建議變量名使用大寫字母組合來表示
循環錯誤:因爲Shell中的循環控制語句與通常高級程序設計語言不一樣,輸入結構時容易出錯code
調試跟蹤
-n選項:不執行腳本,僅檢查腳本中的語法問題
-v選項:將執行過程當中的每一個腳本命令(包括輸入的內容)都原樣輸出到終端
-x選項:在執行過的每一個命令的行首添加「+」號顯示在終端,並顯示變量的值。使用該選項更方便跟蹤程序的執行過程接口
#! /bin/sh groupadd wl20 for username in xlr cyx zh gjj do useradd -g wl20 $username echo "123456" | passwd --stdin $username done
#! /bin/sh #腳本名稱 count.sh read -p "請輸入路徑(直接回車換行表示當前目錄):" fpath if ["$fpath" = ""] then fpath=$(pwd) fi #定義一個函數fun_directory directory(){ echo "您輸入的路徑爲:$fpath" let "filenum=0" let "dirnum=0" for dir in ${fpath}/* do if [ -d "$dir" ] then let "dirnum+=1" elif [ -f "$dir" ] then let "filenum+=1" fi done echo "該目錄下共有子目錄$dirnum個" echo "該目錄下共有文件$filenum個" } #調用函數 directory
#! /bin/bash for((ROW=1;ROW<10;ROW++)) do for((COL=1;COL<=$ROW;COL++)) do echo -ne "$ROW*$COL="`expr $ROW \* $COL` " " done echo done
本套 Linux學習筆記完結,將來將在各章節中加入相關的思惟導圖以便理解,歡迎關注後續 ~進程