shell脚本
1、循环输出日期
for ((i = 1; i < 10; i++)) do date -d '-'${i}' day' +"%Y%m%d" done
'xxx'表示的字符串不解析内容 如'${i}'就是按照字符输出
"xxx"表示字符串解析内容
如i=3
"${i}" 输出3
2、比较两个日期相差的天数
思路:将日期转为linux时间
today=`date +%Y%m%d`#当前日期 yesterday=`date -d "-1 day" +%Y%m%d`#前一天日期 l_today=`date "$today" +%s` #转为linux的秒 l_yesterday= `date "$yesterday" +%s` #转为linux的秒 interval=`expr $l_today - $l_yesterday`#操作符两边有空格 inter_day=`expr $interval / 24 / 3600` #expr执行整数操作
5、时间差计算之计算小时差
最近遇到的比较坑的问题。date -d命令不能将201402220900转换成秒,需要转换到标准格式然后计算秒
runday=20140221 runhour=09 RUNTIME=`date -d "${runday} ${runhour}" +%Y-%m-%d" "%H:00:00` RUNTIME=`date -d "${RUNTIME}" +%s`
4、变量
var=1#变量初始化 var=$var+1#字符串连接 var=`expr $var + 1`#用于整数值运算 echo $var | awk '{xxx}' #用awk进行数学运算
5、数组
array=(1 2 3 4) #数组声明 array[0]=1#索引赋值 array[1]=2 ${array[0]} #索引元素 for data in ${array[@]} do #遍历数组 echo ${data} done declare -A array#申明关联数组(字典) array[a]=1#赋值 array=([a]=1 [b]=2)#赋值
6、读行文本
cat file | while read line do echo ${line} done
上面这个写的不好,因为用到了管道,while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的变量无法被保存下来。更好的写法。
while read line do INPUT_PATH="${INPUT_PATH}, ${nsclickPath}/${line}" done < tmp
7、grep 命令
grep -v xxx file#排除查找 grep -v xxx file | grep yyy#多级查找 命令执行成功返回0,可以通过man查找手册 if [ $? -ne 0 ] do exit 1 done