bash shell杂记
浏览:1991次 出处信息
- 在css文件里 匹配@import url("/path/html5.css"). 将/path里的html5.css文件内容替换当前行. 即css合并
- 将js文件里的document.write("/path/dom.js"). 将/path/dom.js文件替换当前行. 即js合并
- 将模块打包成线上路径. 可以直接cp上线上目录. 提高上线效率,降低上线出错机率.
- 将sprite的图片文件加上版本号
- 将<link>标签里的css路径加上版本号
- 将<script>标签里的js路径后加上版本号
- css, js 代码压缩
- 实现基本的检查, 例如不能将测试环境的一些代码发布上线上等等
- ...
bash shell在*nix里很爽的机制有管道和重定向, 非常方便. 但是也有一些需要注意的点.
管道
管道的作用是将前一个命令的输出用作后一个命令的输入.
但你想写这样的代码时:
cnt=0
cat xxx.file | while read line; do
if [ ${line} == 'error']; then
let cnt=$cnt+1
exit
fi
done
是不能修改cnt变量的值的. 这是因为通过管道,是在当前进程中fork出一个子进程, 因此变量上面不可修改父进程的变量. 这也合情合理. cat xxx.file | while read line; do
if [ ${line} == 'error']; then
let cnt=$cnt+1
exit
fi
done
那如果我想修改应该怎么办比较方便? 答案是通exit退出进程时的返回值来操作. exit能返回最后一个子进程操作的返回值.
cnt=0
cat xxx.file | while read line; do
[ ${line} == 'error'] && exit 2
done
retval=$?
[ $retval -eq 2 ] && let cnt=$cnt+1
cat xxx.file | while read line; do
[ ${line} == 'error'] && exit 2
done
retval=$?
[ $retval -eq 2 ] && let cnt=$cnt+1
文本编辑的差异
如上面如说, 一行行的读总没问题吧? 事实并非如此.
之前不了解bash这些命令的原理, 于是踩了个坑. 我从svn checkout下代码后. 读取css里@import的文件发现有的能读取,有的不能读.
最后定位到不能读的文件都是一行. 或者是最后一行.
在公司群内询问之后, 有人提到可能windows的换行与*nix的是不一样. 于是将\r替换后依然不能逐行read line.
通过file命令查看之后, 发现奇怪的事.
引用
with no line terminators
用命令"od -c xxx.css"确认后果然看asc码文本最后无换行.
这应该是windows下某些编辑器的问题. 具体就没再去查.
回到这个问题, 在网上搜了一下, 没有找到一些资料可参考.
于是我当时想到的是一个山寨办法, 给每一行末我加一个回车. 然后再保存回去, 嘿嘿.
也算能解决问题吧. 也咨询了一些同事, 这个目前还没有找到太好办法.
sed '{
/$/ a\
}' ${file} > ${file}.bak
mv -f ${file}.bak ${file}
/$/ a\
}' ${file} > ${file}.bak
mv -f ${file}.bak ${file}
引号
单引号是能保持包含在单引号里的原值
双相号也是如此,但除了反引号"`"美元符及转义符"\"
但是确有所不同. 加上字符串变量加上引号会更保险
a='* @@'; echo $a
a='* @@'; echo "$a"
log
尽可能的多输出日志, 分清info, warning, error类型,对于真正出问题时定位很有用.
特别是你不能在本机debug时.
建议继续学习:
- 你可能不知道的Shell (阅读:6917)
- 面向对象的Shell脚本 (阅读:5142)
- 在 shell 脚本里打日志 (阅读:4767)
- Bash如何取得当前正在执行的脚本的绝对路径? (阅读:4773)
- 使用Shell快捷键助你一臂之力 (阅读:4483)
- Bash Shell 快捷键 (阅读:3987)
- shell文件存在相关判断参数 (阅读:3547)
- 加密你的shell (阅读:3584)
- Shell的那些事儿 (阅读:3207)
- Unix考古记:一个“遗失”的shell (阅读:3275)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Linux下pstack的实现
后一篇:虚拟内存的作用 >>
文章信息
- 作者:Rank 来源: never-online
- 标签: shell
- 发布时间:2011-01-23 22:36:14
建议继续学习
近3天十大热文
- [67] Oracle MTS模式下 进程地址与会话信
- [67] Go Reflect 性能
- [67] 如何拿下简短的域名
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [59] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [59] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 读书笔记-壹百度:百度十年千倍的29条法则