常见错误
- var=? 等号两侧不能空格
- 管道命令生成子shell,无法修改全局变量的值
cat file | while read line
do
var=var$line
done # 实际var还是原来的值
常见指令
| 命令 | 作用 |
|---|
| ${x} | 引用变量 |
| ${#x} | 变量x的长度 |
| $n | 传递参数,0是文件名,n是第n个参数 |
| $# | 传递到脚本的参数个数 |
| $* | ”$*“ 等价于 “$1 $2 … $n” |
| $@ | “$@” 等价于 “$1” “
2
"
…
"
2" … "
2"…"n” |
| ${#1} | 第一个参数的长度 |
| $? | 返回上一次的执行结果,0表示成功 |
| $() | 命令替换 |
| $[] | 表达式求值,$[]用于插值,而expr则将值输出 |
while read line
do
done
let i=$i+1
任务实例
# 定义列表
STAT_DAYS=(${YYYYMMDD} ${YYYYMMDD_1DaysAgo} ${YYYYMMDD_2DaysAgo} ${YYYYMMDD_3DaysAgo} ${YYYYMMDD_4DaysAgo} ${YYYYMMDD_5DaysAgo} ${YYYYMMDD_6DaysAgo})
# data存放一周7天的数据
mkdir data
for date in ${STAT_DAYS[*]}
do
# 判断当天的统计数据是否已经生成
hadoop fs -test -e hdfs://search-offline/user/stat/xxx/${date}
if [ $? -eq 0 ] ;then
echo 'exist'
else
python check_pr_dist.py --day ${date}
hdfs dfs -get hdfs://search-offline/user/stat/xxx/${date}/*.csv data #将hdfs文件拉取到本地
fi
done
v_str=''
IFS=',' #定义分隔符
while read line
do
v_str=$v_str''
for val in $line
do
v_str=$v_str'| '$val' | '
done
v_str=$v_str'
'
done content} > result.txt