shell 命令直譯器是用來解釋使用者對系統的操作 使用cat /etc/shells可以檢視 系統安裝的shell
linux 啟動過程:bios -> mbr -> bootloader(grub) -> kernel -> systemd -> 系統初始化 -> shell
bios 基本輸入輸出系統 選擇u盤啟動還是硬碟啟動;mbr 硬碟裡可引導的部分;bootloader(grub) 啟動核心工具 選擇啟動的核心;
kernel 啟動核心;systemd 1號程序 其餘所有程序派生於它;然後才是系統初始化 啟動shell
執行指令碼的四種方式
1bash ./filename.sh2./filename.sh
3souce ./filename.sh4. ./filename.sh
1和2 執行指令碼時 會建立乙個新的程序來執行 3和4執行指令碼時會用當前程序來執行(環境變數是當前系統的環境變數) (不產生新程序執行的命令叫做內建命令
1 3 4 執行指令碼時指令碼可以不擁有執行許可權2 執行指令碼時必須有可執行許可權
管道'|' 兩個程序之間的通訊第乙個程序的輸出當作第二個程序的輸入 a|b|c a的輸出當作b的輸入 b的輸出當作c的輸入 (管道應該規避內建命令
重定向更改標準輸入和標準輸出為檔案 利用檔案代替鍵盤的輸入 儲存至檔案代替終端的輸出
<輸入wc -l < /etc/passwd將《右側的內容代替鍵盤輸入
>輸出 覆蓋輸出>>追加輸出
2>>錯誤輸出重定向 2 為標準錯誤流重定向
&>>正確或錯誤都重定向輸出
變數shell指令碼中可以有變數 變數名由字母 數字 下劃線組成 數字不能在變數名開始處
shell 變數為弱型別不區分型別 區分大小寫
使用方式 1name=value等號左右不能有空格 2read name從使用者處讀入變數 互動式輸入 3name=ls變數的值還可以是命令
4name=$(ls /etc/)變數的值還可以是命令的字串 $() 可以用
``反引號代替 5let a=2let關鍵字也可賦值 此時賦值數字時可以使用0開頭八進位制和0x開頭十六進製制
6 變數的值有特殊字元時應該用" 或者'包起來這時候不應該使用let 使用'單引號包裹的內容不會解析變數 會被當作字串輸出
變數引用
${}大括號{}可以省略 當使用字串拼接時 也就是要把變數的值加上其他字串 這時候{}不能省略
變數作用範圍 預設作用於當前執行的shell本身 若想讓作用於子shell 時 需要用export匯出乙個變數 變數不再使用時 可以用unset刪除變數
環境變數環境變數是當前使用者統一配置的 當前使用者下每個shell都可以得到的變數 使用env set可以檢視當前環境變數
常用環境變數$path為命令搜尋路徑$user使用者名稱$uid使用者id$psi配置終端提示顯示
預定義變數$?儲存上一條命令執行結果0為正確1為錯誤$$當前程序pid$0當前程序名
位置變數$0 $1 ... $9執行指令碼時的引數 不存在為空($如果$2為空代表_ 不空代表$2
環境變數配置檔案/etc/profile /etc/bashrc ~/.bashrc ~/.bash_bashrc /etc/profile.d/
/etc/目錄下對所有使用者生效 ~/目錄下對當前使用者生效
執行su - root時 配置檔案執行順序/etc/profile ~/.bash_bashrc ~/.bashrc /etc/bashrc 有相同變數名時後面會覆蓋前面的
執行su root時 執行~/.bashrc 和 /etc/bashrc
陣列的使用
ipts=(1 2 3)定義陣列 值之間用空格分開ipts=(1 2 3)
echo $顯示所有元素
echo $顯示元素個數
echo $顯示第0個元素
Linux shell指令碼筆記
shell可以被稱作是指令碼語言,因為它本身是不需要編譯的,而是通過直譯器解釋之後再編譯執行,和傳統語言相比多了解釋的過程所以效率會略差於傳統的直接編譯的語言。這是shell指令碼簡單明瞭的語法,給很多碼農尤其是運維還是帶來不少好處,尤其是和python的結合,在大資料方面可謂是一騎絕塵。shell...
linux shell指令碼學習筆記
if command then commands fiif後面的命令,執行後狀態碼返回0,則執行then部分的命令 執行pwd wang wang test pwd home wang test 檢視退出碼 wang wang test echo 0 執行pwda wang wang test pw...
Linux shell命令指令碼學習筆記
在使用load data到mysql的時候,有2種情況 1 在遠端客戶端 需要新增選項 local infile 1 匯入遠端客戶端文字到mysql,需指定local 預設就是ignore 加ignore選項會放棄資料,加replace選項會更新資料,都不會出現唯一性約束問題。2 在本地伺服器匯入本...