1:shell中for循环
形式一:
for varible1 in {1..5}
do
echo "Hello, Welcome $varible1 times "
done
eg:任务是通过创建Hive外部表来处理hdfs上的数据,我的思路是先遍历Hdfs上指定文件夹下的文件,然后add parition到指定hive表中。
/cluster/hadoop/bin/hadoop fs -ls /HADOOP/TEST/ | awk -F ' ' 'NF>2{print$6}' > .file
for file in .file
do
sql=`alter table test add partition(date='$line') location '/hadoop/test/$line'`
/cluster/hive/bin/hive -e $sql
done
2:shell中字符串的处理
#首先可以不适用任何函数来处理字符串
1.# 号截取,删除左边字符,保留右边字符。
代码:
ch=abcd1234
echo ${ch#*d}
其中 ch 是变量名,# 号是运算符,*d 表示从左边开始删除第一个 字符d 及左边的所有字符
结果是 :1234
2.## 号截取,删除左边字符,保留右边字符。
代码:echo ${ch##*,}
##*, 表示从左边开始删除最后(最右边)一个 , 号及左边的所有字符。
3.%号截取,删除右边字符,保留左边字符。
代码:echo ${var%,*}
%/* 表示从右边开始,删除第一个, 号及右边的字符。
4.%% 号截取,删除右边字符,保留左边字符。
代码:echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符。
5.从左边第几个字符开始,及字符的个数。
代码: ${var:0:7}
其中的 0 表示左边第一个字符开始,7 表示字符的总个数。
6.从左边第几个字符开始,一直到结束。
代码:echo ${var:7}
其中的 8 表示左边第9个字符开始,一直到结束。
7.从右边第几个字符开始,及字符的个数。
代码:${var:0-11:3}
其中的 0-11 表示右边算起第11个字符开始,3 表示从左边的3个字符。
8.从右边第几个字符开始,一直到结束。
代码:echo ${var:0-7}
表示从右边第七个字符开始,从左往右一直到结束。
3:shell字符串截取的函数使用
#使用awk来分隔字符串
STR_FRUIT
=
"Banana 0.89 100"
取第
3
字段
echo
$STR_FRUIT
| awk
'{ print $3; }'
#使用substr来截取字符串
用法 substr(str,start,length)
#使用cut -c 来截取字符串
用的较多的是cut -c 已字符为单位截取字符,cut -b 以字节为单位截取字符
who | cut -c 3-5,8
截取执行who命令之后的3,4,5和8字符的内容
4:shell中的条件判断
在实际工作中,shell中会用到很多条件判断。就比如你在shell中写的hql当今天跑完一次之后当天不应该再跑。可以加上条件判断
判断hdfs指定目录下文件是否存在
如果不清楚命令可以用 hadoop fs -help来查看hadoop 的api
hadoop fs -test -e /hadoop/test/$today
if [ $? -eq 0 ] ; then
echo "今天已经执行过了"
else
/cluster/hive/bin/hive -e $sql
fi