实用的shell脚本例子

1.按月导出mysql日表中的数据,导出后再删除天表

#!/bin/bash
month1=`date '+%Y%m' -d '-1 months'`
monthfirst=`date '+%Y%m01'`
month1last=`date -d "$monthfirst last day" +%d`
i=1
j=1
##导出数据文件存放路径
outdir=/data/mysql_export
#遍历有日期后缀的表
while [ $i -le $month1last ];do
if [ $i -lt 10 ];then
j=0$i;
#对应天数小于10
/data/mysql -h${mysql_ip} -u${mysql_user} -p${mysql_password} databasename -Ne "select * from table_${month1}${j}">${outdir}/table_${month1}${j}.txt 
let i++
else
j=$i
#对应天数大于10
/data/mysql -h${mysql_ip} -u${mysql_user} -p${mysql_password} databasename -Ne "select * from table_${month1}${j}">${outdir}/table_${month1}${j}.txt 
let i++
fi
done
#表删除
while [ $i -le $month1last ];do
if [ $i -lt 10 ];then
j=0$i;
#对应天数小于10
/data/mysql -h${mysql_ip} -u${mysql_user} -p${mysql_password}<<EOF
use databasename;
drop table table_${month1}${j}; 
EOF
let i++
else
j=$i
#对应天数大于10
/data/mysql -h${mysql_ip} -u${mysql_user} -p${mysql_password}<<EOF
use databasename;
drop table table_${month1}${j}; 
EOF
let i++
fi
done

2.使用ftp命令实现本地服务器推送文件到远程服务器

#本地服务器推送文件到远程服务器
ftp -n <<EOF
open 远程服务器ip地址 
user 用户名  密码
lcd 本地服务器目录
cd  远程服务器目录
pwd
bin
prompt
mput 要推送的文件
ls 
bye
EOF 

#获取远程服务器的文件到本地服务器
ftp -n <<EOF 
open  远程服务器ip地址
user 用户名 密码
prompt 
lcd  本地服务器目录
cd   远程服务器目录
pwd 
ls    要获取的文件名
mget  要获取的文件名 
bye
EOF

3.使用sftp命令将远程服务器上的文件搬运到本地

rmt_dir='远程服务器目录'
loc_dir='本地服务器目录'
file_name=1.txt
expect <<EOF 
set timeout 6000
spawn sftp  ${user}@${ip}:${rmt_dir}/${file_name} ${loc_dir}
expect "*assword:"
send "${ip_password}\r"
expect eof 
exit
EOF

4.使用scp命令将本地服务器上的文件推送到远程服务器

rmt_dir='远程服务器目录'
loc_dir='本地服务器目录' 
expect << EOF 
set timeout 60
spawn bash -c "scp ${loc_dir}/test.txt ${user_name}@${host_ip}:${rmt_dir}"
expect {
"*yes/no" {send "yes/r";exp_continue}
"*assword:" {send "${user_pwd}\r"}
}
expect eof
exit
EOF

5.使用scp命令将远程服务器上的文件搬运到本地服务器

rmt_dir='远程服务器目录'
loc_dir='本地服务器目录' 
expect << EOF 
set timeout 6000
spawn scp  ${user_name}@${host_ip}:${rmt_dir}/text.txt ${loc_dir} 
expect "*assword:"
send "${user_pwd}\r"

expect eof
exit
EOF

6.本地服务器上执行远程服务器上的脚本,为远程服务器文件夹赋权限,为远程服务器创建目录,搬运本地服务器上的文件到远程服务器对应目录下

expect <<EOF
#本地服务器上执行远程服务器上的脚本
set timeout 60
spawn ssh -p 22 ${user}@${ip} "sh /data/a.sh"
     expect {
     "*yes/no*" {send "yes\r";exp_continue}
     "*assword:" {send "${password}\r"}
     }
     expect eof
wait
#为远程服务器文件夹赋权限
set timeout 60
spawn ssh -p 22 ${user}@${ip} "chomd 770 ${remote_path}"
    expect {
    "*yes/no*" {send "yes\r";exp_continue}
    "*assword:" {send "${password}\r"}
    }
    expect eof
wait
#为远程服务器创建目录
set timeout 60
spawn ssh -p 22 ${user}@${ip} "mkdir ${remote_path}"
    expect {
    "*yes/no*" {send "yes\r";exp_continue}
    "*assword:" {send "${password}\r"}
    }
    expect eof
wait
#搬运本地服务器上的文件到远程服务器对应目录下
set timeout 60
spawn bash -c "scp ${location_path}/* ${user}@${ip}:${remote_path}"
    expect {
    "*yes/no*" {send "yes\r";exp_continue}
    "*assword:" {send "${password}\r"}
    }
    expect eof
exit
EOF

7.通过创建自定义函数实现为文件生成.check文件

ergodic(){
for file in ` ls $1 `
do 
	if [ -d $1"/"$file ]
	then 
		ergodic $1"/"$file 
	else
	    ##行号 
	    fileline=`wc $1"/"$file | awk '{print $1}'`
	    #字节数
	    fileSize=`wc $1"/"$file | awk '{print $3}'`
	    #创建check文件
	    checkfile=`echo $1"/"$file | awk -F . '{print $1}'`
	    touch $checkfile.check
	    ##赋权
	    chmod 774 $checkfile.check
	    ##将文件信息写入到check文件中
	    echo "fileLine=$fileLine">$checkfile.check 
	    echo "fileSize=$fileSize">>$checkfile.check 
	fi
done
}
ergodic $lcd_file
#给文件赋权
chmod -R 775 $lcd_file

8.根据文件TMPBIGDATA中第二个字段前7位的值,将文件分成多个文件,生成的文件后缀为第二个字段的前7位,第二个字段前7位相同的行在同一个文件中

file_pref=BIGDATA$(date '+%Y%m%d%H%M%S')
sed -i 's/\t/|/g' TMPBIGDATA.txt
awk -F '|' '{a=substr($2,0,7);print $0 >>"'${file_pref}.'"a}' TMPBIGDATA.txt

9.获取文件字段数量

tmp_dir='/data/'

file_name=$(ls -lt ${tmp_dir} --time-style="+%Y%m%d%H%M%S" | grep -v '^total' | head -n 1 |awk '{print $7}')
count_num=$(head -1 -q ${tmp_dir}$file_name | awk 'BEGIN{FS="|"; i=0;} {i=i+NF} END{print i;}')

10.死循环每300s循环一次,判断是否有数据文件生成,若有则结束循环

while(true);do 
echo "循环开始"
#判断文件是否存在且内容不为空
	if [ -s 1.txt ];then
		echo "执行相应代码"
		echo "结束循环"
		break
	fi
echo "文件未生成,睡眠5分钟后再次循环判断!"
sleep 300s
done 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值