循环
遍历数组
NUM=10
for i in $(seq 1 $NUM)
do
echo "$i"
done
遍历文件中的所有行
while read line
do
echo $line
done < ./file.txt
if
增强双括号
双括号的特殊用法
- (()) 增强括号的用法: 符合c语言的算术比较
常用于算术运算比较. 双括号中的变量可以不使用$符号前缀, 只要括号中的表达式符合C语言运算规则, 支持多个表达式用逗号分开.
比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i inseq 0 4
或者for i in {0..4}.
再如可以直接使用if (( i < 5 ) ) , 如 果 不 使 用 双 括 号 , 则 为 i f [ i -lt 5 ]. - [[]] 增强方括号用法: 符合c语言的字符串比较
常用于字符串的比较. 主要用于条件测试, 双括号中的表达式可以使用&&, ||, <, >等C语言语法.
比如可以直接使用if [[ a != 1 && a != 1 && a != 2 ]], 如果不适用双括号, 则为if [ a -ne 1] && [ a -ne 1] && [ a != 2 ]或者if [ a − n e 1 − a a != 2 ].
日期
每月的最后一天
dayno=`date -d "1 month" +%Y%m01`
lastday_month=`date -d "1 day ago ${dayno}" +%Y%m%d`
往前推一个小时
dayno=`date -d "1 hour ago" +%Y%m%d`
crontab定时调度
crontab -l # 查看当前定时任务
crontab -e # 编辑定时任务
crontab -l # 查看当前定时任务
crontab -e # 编辑定时任务
hadoop
检查文件
hadoop fs -test -e
: 如果路径存在则$?值为0
flag=0
times=0
while [ ${flag} -eq 0 ]
do
hadoop fs -test -e hdfs://ip:port/warehouse/database_name/database_name.db/table_name/dayno=${YYYYMMDD}/hour=${v_dayhour_hh}/*
if [ $? -eq 0 ];then
flag=1
else
if [ ${times} -eq 30 ];then
echo "tidb数据同步异常 或同步超过1小时"
exit 1
fi
let times++
sleep 120s
fi
done
hadoop fs -test
命令手册
-test -[defsz] <path> :
Answer various questions about <path>, with result via exit status.
-d return 0 if <path> is a directory.
-e return 0 if <path> exists.
-f return 0 if <path> is a file.
-s return 0 if file <path> is greater than zero bytes in size.
-z return 0 if file <path> is zero bytes in size, else return 1.