1.执行shell脚本命令
例 test.sh内容如下
#!/bin/bash
# echo 是输出标示 如:输出 This is a example
echo "This is a example"
# 当前目录 pwd ; 列出当前目录下的文件 ls
echo "当前目录"
pwd
ls
注:
其中第一行是提示用bash执行,
#
是注释
执行结果
This is a example
当前目录
aa cc.sh ee.sh ff.sh scp-patch.exp
bb.sh dd.sh exam.sh passall.sh test.sh
执行脚本有两种形式:
1.先修改脚本权限,再给执行脚本
chmod +x test.sh
./test.sh
2.直接执行 bash , sh, source
bash test.sh
sh test.sh
source test.sh
2 实例 本机=>跳板机(hadoop)=>集群(spark)
因远程登录发送文件需要密码验证,所以选择了expect进行交互式验证。
安装expect:
ubuntu sudo apt-get install expect
contos yum install expect
本机执行的脚本:local.sh
此脚本首先通过echo “Begin …” 打印一句开始Begin …;
就是expect交互验证了;
最后打印一句 END.
#!/bin/bash
echo "Begin .."
# scp file ==> hadoop
set timeout 1000
expect<<-END
spawn scp -r /baselines [email protected]:/home/hadoop
expect "*password*"
send "hadooppassword\r"
expect EOF
exit
END
# scp hadoop.sh ==> hadoop
set timeout 1000
expect<<-END
spawn scp hadoop.sh [email protected]:/home/hadoop
expect "*password*"
send "hadooppassword\r"
expect EOF
exit
END
# scp spark.sh ==> hadoop
set timeout 1000
expect<<-END
spawn scp spark.sh [email protected]:/home/hadoop
expect "*password*"
send "hadooppassword\r"
expect EOF
exit
END
# bash hadoop.sh on hadoop
set timeout 1000
expect<<-END
spawn ssh [email protected]
expect "*password*"
send "hadooppassword\r"
expect "*@*"
send "bash hadoop.sh\r"
expect "*@*"
send "logout\r"
expect EOF
exit
END
echo "End .."
解释:
下边是一整个expect交互:
set timeout 1000 #设置交互等待的时间
expect<<-END # expect开始表示
spawn scp -r /baselines [email protected]:/home/hadoop #交互语句
expect "*password*" # 检测交互语句中含有的字符password,若有就执行send 语句
send "hadooppassword\r"
expect EOF
exit # 退出
END #
其中检测可以有多个,但是只有一个spawn。send后变双引号中的 " \r
" 是执行标示,不是发送字符。
跳板机执行脚本:hadoop.sh
此hadoop.sh脚本只执行三个节点sparkb3,sparkb4,sparkb5。注意断句之间都是空一个空格(英文下的空格),不要有多的空格,for循环中的语句前边的空格要一致(例如两个控制或者一个tab,要统一),如果执行有问题,可以先看是否空格问题。
#!/bin/bash
for i in {3..5}
do
echo "Begin .."
echo "root@sparkb$i"
set timeout 1000
expect<<-END
spawn scp -r bc1 root@sparkb$i:/root/ml4dmc
expect "*password*"
send "passwordspark\r"
expect EOF
exit
END
set timeout 1000
expect<<-END
spawn scp spark.sh root@sparkb$i:/root/ml4dmc
expect "*password*"
send "passwordspark\r"
expect EOF
exit
END
set timeout 1000
expect<<-END
spawn ssh root@sparkb$i
expect "*password*"
send "passwordspark\r"
expect "*@*"
send "bash /root/ml4dmc/test2.sh\r"
expect "*@*"
send "logout\r"
expect EOF
exit
END
done
集群脚本 spark.sh
此脚本只是启动集群上名为ml4dmc的docker容器。
#!/bin/bash
docker start ml4dmc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。