标签存档: bash

一个svn分支合并脚本里用到的bash shell语法小总结

周四要合并3个分支,第一次合。尝试写了个脚本。写法发现自己的bash shell真的超不熟练,很多东西要再查google,悲痛,所以总结此文以铭记。

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/bash
 
cd `dirname $0`
base_dir=$(pwd)
 
if [ $# -lt 2 ] ; then
  echo "USAGE: $0 oldBranch newBranch"
  echo " e.g.: $0 http://XXX/api_1 http://XXX/api_2 merge.log"
  exit 1
fi
 
function ask_Y_N {
  echo -e "\e[31;40;1mCheck Again! Go Next? (Y/N) (default: N)\e[m"
  read dorm
  dorm=${dorm:=N}
  if [ $dorm != Y ] && [ $dorm != y ]; then
    echo "==>Exit."
    exit 0
  fi
}
 
oldBranch=$1
newBranch=$2
echo -e "oldBranch is: \e[36;40;4m$oldBranch\e[m"
echo -e "newBranch is: \e[36;40;4m$newBranch\e[m"
echo "Meger oldBranch to the newBranch."
ask_Y_N
 
date_str=$(date +%Y-%m-%d_%H:%M:%S)
#echo $date_str $base_dir $1 $2 $3
 
echo -e "\e[32;40;1m1. svn co newBranch.\e[m"
newBranchDir=$base_dir/$(date +%s)_new
svn co $newBranch $newBranchDir
 
echo -e "\e[32;40;1m2. find the oldBranch begin version.\e[m"
bengin_ver=$(svn log --stop-on-copy $oldBranch |grep 'r[0-9]* |' | tail -n 1 | awk -F"[ r|]" '{print $2}')
echo "Begin version: $bengin_ver"
svn log -r $bengin_ver $oldBranch
 
echo -e "\e[32;40;1m3. svn merge --dry-run -r $bengin_ver:HEAD\e[m"
svn merge --dry-run -r $bengin_ver:HEAD $oldBranch $newBranchDir
 
echo -e "\e[32;40;1m4. svn merge --ignore-ancestry -r $bengin_ver:HEAD\e[m"
ask_Y_N
cd $newBranchDir
svn merge --ignore-ancestry -r $bengin_ver:HEAD $oldBranch .
 
echo -e "\e[32;40;1m==> Done. Please do 'svn commit' yourself later!\e[m"
echo "cd $newBranchDir"
echo "svn ci -m 'merge from $oldBranch Details:\\"

从前到后,涉及到的几种bash语法:

  1. 当前shell文件名:$0。line:3
  2. 找shell当前目录:dirname,shell内执行shell,变量赋值。line:3-4
  3. 判断外部传入参数,错误则打印Usage,并退出。line:6-10
  4. 函数运用。直接用函数名,即调用函数。函数定义必须在函数调用之前。line:12-20,27
  5. shell着色。echo -e “\e[31;40; …… \e[m”,详细参见:http://corz.org/public/linux/usr/local/bin/color.sh

无觅相关文章插件,快速提升流量