時間處理
阿新 • • 發佈:2021-07-13
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檔案內的所有內容