1. 程式人生 > 其它 >時間處理

時間處理

1,shell 指令碼獲取時間 1)獲取當前時間date $ date +%Y-%m-%d 2016-01-27 $ date "+%Y-%m-%d %H:%M:%S" 2016-01-27 17:37:31 2)前後時間,加ago就是前,沒有ago就是後 $date -d '1 years ago' "+%Y-%m-%d %H:%M:%S" date -d "1 years ago" "+%Y-%m-%d %H:%M:%S" 2015-01-27 17:54:39 $date -d '1 months ago' "+%Y-%m-%d %H:%M:%S" date -d "1 months ago" "+%Y-%m-%d %H:%M:%S" 2015-12-27 17:54:45 days,hours,minutes 類似 date -d "-k days" "+%Y-%m-%d %H:%M:%S" 返回k天前的具體時間 2、shell 迴圈陣列 #定義方法一 陣列定義為空格分割 arrayWen=(a b c d e f) for var in ${arrayWen[@]}; do echo $var done 3,shell迴圈指令碼示例:迴圈補充hive表 #!/bin/sh source ~/.bash_profile; source /etc/profile; start_date="20190622" end_date="20190625" while [ "$start_date" -le "$end_date" ]; do yestertoday=`date -d "$start_date" +%Y-%m-%d` today=`date -d "$start_date+1days" +%Y-%m-%d` echo "yestertoday is $yestertoday today is $today" nohup hive -hiveconf yestertoday=$yestertoday -hiveconf today=$today -f update-from-table.hql> $yestertoday-run-update.log 2>&1 & start_date=$(date -d "$start_date+1days" +%Y%m%d) done #!/bin/sh source ~/.bash_profile; source /etc/profile; 4,定時任務指令碼示例 #redis-cli -h r-2ze5d255fc590664.redis.rds.aliyuncs.com -p 6379 -a 8C15cH4UL1xoaMVp -n 12 echo "[`date +"%Y-%m-%d %H:%M:%S"`] all task start" echo "[`date +"%Y-%m-%d %H:%M:%S"`] step 1: hive dump all scene_id docids" #hive_table="qttods.s002_publish_content_pool_available_content_tmp" hive_table="qttods.s002_publish_content_pool_available_content" part=`hive -e "show partitions $hive_table" | tail -1` #tail -1 顯示最後一行 echo $part day=`expr substr $part 5 10` hour=`expr substr $part 21 2` #echo "*** substr ***" #提取子字串,第2個引數是開始提取的索引值,第3個引數是提取子字串的長度,最終返回所提取的#子字串 echo "day=$day, hour=$hour" hive -e "set mapreduce.job.queuename=root.rec.develop; select content_id, scene_id from $hive_table where status=1 and day=\"$day\" and hour=\"$hour\"and scene_id in (10020041,10020040);" > good_scene_docids.txt #$? 是一個特殊變數,用來獲取上一個命令的退出狀態,或者上一個函式的返回值 if [ "$?" -eq "0" ]; then echo "hive ok" else echo "hive err" exit 1 fi 4,備份定時任務的指令碼 #!/bin/bash source ~/.bash_profile; source /etc/profile; echo "start backup at $(date "+%Y-%m-%d %H:%M:%S")" crontab -l > crontab-backups x=$(cat crontab-backups) echo "$x"#顯示crontab-backups檔案內的所有內容