shell脚本

来源:互联网 发布:汉语网络在线老师招聘 编辑:程序博客网 时间:2024/06/03 04:19

我们写shell脚本的时候,可能会遇到交互式的情况,如果不想在执行脚本的时候出现交互式,怎么做呢?很简单,写个expect脚本就能轻易解决,下面是我写的一个简单的shell。

1、写好expect脚本,解决交互式问题,在后面的shell中将会引用expect

#!/usr/bin/expect

spawn kinit hdfs

expect{

"PASSWORD*" {send "testpassword"}

}

这样一个最简单的expect脚本就写好了!

2、下面是shell脚本,用Hadoop下载一定时间范围内的数据

#!/bin/bash
date_start=$1
date_end=$2
date_process=${date_start}
hdfs_dir=/TEST/ZMER
local_dir=/tmp/test
log_dir=/tmp/logs

#引用expect脚本
cd /opt/fi_client
source bigdata_env
expect /opt/fi_client/hdfs_expect

#date_increament.sh 2016010100 2016040100

while [ "${date_process}" -le "${date_end}" ]
do
#call your shell scripts ${date_process}
dd_date=${date_process:0:8}
if [ ! -d $local_dir/$dd_date ]
then mkdir -p  $local_dir/$dd_date
fi
for i in $(cat $local_dir/test.txt)
do
hadoop fs -get $hdfs_dir/TEST_$dd_date.dat $local_dir/$dd_date 1>/dev/null 2>&1
if [[ $? == 0 ]]
then touch $hdfs_dir/TEST_$dd_date.verf
date=`date +"%Y%m%d %H%M%S"`
log_rec="[TIME]: "$date" [MGS]:"$hdfs_dir/TEST_$dd_date.dat
echo $log_rec "is load succed" >> $log_dir/test_$dd_date.log
fi

done

#时间循环时间格式为yyyymmddhh

date_process=`date +%Y%m%d%H -d "1 hours $dd_date ${date_process:0-2}"`
done

0 0
原创粉丝点击