如果想批量修改整个项目里面的一些内容,用Shell还是比较方便的,当然这样的一些经常需要修改的内容,应当单独在一个配置文件里声明比较好。
如想修改项目里有用到的ip地址
#!/bin/bash
# $1 = windows ip
if [ $# != 1 ] ; then
echo "USAGE: $0 WindowsIP"
exit 1;
fi
# 获取本机IP
# 由于本机IP可能活获取到好几个,这个用 grep '133' 进行了过滤,可以自己根据自己的IP需要进行过滤
# grep -v '169' 则就是不取含有'169'的
# 注意,变量名和等号之间不能有空格
addr=`/sbin/ifconfig|grep inet|grep -v 127.0.0.1|grep -v inet6|grep '133'|awk '{print $2}'|tr -d "addr:"`
if [ ! -n "$addr" ] ;then
echo "please modeify the shell to grep your localIp addr"
exit
fi
# 定义需要修改的文件数组
localIp=(
'js/1.js'
'js/2.js'
)
# 修改本地IP
for str in ${localIp[*]}
do
# DbConn.js
sed -i "" "s/mongodb:\/\/.*:27017/mongodb:\/\/${addr}:27017/g" $str
# properties.js
sed -i "" "s/databaseIp = \".*\"/databaseIp = \"${addr}\"/g" $str
done
需要注意的是Mac和Linux下的sed命令还有点不一样(坑。。), 以上的命令在Linux上就是
# 少了第三个个参数 ""
sed -i "s/mongodb:\/\/.*:27017/mongodb:\/\/${addr}:27017/g" $str
具体原因可以参看 sed: -i may not be used with stdin on Mac OS X
另外,在ubuntu上运行的时候,因为数组的原因,会报错 Syntax error: "(" unexpected
,参考网上的解答用 /bin/bash 来运行就可以了。(具体原因等以后对shell更熟了再补充好了。。)
更多的shell 命令学习 Linux 命令大全
用Nodejs来执行这些shell命令
const exec = require('child_process').exec;
exec('sed -i "s/world/world1111/g" 2.js', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
用Node来实现文件的读写修改
#!/usr/bin/env node
/**
process.argv 表示命令行传入的参数
[ '/Users/xushaopeng/.nvm/versions/node/v7.1.0/bin/node',
'/Users/xushaopeng/Desktop/configure.js',
'11',
'112',
'22' ]
*/
var args = process.argv.slice(2);
var fs = require('fs');
if (args.length < 1) {
console.log('请输入参数');
return;
}
var fileArr = [
'./1.js'
];
var pattern = /(serverIp=).*/g;
fileArr.forEach(function (fileName) {
// 同步读取文件,修改,再写入
var file = fs.readFileSync(fileName, {encoding: 'UTF-8'});
var result = file.replace(pattern, '$1' + args[0]);
fs.writeFileSync(fileName, result, {encoding: 'UTF-8'});
});
使用封装过后的shelljs模块
require('shelljs/global');
ls('*.js').forEach(function(file) {
sed('-i', 'hello', 'world', file);
});
shelljs通过对Node进行一些封装来模拟实现一些shell命令。比如sed命令,shelljs其实也是用的readFileSync,replace,writeFileSync这样的几个步骤来完成。这样通过Node来实现的一个好处就是没有跨平台的问题,比如sed命令在Mac和Linux上的不一致。参看Node.js 命令行程序开发教程 - 阮一峰。