linux 批量挪指定文件,day27:expect批量执行命令|打包挪日记|文本处理|批量删除日记|房贷计算器...

1、在linux系统中/root/目录下有一个文件ip-pwd.ini,内容如下:

192.168.149.131,root,nihao123!,

192.168.149.132,root,nihao123@

每一行的格式分别为linux服务的IP 用户 密码,用一个shell脚本批量查看着看这些服务器的主机名;

脚本代码如下:  一个expect.sh脚本                 一个exe.sh脚本,用来调用expect.sh

[root@localhost_002 shell]# cat expect.sh

#!/usr/bin/expect

set port [lindex $argv 0]

set host [lindex $argv 1]

set passwd [lindex $argv 2]

set cm [lindex $argv 3]

spawn ssh -p $port root@$host

expect {

"yes/no" { send "yes\r";exp_continue}

"password:" { send "$passwd\r" }

}

expect "]*"

send "$cm\r"

expect "]*"

send "echo -n yuanhaohao >/tmp/yuanhh.txt\r"

expect "]*"

send "exit\r"

[root@localhost_002 shell]# cat exe.sh

#!/bin/bash

cat ip-pwd.ini|while read line

do

ip=`echo $line |awk -F ',' '{print $1}'`

pw=`echo $line |awk -F ',' '{print $3}'`

po=`echo $line |awk -F ',' '{print $4}'`

./expect.sh $po $ip $pw "hostname"

done

执行代码:

[root@localhost_002 shell]# sh exe.sh

spawn ssh -p 52588 root@192.168.149.131

Last login: Sun Mar 10 12:14:56 2019 from 192.168.149.130

[root@localhost_03 ~]# hostname

localhost_03

[root@localhost_03 ~]# echo -n yuanhaohao >/tmp/yuanhh.txt

[root@localhost_03 ~]# spawn ssh -p 52588 root@192.168.149.132

Last login: Sun Mar 10 12:15:06 2019 from 192.168.149.130

[root@localhost_04 ~]# hostname

localhost_04

[root@localhost_04 ~]# echo -n yuanhaohao >/tmp/yuanhh.txt

[root@localhost_002 shell]#

注释:当然 expect脚本可以远程批量执行命令(kaill掉某个服务,或者批量关机等),也可以用分发代码上线等;

2、一个脚本查找/data/log目录下,创建时间是三天前后缀名是.log的文件,打包后发送至192.168.149.131服务器上的/data/log,并删除源文件,只保留打包后的文件;

分析:查找3天前后缀是.log的文件:   find   /data/log  -type  f  -mtime +3 -name "*.log"

打包命令: tar  zcvf

把打包后文件发送到远程有两个命令可以使用;  rsync      scp           (只需要做rsync验证登录或者ssh免密码登录就可以拷贝远程)

rsync命令:  rsync   -avP  -e  "ssh -p 52588"  expect.sh   root@192.168.149.131:/data/log

[root@localhost_002 shell]# rsync -avP -e "ssh -p 52588" expect.sh root@192.168.149.131:/data/log/

sending incremental file list

expect.sh

366 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)

sent 460 bytes received 35 bytes 990.00 bytes/sec

total size is 366 speedup is 0.74

scp命令:      scp  -P  52588  exe.sh  root@192.168.149.131:/data/log/

[root@localhost_002 shell]# scp -P 52588 exe.sh root@192.168.149.131:/data/log/

exe.sh 100% 225 80.5KB/s 00:00

脚本命令如下:

[root@localhost_002 shell]# cat 77.sh

#!/bin/bash

cd /data/log

find /data/log/ -type f -mtime +3 -name "*.log" > /tmp/old_log

d=`date +%F`

tar zcvf $d.tar.gz `cat /tmp/old_log|xargs`

/usr/bin/rsync -avP -e "ssh -p 52588" $d.tar.gz root@192.168.149.131:/data/log/

#scp -P 52588 $d.tar.gz root@192.168.149.131:/data/log/

cat /tmp/old_log/|xargs rm -f

执行脚本:

[root@localhost_002 shell]# sh 77.sh

/data/log/anaconda.log

/data/log/X.log

/data/log/program.log

/data/log/packaging.log

/data/log/storage.log

/data/log/ifcfg.log

/data/log/ks-script-E_14kx.log

/data/log/ks-script-ojsReP.log

/data/log/journal.log

sending incremental file list

2019-03-10.tar.gz

195,777 100% 61.79MB/s 0:00:00 (xfr#1, to-chk=0/1)

sent 1,919 bytes received 1,715 bytes 7,268.00 bytes/sec

total size is 195,777 speedup is 53.87

3、有如下文本:其中前5行内容如下:

1111111:13443253456

2222222:13211222122

1111111:13643543544

3333333:12341243123

2222222:12123123123

用 shell 脚本处理后,按下面的格式输出:

[1111111]

13443253456

13643543544

[2222222]

13211222122

12123123123

[3333333]

12341243123

分析:本题的目的,是以第一段为基准,列出第二段;

首先需要截取第一段的内容,排序及去重; 然后遍历第一段的内容,用 awk 匹配来获取第二段的相关内容;

for  w   in `awk -F ':' '{print $1}' 3.txt|sort -n|uniq  ; do echo "[$w]" ;  done`

[root@fenye2019 shell]# awk -F ':' '{print $1}' 3.txt|sort -n|uniq

[root@fenye2019 shell]# for w in `awk -F ':' '{print $1}' 3.txt|sort -n|uniq`; do echo "[$w]"; done

[1111111]

[2222222]

[3333333]

第一段的内容获取到了,接下来和源文件 3.txt 匹配(awk实现),当匹配到$1== w时(w是上面的循环结果),则打印出 $2 出来;

不过此时涉及到一个传参的问题,如果把shell的参数出传递到 awk 中;  awk  -v   w2=$w -F ':'  '$2==w2  {print $2}'

for  w  in   `awk  -F ':'  '{print $1}'  3.txt|sort -n|uniq` ; do echo "$[w]";  awk -v w2=$w  -F ':'  '$1==w2  {print $2}'   3.txt ; done

[root@fenye2019 shell]# for w in `awk -F ':' '{print $1}' 3.txt|sort -n|uniq`; do echo "[$w]"; awk -v w2=$w -F ':' '$1==w2 {print $2}' 3.txt ; done

[1111111]

13443253456

13643543544

[2222222]

13211222122

12123123123

[3333333]

12341243123

当然 awk 也可以用如下这种方式来调用shell的参数 "' '"  (里面是单引号,外层是双引号的方式)

awk  -F ':'  '$1=="'$w'" {print $2}'  3.txt

[root@fenye2019 shell]# for w in `awk -F ':' '{print $1}' 3.txt|sort -n|uniq`; do echo "[$w]"; awk -F ':' '$1=="'$w'" {print $2}' 3.txt ; done

[1111111]

13443253456

13643543544

[2222222]

13211222122

12123123123

[3333333]

12341243123

脚本代码如下:

[root@fenye2019 shell]# cat 78.sh

#!/bin/bash

for w in `awk -F ':' '{print $1}' 3.txt|sort -n|uniq`

do

echo [$w]

awk -v w2=$w -F ':' '$1==w2 {print $2}' 3.txt

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值