Linux shell腳本筆記
- 2019 年 10 月 26 日
- 筆記
shell 命令解釋器 是用來解釋用戶對系統的操作 使用 cat /etc/shells 可以查看 系統安裝的shell
Linux 啟動過程: BIOS -> MBR -> BootLoader(grub) -> kernel -> systemd -> 系統初始化 -> shell
BIOS 基本輸入輸出系統 選擇U盤啟動還是硬碟啟動;MBR 硬碟里可引導的部分;BootLoader(grub) 啟動內核工具 選擇啟動的內核;
kernel 啟動內核;systemd 1號進程 其餘所有進程派生於它;然後才是系統初始化 啟動shell
執行腳本的四種方式
1 bash ./filename.sh 2 ./filename.sh
3souce ./filename.sh 4 . ./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 等號左右不能有空格 2 read name 從用戶處讀入變數 互動式輸入 3 name=ls 變數的值還可以是命令
4 name=$(ls /etc/) 變數的值還可以是命令的字元串 $() 可以用“反引號代替 5let a=2 let關鍵字也可賦值 此時賦值數字時可以使用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為空代表_ 不空代表$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 ${IPTS[@]} 顯示所有元素
echo ${#IPTS[@]} 顯示元素個數
echo ${IPTS[0]} 顯示第0個元素