《Shell指令碼學習指南》學習筆記

haozi3156666發表於2015-04-19

Shell指令碼學習

《Shell指令碼學習指南》一書

基本語法

  • 環境變數$PATH
  • IO重定向:
    • <改變標準輸入
      • 如:tr -d '\r' < dos-file.txt
    • >改變標準輸出
      • 如:tr -d '\r' < dos-file.txt > UNIX-file.txt(如果>的目的檔案不存在,將自動建立,若存在,將覆蓋原檔案)
    • >>附加到檔案(檔案末尾追加)
      • 若檔案不存在,則自動建立,若存在,則在檔案末尾追加
    • |建立管道
      • 前一個program的輸出作為後一個program的輸入(program1 | program2),如:ls | grep a
  • 特殊檔案:/dev/null/dev/tty

    • /dev/tty:輸入密碼時,預設不列印輸入的密碼到終端,例如:(-echo 用來關閉列印輸入,echo開啟)

          printf "Enter new password: "
          stty -echo 
          read pass < /dev/tty
          printf "Enter again: "
          read pass2 < /dev/tty
          stty echo
          ...
      

常用命令:

  • who:查詢系統的登陸使用者
  • cat > 檔名 :將後面的輸入資訊重定向到檔案中,以 ^D 結束
  • tr:轉換字元
    • -d:刪除source-char-list所列舉的字元,如:tr -d '\r' < dos-file.txt | sort > UNIX-file.txt,將dos-file.txt中的回車符全部刪掉,再排好序重定向到UNIX-file.txt檔案中
  • sh (執行一個指令碼)
    • -x顯示指令碼中的每個命令,以+開頭,可以在指令碼中開啟追蹤功能, set -x,用set +x關閉追蹤
  • grep
  • sed
  • cut
  • awk
  • sort
  • uniq :(去重)
  • head -n n 檢視前n行
  • tail -n n 檢視後n行

  • umask

命令使用注意事項

  • -開頭表示選項,以--開頭表示長選項
  • 多條命令寫在一行,以;分隔

指令碼的語法說明:

  1. #! 指令碼直譯器路徑開頭,如:#! /bin/sh
  2. 變數
    • 命名:字母或下劃線開頭,後面可以是字母數字,下劃線
    • 賦值:變數名=值(注意等號前後不能有任何空格,變數值之間有空格時,需要用引號括起來),單行多次賦值,之間用空格分隔
    • 使用變數:以$變數名
    • 輸出:
      • echo
        • echo 引數(引數以空格分隔)
      • printf
        • 不會自動換行,需要換行,需在末尾加上\n
        • 例句:printf "the first program always print %s,%s" hello world (\d表示十進位制整數)
  3. 再shell指令碼中訪問shell指令碼的引數
    • 讀取第n個引數,通過$n讀取,若n的數值大於9,則需用大括號括起來,如${10},讀取第10個引數

未完–

相關文章