最近为了一些自动化的任务,要写一些脚本。可以使用 Ruby 脚本、Ruby 的 rake\thor 等等,我为了简洁和性能,我了解了一下 Shell,发现用 Shell 来做这个事情更合适。性能,命令行,管道,丰富的现有工具,基于 Linux 本身,Shell 真是一个好东西。以前认为用 Ruby 来做这个事情是一个不错的选择,现在知道了,那是因为相比起 Shell 来,更熟悉 Ruby,程序员总是喜欢自己熟悉的领域,而排斥自己不熟悉的领域。其实多了解一下其它方面的,更利用自己工作的开展,提高工作效率。
我随便总结一下几个知识点
字符串
声明一个字符串变量后,使用的时候,在变量名前面加一个$符号才能将其值取出来
DATA_FILE=data.tar.gz
echo $DATA_FILE
字符串拼接
DATA_DIR=/Users/caojinhua/code/
DATA_FILE=data.tar.gz
DATA_PATH=$DATA_DIR""$DATA_FILE
将命令执行的结果保存在变量中
sha1=`ls -al`
if 语句结构
if 语句条件测试命令:
[ -d DIR ] 如果 DIR 存在并且是一个目录则为真
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真
[ -z STRING ] 如果 STRING 的长度为零则为真
[ -n STRING ] 如果 STRING 的长度非零则为真
[ STRING1 = STRING2 ] 如果两个字符串相同则为真
[ STRING1 != STRING2 ] 如果字符串不相同则为真
[ ARG1 OP ARG2 ]
ARG1 和 ARG2 应该是整数或者取值为整数的变量,OP 是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个
之前弄错好几次,中括号前后的空格不能少。
if 语句的结构
if [ xxx ]
then
fi
if [ xxx ]; then
else
fi
if [ xxx ]; then
elif [ ! xxx ]; then
fi
时间格式化
date +%Y%m%d
a=`date +%Y%m%d`
echo $a