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表示没有错误,其他表示有错误