linux系统批量文件分发

1.scp_all.sh(免密登录的前提下)

作用:用特定的用户拷贝当前机器的文件到其他机器(ips内容是你要分发的机器,用于存放要操作的主机列表,用回车或空格隔开)

#!/bin/bash

RUN_HOME=$(cd "$(dirname "$0")"; echo "${PWD}")

NOW_LIST=(`cat ${RUN_HOME}/ips`)

SSH_USER="hadoop"
for i in ${NOW_LIST[@]}; do
    f_cmd="scp $1 $SSH_USER@$i:$2"
    echo $f_cmd
    if eval $f_cmd; then
        echo "OK"
    else
        echo "FAIL"
    fi
done

2.ssh_all.sh验证是否分发成功

#!/bin/bash

#dirname  "$0"
#这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,
#并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。
RUN_HOME=$(cd "$(dirname "$0")"; echo "${PWD}")

#读取文件内容赋值给NOW_LIST,这时NOW_LIST就变成一个数组变量,因为ips文件里的内容是一个数组,这里面读的是host地址列表
#NOW_LIST=("1" "2" "3")
NOW_LIST=(`cat ${RUN_HOME}/ips`)

#循环地址列表,并拼出ssh hadoop@<host> <输入命令>字符串
#eval可以将动态生成的命令行执行
SSH_USER="hadoop"
for i in ${NOW_LIST[@]}; do
    f_cmd="ssh $SSH_USER@$i \"$*\""
    echo $f_cmd
    if eval $f_cmd; then
        echo "OK"
    else
        echo "FAIL"
    fi
done

#shell 获取变量的特殊用法
#$# 是传给脚本的参数个数
#$0 是脚本本身的名字
#$1 是传递给该shell脚本的第一个参数
#$2 是传递给该shell脚本的第二个参数
#$@ 是传给脚本的所有参数的列表
#$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
#$$ 是脚本运行的当前进程ID号
#$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

 

posted @ 2023-03-30 09:56  无敌小阿没  阅读(170)  评论(0编辑  收藏  举报