用shell实现自动化管理,那感觉真是棒。
今天就分享下用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的比较常用
如:
if [ "$a" -eq "$b" ];
也可以使用CShell风格的 < , > 但是需要加上双层括号,如:
if (("$a" < "$b")) then
还有一些其他的比较方式,不复杂的脚本有 -lt -gt 就足够了。
变量
aVar=123 #变量赋值
echo $aVar #变量使用
字符串操作
字符串操作在作文件命名的时候很有用,可以批量重命名之类的。
有关shell字符串操作的介绍,请参考文章:http://www.jb200.com/article/9788.html
条件判断
下面是脚本内容:
#!/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