对码当歌,猿生几何?

shell小结

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