最近某项更新的工作需要做大量重复的工作,一方面在作打包工作时在图形界面上做文件十分繁琐,另一方面在编辑config文件时即使用上正则替换也常常需要作人工检查和C&P,非常浪费时间。于是乎写了个Shell脚本把该自动化的都自动化,以后作这种工作一个命令就解决。
脚本是在 Mac OS X 上写的,没用到什么特殊的命令,所以类Unix的操作系统应该都能跑。文末有今天编写的脚本。
Shell需要注意的地方有:
- #是注释,但是第一句#!/bin/bash是指定shell的解释脚本。
#!后面带上解释脚本的绝对路径。
如果脚本第一句不以#!开头则默认使用 Bourne Shell, 即:/bin/sh
如果第一个非空字符是#但不是#!开头则默认使用 C Shell。
常用的解释脚本有:
#!/usr/bin/perl #!/bin/php #!/bin/expect
- 参数
Shell脚本通常都可以用命令+参数的形式调用,如:
command -p1 - p2
在脚本中 $# 代表参数个数,$0 代表程序的名字。所以跟平时习惯不同的是,第一个参数是 $1 而不是 $0。最多支持9个参数, $1 - $9.
- 比较
Shell的比较常用
-lt #小于
-gt #大于
-eq #等于
如:
if [ "$a" -eq "$b" ];
也可以使用CShell风格的 < , > 但是需要加上双层括号,如:
if (("$a" < "$b")) then
还有一些其他的比较方式,不复杂的脚本有 -lt -gt 就足够了。
- 变量
aVar=123 #变量赋值 echo $aVar #变量使用
- 字符串操作
字符串操作在作文件命名的时候很有用,可以批量重命名之类的。
这篇文章有很详细的字符串操作的介绍:http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
- 条件判断
#[]里面一定要有两个空格 if [ $# -lt 3 ]; then else fi #以fi结束每一个if
- 脚本
#!/bin/bash #配置打包后会输出的路径 targetPath=~/Download/packages/ echo "****************************************" echo "* Pack Language Packages. -- JustinYim *" echo "****************************************" echo "ouput path: ~/Download/packages/" echo "Now Starting..." if [ $# -lt 2 ]; then echo "Oops, please append the Resources folder's path." echo "And the version name like: pack xxx/xxx 1.1.2" else echo "Resources path: "$1 echo "Clening target path..." rm -rf ~/Downloads/packages/* echo "CPing files..." #CP Files cp -rf $1/*.lproj ~/Downloads/packages/ cd ~/Downloads/packages #中文简体不进行更新,直接删掉 rm -rf zh_cn.lproj #zip files #新建一个配置文件 echo '[package]' > conf.conf #设置包的起始值,因为之前已经有很多个包在服务器上了 num=7 #遍历所有文件 for filename in $(ls) do #不对配置文件进行压缩动作 if [ "$filename" = "conf.conf" ] then echo "Config file!" continue fi #echo "ZIPing "$filename"..." #替换掉版本号里面的.字符,如1.1.2改为1_1_2作为文件名用 ver=${2//./_} #去掉文件名后缀,%表示从字符串尾部开始,找到.字符的时候,去掉后面的字符,如:ar.lproj会变成ar #如果是 ${filename#.*} 则会变成从头部开始, ar.lproj会变成 lproj lang=${filename%.*} #设置zip文件的名字 zipname=x.strings.$lang.$ver.zip #复制并压缩x.strings文件 cp $filename/x.strings x.strings.$lang zip $zipname x.strings.$lang #echo 'wirting config file...' #自动编写配置文件 echo '[number'$num']' >> conf.conf echo 'Id='$((++num)) >> conf.conf echo 'PackPath=/xxx/package/'$zipname >> conf.conf echo 'Name='$lang'|'$2 >> conf.conf echo '' >> conf.conf #clean files #删掉临时文件 echo "Remove temp files..." rm -rf $filename rm x.strings.$lang done fi