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
原文地址:https://www.cnblogs.com/zjgtan/p/3430098.html