博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
轻松实现远程批量拷贝文件脚本(女学生作品)
阅读量:5988 次
发布时间:2019-06-20

本文共 1313 字,大约阅读时间需要 4 分钟。

    下面是来自老男孩培训初级第14期第六节课的批量分发管理服务器课程的女学生的作品(详细注释)

在大多数男同学还在迷糊的时候,该女同学已经完整的读懂并注释了全部的脚本,老男孩非常感慨,大家都有此努力的学习态度何愁运维不牛呢?
脚本内容及注释如下:

[binzai@ssh-server scripts]$ cat fenfa_host.sh   #→实现把脚本当前目录下的文件拷贝到所有服务器的任意目录#!/bin/sh. /etc/init.d/functionsfile="$1"   #→传参文件remote_dir="$2"   #→远程服务器目录if [ $# -ne 2 ];then      #→如果传的参数不等于2个,那么就打印如下报错信息。#→ $#:获取当前shell命令行中的参数的总个数#→ -ne:不等于echo "usage:$0 argv1 argv2"#→$0:首个参数(fenfa_host.sh)echo "must have two argvs."exitfifor ip in $(cat /home/binzai/scripts/all_iplist.txt)#→$():在脚本里引用全局变量doscp -P22 -r -p $file binzai@$ip:~ >/dev/null 2>&1 &&\#→将hosts文件传到binzai家目录下,如果没有传递过去,将丢弃到/dev/nullssh -p 22 -t binzai@$ip sudo rsync -avz -P $file $remote_dir >/dev/null 2>&1#→通过ssh通道执行sudo命令将hosts文件拷贝到/etc目录下if [ $? -eq 0 ];then   #→如果上次执行结果返回值等于0,则执行OK。如果不等于0,则执行NO#→$?:上次执行结果的返回值#→-eq:等于action "$ip is successful." /bin/trueelseaction "$ip is failure." /bin/falsefidone‍
补充shell变量知识:
$0 获取当前执行的shell脚本的文件名,包括路径
$n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9用大括号括起来 {10}
$* 获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于“$1$2$3”…….注意与$
#的区别
$
# 获取当前shell命令行中参数的总个数
$@ 这个程序的所有参数”$1” “$2” “$3” “……” ,这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。
$? 是上次执行结果的返回值
0是正确,非0是错误
$()是引用全局命令(在脚本里面引用命令)
执行效果:
161247294.jpg
老男孩老师补充:
1)以上为基础的脚本,没什么难度,主要是感慨下学生的努力态度。
2)本脚本需要借助SSH KEY或者补充expect实现。

同期其他同学作品

批量分发管理三种解决方案案例视频分享(老男孩主讲)

 

转载地址:http://jujlx.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
tongji
查看>>
Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
查看>>
利用PowerBI结合SCOM展示数据报表
查看>>
oh mygod!伤寒还是什么?
查看>>
[linux]cp和mv对文件和链接影响的区别
查看>>
小米笔记本第七代CPU安装系统注意事项
查看>>
我的友情链接
查看>>
深入浅出:Windows 8.1应用开发
查看>>
跨运营商的MPLS ×××解决方案3
查看>>
Common Lisp环境搭建 for Windows
查看>>
SAN存储方式之falconstor实施方案(1)
查看>>
seq命令
查看>>
批量更新数据库中某字段的数值
查看>>
阿里云CentOS 7.5安装vsftp服务,安装及配置详情
查看>>
我的友情链接
查看>>
[swift3.0]关于ios 忽略文件 和 提交代码总是提交一些不必要的文件处理
查看>>
Shell脚本小技巧
查看>>
从一个简单的脚本:实时统计当前history命令共累积了多少条谈开去
查看>>
gitlab简单纪要
查看>>