認識 Shell
什麼是 Shell
- Shell 是命令解析器,用於解析使用者對作業系統的操作
- Shell 有很多
- cat /etc/shells
- CentOS 7 預設使用的 Shell 是 bash
Linux 的啟動過程
- BIOS → MBR → BootLoader(Grub)→ Kernel → Systemd → 系統初始化 → Shell
Shell 指令碼
- UNIX 的哲學:一條命令只做一件事
- 為了組合命令和多次執行,使用指令碼檔案來儲存需要執行的命令
- 賦予該檔案執行許可權(chmod u+rx filename)
標準的 Shell 指令碼包含元素
- Sha-Bang
- 命令
- “#” 號開頭的註釋
- chmod u+rx filename 可執行許可權
指令碼不同執行方式的影響
- bash ./filename.sh(無需新增執行許可權,不改變當前目錄,產生子程式)
- ./filename.sh(需要新增執行許可權,不改變當前目錄,產生子程式)
- source ./filename.sh(需要新增執行許可權,改變當前目錄,無子程式產生)
- .filename.sh(需要新增執行許可權,改變當前目錄,無子程式產生)
內建命令和外部命令的區別
- 內建命令不需要建立子程式
- 內建命令對當前 Shell 生效
管道與管道符
- 管道和訊號一樣,也是程式通訊的方式之一
- 匿名管道(管道符)是 Shell 程式設計經常用到的通訊工具
- 管道符是 “|”,將前一個命令執行的結果傳遞給後面的命令
ps | cat
echo 123 | ps
重定向符號
- 一個程式預設會開啟標準輸入、標準輸出、錯誤輸出三個檔案描述符
- 輸入重定向符號 “<”
read var < /path/to/a/file
- 輸出重定向符號
- “>”:清空內容再輸出
- “>>”:換行追加內容輸出
- “2>”:錯誤輸出
- “&>”:全部輸出
echo 123 > /path/to/a/file
- 輸入和輸出重定向組合使用
cat > /path/to/a/file << EOF
I am $USER
EOF
變數的定義
- 變數名的命名規則
- 字母、數字、下劃線
- 不以數字開頭
變數的賦值
為變數賦值的過程,稱為變數替換
- 變數名=變數值
a=123
- 使用 let 為變數賦值
let a=10 + 20
- 將命令賦值給變數
l=ls
- 將命令結果賦值給變數,使用 $() 或者
`
letc=$(ls -l /etc)` - 變數值有空格等特殊字元可以包含在 “” 或者 '' 中
不能有空格
變數的引用
${變數名}
稱作對變數的引用echo ${變數名}
檢視變數的值${變數名}
在部分情況下可以省略為$變數名
變數的作用範圍
- 變數的匯出
export
- 變數的刪除
unset
系統環境變數
-
環境變數:每個 Shell 開啟都可以獲得的變數
- set 和 env 命令
- $? $$ $0
- $PATH
- $PS1
-
位置變數
- $1 $2 ... $n
環境變數配置檔案
- /etc/profile
- /etc/profile.d/
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
本作品採用《CC 協議》,轉載必須註明作者和本文連結
:bug: 我的小破站