Shell Script 速查

宣告

  • #!/bin/bash
    • 第一行務必加上

執行

  • sh xx.sh    -- 另開子程序中執行(sh 中賦予的變數不會存在目前的 process)
  • source xx.sh  -- 在父程序中執行
  •  . xx.sh   -- 同 source

接外部參數

  • 使用者互動 keyin
    • read -p 提示文字 STR
      echo $STR
  • 檔名後面帶的參數
    • echo $1; echo $2;
  • 取指令回傳值
    • list=$(指令)

基本操作(link)

  • 變數
    • T = "123"
      echo "${T}"
  • 建folder/新增/刪除...
    • /bin/指令 ...
    • ex. /bin/mkdir -p $path/log.del
  •  

判斷式

  • if [ "${T}" != "" ] && [ "${T}" = "123" ]; then
     echo "y"
    elif [ "${T}" = "456"]; then
     echo "y"
    else
     echo "n"
     exit 0
    fi
  • 運算符 (可參考 link較完整)
  • 檢查 command 是否存在
  • if ! type "cmake2" > /dev/null 2>&1; then 
    fi
    

路徑

#路徑為 /home/aa/bb/cc/my.sh
#我們停在 bb 這層,並呼叫 my.sh

echo $(dirname "$0")  #取得目前位置與 sh file 的相對位置,得到 cc
echo $(pwd) #取得目前位置,得到 /home/aa/bb

#所以 .sh 正確位置


睡眠

  • sleep 1    睡眠1秒
    sleep 1s    睡眠1秒
    sleep 1m   睡眠1分
    sleep 1h   睡眠1小時


時間 format (詳細 date 操作)

  • 格式 D=`date +format格式`;
    • %Y%m%d_%H%M%S --- 20150101_230130
    • %X%x --- 2015年11月17日11時32分42秒
    • %F%T --- 2015-11-17 11:33:53
    • Cron add Times
      • DT=`date --date="$1" +"%M %H %d %m * "`; 
  • 位移時間
    • -d "+2days"
    • 如果無法辨識,需安裝 coreutils 套件
%a 當前域的星期縮寫 (Sun..Sat)
%A 當前域的星期全寫 (Sunday..Saturday)
%b 當前域的月份縮寫(Jan..Dec)
%B 當前域的月份全稱 (January..December)
%c 當前域的默認時間格式 (Sat Nov 04 12:02:33 EST 1989)
%C n百年 [00-99]
%d 兩位的天 (01..31)
%D 短時間格式 (mm/dd/yy)
%e 短格式天 ( 1..31)
%F 文件時間格式 same as %Y-%m-%d
%h same as %b
%H 24小時制的小時 (00..23)
%I 12小時制的小時 (01..12)
%j 一年中的第幾天 (001..366)
%k 短格式24小時制的小時 ( 0..23)
%l 短格式12小時制的小時 ( 1..12)
%m 雙位月份 (01..12)
%M 雙位分鐘 (00..59)
%n 換行
%N 十億分之一秒(000000000..999999999)
%p 大寫的當前域的上下午指示 (blank in many locales)
%P 小寫的當前域的上下午指示 (blank in many locales)
%r 12小時制的時間表示(時:分:秒,雙位) time, 12-hour (hh:mm:ss [AP]M)
%R 24小時制的時間表示 (時:分,雙位)time, 24-hour (hh:mm)
%s 自基礎時間 1970-01-01 00:00:00 到當前時刻的秒數(a GNU extension)
%S 雙位秒 second (00..60);
%t 橫向製表位(tab)
%T 24小時制時間表示(hh:mm:ss)
%u 數字表示的星期(從星期一開始 1-7)
%U 一年中的第幾週星期天為開始 (00..53)
%V 一年中的第幾週星期一為開始 (01..53)
%w 一週中的第幾天 星期天為開始 (0..6)
%W 一年中的第幾週星期一為開始 (00..53)
%x 本地日期格式 (mm/dd/yy)
%X 本地時間格式 (%H:%M:%S)
%y 兩位的年(00..99)
%Y 年 (1970…)

字串處理

  • substring
    • ${string:開始位置:長度}
    • "aa bb cc" | cut -c開始位置-結束位置
    • "aa bb cc" | cut -d" " -f 2  #以空格切開,再取第2個
  • replace
    • sed -i 's/原字串/新字串/g' 檔案路徑
    • ${string}系列
      • ${string/substring/replacement} #取代第一個
      • ${string//substring/replacement} #全部取代
      • {string/#substring/replacement} #從最前面比對
      • {string/%substring/replacement} #最後面比對
      • 要刪除字串,就不用帶 /replacement
  • indexOf
    • if [[ "$variable" =~ "keyword" ]]; then #有存在就成立

*.conf

config.conf
DEST_DIR="/var/backups"
test.sh
#!/bin/bash
. ./config.conf
echo $DEST_DIR
Shell Script 速查 Shell Script 速查 Reviewed by Wild on 11/17/2015 11:38:00 上午 Rating: 5

沒有留言:

沒有Google帳號也可發表意見唷!

技術提供:Blogger.