Unix 語法筆記
常常網路上複製貼上能動就不管為什麼了,這不是一個好習慣所以紀錄一下常見的語法,這篇文章會慢慢增加並且滾動式修正。
符號列表
1. 管道與重定向
|
:將前一命令的輸出作為下一命令的輸入。>
:將標準輸出覆蓋重定向到文件。>>
:將標準輸出追加重定向到文件。<
:將文件內容作為標準輸入。2>
:將標準錯誤覆蓋重定向到文件。2>>
:將標準錯誤追加重定向到文件。&>
:同時重定向標準輸出和標準錯誤到文件(Bash 4.0+)。|&
:將標準輸出和標準錯誤通過管道傳遞。<<
:用於多行輸入的 Here Document。<<<
:用字串作為標準輸入的 Here String。
2. 條件運算符
&&
:當前命令成功時執行後續命令。||
:當前命令失敗時執行後續命令。!
:否定命令的退出狀態。;
:順序執行多個命令。;;
:結束case
分支的標記。
3. 括號與組合操作
()
:在子 Shell 中執行括號內命令。{}
:在當前 Shell 中執行命令組。[]
:條件測試(等同於test
)。[[]]
:高級條件測試(支持模式匹配)。(())
:整數運算。<()
:進程替換,將命令輸出作為文件描述符。>()
:進程替換,將文件描述符作為命令輸入。
4. 變量與替換
$
:變量展開或命令替換。${}
:變量的高級操作。$(...)
:命令替換。`...`
:舊式命令替換(不推薦)。$#
:參數個數。$*
:所有參數,作為單一字串展開(由 IFS 分隔)。$@
:所有參數,分開列出("$@"
保留原始分隔)。$?
:上一命令的退出狀態碼。$$
:當前 Shell 的進程 ID。$!
:最後執行的後台命令的進程 ID。$-
:當前 Shell 的選項狀態。$0
:腳本名稱。
5. 通配符與模式匹配
*
:匹配零個或多個字符。?
:匹配單個字符。[]
:匹配字符集合。[^]
:匹配不在集合中的字符。{}
:靜態展開,如{a,b}
展開為a b
。~
:用戶主目錄。
6. 引用與轉義
'
:單引號,視內容為字面量。"
:雙引號,保留部分特殊符號功能。`
:舊式命令替換。\
:取消特殊字符的意義。#
:注釋符。
7. 其他符號
&
:後台執行命令。:
:空操作,永遠返回成功。-
:選項標記。!
:歷史命令(如!!
執行上一命令)。%
:作業控制的作業 ID。=
:賦值符號。
基礎範例
設定系統可執行文件搜尋路徑
export PATH="$PATH:/User/name/hugo"
- PATH="...": 使用錢字號取出PATH的值之後,再接上要新增的路徑
- export: 把PATH變數設定成環境變數
類似的使用還有在字串中執行指令,使用 echo "The current path is $(pwd)"
可以呼叫 pwd
。
尋找並且刪除
find . -type d -name "__pycache__" -exec rm -r {} +
- 找到所有符合的資料夾並且印出,
find .
從目前資料夾開始尋找,-type d
只找資料夾,-name "__pycache__"
指定名稱 -exec rm -r {} +
對每一個符合條件的資料夾執行 rm -r 指令{}
代表每個找到的資料夾,是一個佔位符+
表示一次執行多個 rm -r- 也可以把
+
改成\;
,每搜尋到一個就會刪除一次,反斜線用於逃脫特殊字符
清除所有 pip 套件
pip freeze > unins && pip uninstall -y -r unins && rm unins
這就簡單了,所有套件寫入 unins 檔案,運行移除指令最後刪除 unins
Here Document 寫入多行文字到文件中
cat > output.txt << EOF
Write
multiple
col
EOF
把 cat 的文字轉向到文件,設定遇到 EOF 結束,EOF 可以換成其他文字。
Here String 將字串傳遞給命令作為輸入
cat <<< "Hello, ${USER}"