類別:系統及安全性
| 發布於 2025-06-24 20:02
Linux Bash Shell 基礎
Bash Shell 介紹
Shell 是「介於使用者與作業系統之間的介面」,可讓使用者藉由指令來操作系統。無論是 Windows 或 Linux 系統都會提供 Shell。常見的 Shell 包括:
- Bourne shell(sh)
- C shell(csh)
- Korn shell(ksh)
- Z shell(zsh)
- Bourne Again Shell(bash)
其中,bash 是目前最普遍使用、功能最完善的 Shell。
相關資訊:
- 系統已安裝的 Shell 通常記錄在
/etc/shells
- 使用者登入 Linux 預設會取得 bash Shell
- bash 執行檔路徑通常為
/bin/bash
bash 會記錄使用者輸入的命令,先暫存於記憶體中,使用者登出時會將命令附加寫入
~/.bash_history。此檔案會保留多次登入的歷史命令,但記錄數量依系統設定(可能為 300、500、1000 等)有所限制。
指令搜尋順序
當輸入指令時,bash 查找順序如下:
- 是否為 bash 內建指令(使用
help 可查詢)
- 是否為別名(alias)
- 是否存在於
$PATH 環境變數指定的目錄中
查看歷史命令
Bash Alias 命令別名
命令別名可簡化輸入長指令。設定方式如下:
解除別名:
查看所有目前定義的別名:
基本輸入與輸出
輸入
輸出
變數設定
宣告與使用
- 變數區分大小寫
- 不可用數字開頭命名
- 宣告:
變數=值(等號兩邊不能有空格)
- 取值:使用
$變數 或 echo $變數
指令取值
取消變數
字串處理
宣告方式
字串連接
取得子字串
取得字串長度
取代子字串
整數運算
bash 不支援浮點數,僅支援整數。
布林變數
Bash 無內建布林型別,通常以字串模擬:
判斷時需額外條件式處理,例如搭配 if 語法使用
[ "$isTrue" = true ]。
陣列處理
宣告與取值
Linux Bash Shell 基礎
Bash Shell 介紹
Shell 是「介於使用者與作業系統之間的介面」,可讓使用者藉由指令來操作系統。無論是 Windows 或 Linux 系統都會提供 Shell。常見的 Shell 包括:
其中,bash 是目前最普遍使用、功能最完善的 Shell。
相關資訊:
/etc/shells/bin/bashbash 會記錄使用者輸入的命令,先暫存於記憶體中,使用者登出時會將命令附加寫入
~/.bash_history。此檔案會保留多次登入的歷史命令,但記錄數量依系統設定(可能為 300、500、1000 等)有所限制。指令搜尋順序
當輸入指令時,bash 查找順序如下:
help可查詢)$PATH環境變數指定的目錄中# 查看目前 PATH 設定 echo $PATH # 暫時新增 /opt 到 PATH(本次 session 有效) export PATH=$PATH:/opt # 若要永久生效,需加入 /etc/profile 或 ~/.bashrc 中 # 例如: echo 'export PATH=$PATH:/opt' >> ~/.bashrc source ~/.bashrc查看歷史命令
# 顯示最近 10 筆歷史命令 history 10 # 或直接檢視 ~/.bash_history 檔案 cat ~/.bash_historyBash Alias 命令別名
命令別名可簡化輸入長指令。設定方式如下:
# 設定臨時別名(僅本次登入有效) alias cdt="cd t1/t2/t3/t4" # 設定永久別名(加入 ~/.bashrc) echo 'alias cdt="cd t1/t2/t3/t4"' >> ~/.bashrc source ~/.bashrc解除別名:
unalias cdt查看所有目前定義的別名:
alias基本輸入與輸出
輸入
# 基本輸入 read name # 顯示提示文字 read -p "Who are you? " name # 設定輸入等待時間為 5 秒 read -t 5 name輸出
# 顯示變數內容 echo "I'm $name"變數設定
宣告與使用
變數=值(等號兩邊不能有空格)$變數或echo $變數指令取值
# 指令結果儲存於變數中 now=$(date) echo $now取消變數
unset 變數名稱字串處理
宣告方式
# 無引號(裸字串):不可包含空白或特殊字元 name=jack # 單引號:內文不會展開變數 name='jack $HOME' # 雙引號:內文可展開變數 home="我的家是 $HOME"字串連接
first="Hello" second="World" message=$first" "$second echo $message # 顯示 Hello World取得子字串
text="abcdef" echo ${text:1:3} # 顯示 bcd取得字串長度
echo ${#text} # 顯示 6取代子字串
text="hello world world" echo ${text/world/earth} # 只取代第一個 echo ${text//world/earth} # 取代全部整數運算
bash 不支援浮點數,僅支援整數。
a=5 b=3 # 錯誤方式(僅會輸出字串) echo $a+$b # 輸出:5+3 # 正確方式(用 $(( ))) echo $(($a + $b)) # 輸出:8 echo $(($a * $b)) # 輸出:15 echo $(($a % $b)) # 輸出:2布林變數
Bash 無內建布林型別,通常以字串模擬:
isTrue=true isFalse=false判斷時需額外條件式處理,例如搭配
if語法使用[ "$isTrue" = true ]。陣列處理
宣告與取值
arr=("a" "b" "c") # 取得第一個元素(索引從 0 開始) echo ${arr[0]} # a # 顯示所有元素 echo ${arr[@]} # 顯示元素個數 echo ${#arr[@]}