資料輸入三大來源
- 鍵盤輸入(預設 stdin)
- 檔案讀取
- 管道傳遞(上一指令 stdout → 下一指令 stdin)
echo 進階用法
| 選項 | 功能 |
-e | 啟用轉義序列解析 |
\c | 不換行 |
\f | 換頁 |
\t | 跳格 |
\n | 換行 |
\\ | 輸出反斜線本身 |
read 指令 - 互動式讀取
$ read name
hello i am a regular user
$ echo $name
hello i am a regular user
將一行文字讀入變數,支援多變數:read var1 var2 var3 依空白分割。
cat 多重用途
| 用法 | 指令 | 說明 |
| 顯示內容 | cat filename | more | 分頁瀏覽 |
| 建立檔案 | cat > filename | 標準輸入寫入檔案,Ctrl+D 結束 |
| 顯示控制字元 | cat -v filename | 不可見字元可視化 |
管道 | - 串聯指令
命令1 | 命令2
實戰管線範例:
# 列出登入用戶,僅顯示帳號與終端機
who | awk '{print $1"\t"$2}'
# 取得掛載點裝置名稱
df -k | awk '{print $1}' | grep -v "Filesystem" | sed 's/\/dev\///g'
# 輸出: root, boot
tee 指令 - 雙向輸出
命令 | tee [-a] filename
$ who | tee who.out
# 螢幕顯示 who 結果,同步存入 who.out
檔案重導向完整語法
| 語法 | 含義 |
cmd > file | stdout 覆寫檔案 |
cmd >> file | stdout 追加檔案 |
cmd 1> file | stdout 覆寫(同 >) |
cmd > file 2>&1 | stdout + stderr 合併覆寫 |
cmd 2> file | stderr 覆寫 |
cmd 2>> file | stderr 追加 |
cmd >> file 2>&1 | stdout + stderr 合併追加 |
cmd < file1 > file2 | stdin 從 file1,stdout 到 file2 |
cmd < file | stdin 從 file |
cmd << delimiter | Here Document,讀入直到 delimiter |
cmd <&m | 檔案描述符 m 作為 stdin |
cmd >&m | stdout 導向檔案描述符 m |
cmd <&- | 關閉 stdin |
實務範例:多指令輸出追加同一檔案
ls -l | grep ^d >> files.out
ls account* >> files.out
chmod 常見錯誤
$ chmod u +x null.txt # 錯誤:u 與 +x 間有空格
$ chmod u+x null.txt # 正確