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.confDEST_DIR="/var/backups"
test.sh
#!/bin/bash
. ./config.conf
echo $DEST_DIR
Shell Script 速查
Reviewed by Wild
on
11/17/2015 11:38:00 上午
Rating:
沒有留言:
沒有Google帳號也可發表意見唷!