Shell基礎知識點

  1. 通過/etc/shells文件下查看可用的shell。
  2. 通過/etc/passwd查看不同賬號所使用的shell。
  3. 在~/.bash_history文件查看歷史命令記錄。
  4. 利用alias配置別名,例如alias lm=‘ls -al’,利用unalias取消別名。
  5. 利用type查看命令具體信息,包括是否是bash內建的變量,顯示包含該命令的環境變量,別名 。
  6. 輸入過程可用\Enter來換行,反斜槓和Enter之間無空格 。
  7. 變量在賦值時等號兩邊不能出現空格(之前在這上面踩過坑,記得否,這個和java規範有點點不同)。
  8. 雙引號中文本的變量可以被實際值替換,而單引號中的變量不會利用實際值替換。
  9. export path 利用export path使變量變成環境變量。如果後面沒有接參數,那麼會打印所有的環境變量。(使用declare使環境變量變成自定義變量)。
  10. 利用unset取消變量。
  11. 利用環境變量RANDOM產生0到32767之間的整數,其他的隨機數均可通過數學計算得出。
  12. 用set查看所有變量,包括環境變量和自定義變量。
  13. declare [-aixr] variable 申明變量類型。a申明數組,i申明整形,x申明環境變量,r申明只讀變量。如果declare後面沒有參數,那麼系統將會顯示所有的變量與內容,同set命令。(typeset的作用同declare,參數亦一樣)。利用declare +aixr variable可以取消相應的類型。
  14. ${variable#要刪除的字符},從前往後搜索,刪除符合的最短字符。${variable##要刪除的字符},從前往後搜索,刪除滿足條件的最長字符。但是不影響variable的值。在要刪除的字符中可以添加*通配符匹配。
  15. ${variable%要刪除的字符},${variable%%要刪除的字符},意義同14點,不同的是,在查找字符串的時候,#是從前往後搜索。%是從後向前搜索。
  16. ${variable/srcStr/dstStr/} 利用detStr替換第一個srcStr。
  17. new_var=${old_var-content},如果old_var未申明,則將content的值賦給new_var,否則將old_var的值賦給new_var。
  18. new_var=${old_var:-content},若old_var未申明或者爲空字符串,剩餘同17點。
  19. history n n指查看最近n條命令。history -w強制將當前歷史記錄數據寫入~/.bash_history文件中。一般可以這樣使用,先利用history顯示命令條數,然後利用!n,執行第n條命令。利用!str執行歷史記錄中str開頭的命令。!!同向上箭頭一樣,執行上一個命令。
  20. 命令的搜索順序如下:1.相對/絕對路徑指定命令2.alias指定的命令 3.bash內建命令 4.PATH環境變量指定的路徑命令。可以通過type -a 命令 查看命令的順序。如type -a echo。
  21. login shell會通過/etc/profile文件讀取整體環境配置,即對所有用戶都生效的配置。 該配置文件會讀取一些其他的文件來設置bash環境。
  22. 在login shell讀取整體配置文件/etc/profile後,接下來會繼續讀取個人配置文件,而個人配置文件會按照先後順序讀取1.~/.bash_profile 2.~/.bash_login 3.~/.profile,如果其中一個存在則不會讀取另外兩個。
  23. 在no-login shell非登陸情況下,bash僅僅會讀取~/.bashrc文件而已。
  24. 利用source或者.將配置文件讀入到shell環境中,而不用註銷在登錄。
  25. 若要將標準輸出和標準錯誤輸出到同一個文件,寫法爲:> fileName 2>1 > fileName。
  26. 針對每行信息進行切割,如cut -d “分割字符” -f fields,其中fields一般是數字,即顯示切割後的第幾個字符。 cut -c 字符區間,顯示指定的字符區間的字符。
  27. 利用tee命令進行雙向重導向,即將標準輸入輸出既輸入輸出到文件,也輸入輸出到屏幕。
  28. tr -d set 刪除信息中的set字符,tr [a-z] [A-Z] 將所有的小寫變成大寫
  29. join命令處理兩個文件中有相同數據的那一行,纔將他們加在一起。如join -t “:” file1 file2 指文件中以:分隔的第一列數據如果文件1和文件2相同,則把2個文件中該行的數據整合成一行,並且文件2中的第一列數據不再顯示。如join -t “:” -1 4 file1 -2 3 file2 指文件利用:分隔,取第一個文件的第4列數據,取文件2的第3列數據,如果相同,則把2個文件中該行的數據整合到一行,並且將該數據提取到行首。
  30. paste 將兩個文件對應行顯示在一行,中間默認用tab鍵隔開,利用-d可以設置分隔符,其中可以用-獲取標準輸入來代替file。
  31. expand [-t] file 將文件中的tab鍵利用空格來替換,默認是8個空格,利用-t可以指定空格個數。如expand -t 4 file,其中不能指定爲0。(參考unexpand將空白轉成tab)。
  32. 利用split進行文件分隔。split [-bl] file prefix,其中-b後面的參數指定分割成的文件大小,可加單位,如b,k,m等。 -l 後面的參數指定按照行數來分割文件,prefix作爲分隔文件的前導文件(分割後的文件均會以prefix開頭,系統會在後面加上字符區分不同的文件)。利用 cat prefix* >> newFile 將分割的文件合成一個文件(即利用數據重定向)。
  33. grep “查找字符” 文件名 可以搜索相關關鍵字
  34. man ascii 查看ascii碼錶
  35. cut -d “分割符” -f 指定列
  36. 利用sh *.sh或者./*sh來執行腳本,系統會開啓一個新的子bash程序來執行該腳本文件,腳本執行完畢後數據均會移除。故在父bash程序中看不到該sh文件中所定義的變量及其他數據。 而利用.或者source執行腳本則是在當前bash環境中執行,故可以讀取到腳本中的數據。
    利用sh或絕對/相對路徑執行
    利用source命令執行
  37. 利用test命令測試文件類型,文件權限,整數之間比較,字符串判定等。
  38. 利用if寫條件語句時,如果用[ ]寫條件表達式,那麼if和 [ 之間一定要有空格,否則系統會報有語法錯誤。 同時[ ]內部的表達式每個元素之間都需要空格。 可以參考一些系統的腳本文件,例如/etc/profile等。
  39. echo 命令不換行輸出 echo “it is ok\c”
  40. 利用awk處理字符串時,一般需要文件或者標準輸入,標準輸入可以利用echo例如echo $var | awk match($0, regular_express); print($0),直接在awk命令後面使用<是無效的。
  41. 在mac上通過sh可以正常運行的腳本,在Ubuntu上報語法錯誤。網上資料說是部分bash不兼容的問題,可以更改執行方式,例如 bash 腳本.sh或者 . 腳本.sh
  42. fork炸彈 :(){ :|:& };:
  43. 對文件的名的提取可以通過${var%通配符}來獲取
  44. 刪除文件中的重複行 sort -n test.txt | uniq
  45. 變量 說明
    $0 腳本名稱
    $n 傳遞給腳本或函數的第n個參數
    $! 上一個被執行的命令的pid
    $? 上一個命令退出的狀態
    $$ 腳本的pid
    $# 傳遞給腳本或函數的參數個數
    $@ 傳遞給腳本/函數的所有參數(識別每個參數)
    $* 傳遞給腳本/函數的所有參數(把所有參數當成一個字符串)
  46. 46.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章