# Command Line & Shell Script ###### tags: `程式導師` `Command Line` `課程筆記` ## 常用指令 - `pwd` 想知道現在的檔案位置 - `ls` 想知道目前資料夾內有哪些東西 - `cd` 在資料夾內穿梭 - `cd` 回到最高層的資料夾 - `cd ..` 回到上層資料夾 - `cd ~` 等同 `cd Users/laiyenju` - `man` 忘記指令,就輸入 - `touch <檔案名稱>` 建立新檔案,若 touch 既有檔案,會更新既有檔案的上次修改時間。 - `mkdir` 建立新資料夾 - `rm <檔案名稱>` 刪除檔案 - `rmdir <檔案名稱>` 、`rm -r <檔案名稱>` 刪除資料夾 - `mv <檔案名稱> <目的地資料夾>` 移動檔案 - `mv <檔案名稱> <新的檔案名稱>` 更改檔案名稱 - `cp <檔案名稱> <複製出來後的檔案名稱>` 複製檔案 - `cp -r <資料夾名稱> <複製出來後的資料夾名稱>` 複製資料夾名稱 - `cat <檔案名稱>` 直接在 terminal 內瀏覽檔案內容 - `less <檔案名稱>` 當檔案內容很多時可使用,就能滾動瀏覽檔案內容 ## 小技巧/觀念 - `cd` 時,使用 tab 可以不需要輸入完整檔案名稱,系統會自動補完檔案名稱。 - 指令有內建也能自行安裝,像`wget` 就是自行安裝的指令 - `>` `<` 導向指令(redirection) - `|` 組合指令(pipe) | 導向指令 | 效果 | | ------ | ------ | | `ls -al > list_result` | 將資料夾內的檔案列表輸出成為 list_result 檔案。 | | `echo "123" > 123.txt` | 將 123.txt 內容變成 123 | | 接著輸入 `echo "456" > 123.txt` | 覆寫 123.txt 的內容,只會有 456 | | 接著輸入 `echo "456" >> 123.txt` | 會在 123.txt 原本內容之後,放入 456,不會覆寫。| | 組合指令 | 效果 | | ------ | ---- | | `cat 123.txt | grep 4` | 在檔案中找出 4 這個字,並輸出搜尋結果 | | `cat 123.txt | grep 4 > result` | 輸出 123.txt 檔案內容,並找出 4 這個字,將結果放入 result 檔案內 | ## Vim 可以直接進入檔案進行編輯,也能當作文字編輯器使用。 - `vim <檔案名稱>` 用 vim 開啟並編輯檔案內容 - 分為普通模式、insert 模式,進入頁面預設是普通模式,按下 `i` 才會切換到 insert 模式,按下 `esc` 切回普通模式。 - 普通模式:刪除、複製、貼上功能 - insert 模式:打字 - `:q` 離開 vim - `:wq` 存檔後離開 vim ## 進階指令 - `grep` 抓取關鍵字 `grep <關鍵字> <要搜尋關鍵字的檔案>` 就能查找在檔案內的關鍵字。 - `wget` 下載檔案 `wget <圖片網址>` 會下載該網頁圖片 - `curl` 送出 request,可以用來測試 API ## Shell Script 程式化腳本 為何要學 shell script? - 通用(任督二脈) - 快速 `/etc/shells` 檔案可知道能用的 shell 有多少 bash = Bourne Again SHell [CVS、RCS、VCS、SCM 名詞定義](http://smlie-blog.blogspot.com/2013/11/git-cvsrcsvcsscm.html) [Tech Talk: Linus Torvalds on git](https://youtu.be/4XpnKHJAok8?t=486) BitKeeper 版本管理工具的重要要素: - distributed - performance - guarantee the outcome the same as SCM ### Bash shell tab 鍵的功能 - 命令補齊 - 檔案補齊 zsh 相容所有 bash 指令 執行 shell.sh 的方式有很多,使用 mac 的話,可以直接以 `bash shell.sh` 執行。 ```bash= #!/bin/bash # Program: # This program shows "Hello World!" in your screen. # History: # 2015/07/16 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo -e "Hello World! \a \n" exit 0 ``` - `#!/bin/bash` 因為使用的環境是 bash,所以要宣告使用的語法是 bash 語法,告訴電腦要使用 bash shell。 - `PATH=...` 與 `LANG=...` 將環境變數設定好。 - `echo ...` 鳥哥:使用撰寫 script 的工具最好使用 vim 而不是 vi ,因為 vim 會有額外的語法檢驗機制,能夠在第一階段撰寫時就發現語法方面的問題喔!