最近某项更新的工作需要做大量重复的工作,一方面在作打包工作时在图形界面上做文件十分繁琐,另一方面在编辑config文件时即使用上正则替换也常常需要作人工检查和C&P,非常浪费时间。于是乎写了个Shell脚本把该自动化的都自动化,以后作这种工作一个命令就解决。
脚本是在 Mac OS X 上写的,没用到什么特殊的命令,所以类Unix的操作系统应该都能跑。文末有今天编写的脚本。
Shell需要注意的地方有:
- #是注释,但是第一句#!/bin/bash是指定shell的解释脚本。
#!后面带上解释脚本的绝对路径。
如果脚本第一句不以#!开头则默认使用 Bourne Shell, 即:/bin/sh
如果第一个非空字符是#但不是#!开头则默认使用 C Shell。
常用的解释脚本有:
[code lang="bash"]
#!/usr/bin/perl
#!/bin/php
#!/bin/expect
[/code]
- 参数
Shell脚本通常都可以用命令+参数的形式调用,如:
command -p1 - p2
在脚本中 $# 代表参数个数,$0 代表程序的名字。所以跟平时习惯不同的是,第一个参数是 $1 而不是 $0。最多支持9个参数, $1 - $9.
- 比较
Shell的比较常用
-lt #小于
-gt #大于
-eq #等于
如:
[code lang="bash"]
if [ "$a" -eq "$b" ];
[/code]
也可以使用CShell风格的 < , > 但是需要加上双层括号,如:
[code lang="bash"]
if (("$a" < "$b")) then
[/code]
还有一些其他的比较方式,不复杂的脚本有 -lt -gt 就足够了。
- 变量
[code lang="bash"]
aVar=123 #变量赋值
echo $aVar #变量使用
[/code]
- 字符串操作
字符串操作在作文件命名的时候很有用,可以批量重命名之类的。
这篇文章有很详细的字符串操作的介绍:http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
- 条件判断
[code lang="bash"]
#[]里面一定要有两个空格
if [ $# -lt 3 ];
then
else
fi
#以fi结束每一个if
[/code]
- 脚本
[code lang="bash"]
#!/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
[/code]