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表示没有错误,其他表示有错误
scp_all
#!/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
ssh_root
#!/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="ssh -t $SSH_USER@$i ~/exe.sh \"$*\""
echo $f_cmd
if eval $f_cmd; then
echo "OK"
else
echo "FAIL"
fi
done