编写shell ssh脚本,用于在网络

时间:2016-02-18 00:33:06

标签: shell ssh arduino arduino-yun

我与几个arduino yuns一起工作,并希望编写一个脚本来上传多个草图。我们假设我有一个编译的arduino程序:sketch.hex。 现在我想通过LAN上传这个文件。对于单个设备,它的工作方式如下。

将草图复制到设备上。 (需要密码)

scp sketch.hex root@yun1.local:/tmp/sketch.hex

打开与设备的ssh会话。 (需要密码)

ssh root@yun1.local

然后使用以下2个命令将程序加载到Atmega上。

merge-sketch-with-bootloader.lua /tmp/sketch.hex
run-avrdude /tmp/sketch.hex

现在我的问题是,如何为多个arduinos(yun1,yun2,...,yunN)执行此操作而不进入每个单独的设备,以便运行底部的2个命令。

希望这个问题不会太混乱,并且提前多多感谢。

更新:我自己可以搞清楚。这是代码,以防有人需要它。

#!/bin/sh

#  globalUpload.sh
#  
#
#  Created by maggu on 21/02/16.
#
clear
FILENAME="valve_adjusting.hex"
SSHPASS="doghunter"
SSHCOMMAND="ssh -p 22 -T -o StrictHostKeyChecking=no -o BatchMode=no"
PREFIX="root@linino"
PREFIXO="linino"
SUFFIX=".local"
YUNS=8
for i in `seq 1 $YUNS`
do
SSHACCOUNT=$PREFIX$i$SUFFIX
ssh-keygen -R $PREFIXO$i$SUFFIX
sshpass -p "doghunter" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null sketch.hex $SSHACCOUNT:/tmp/sketch.hex
sshpass -p $SSHPASS $SSHCOMMAND $SSHACCOUNT << EOF_run_commands
merge-sketch-with-bootloader.lua /tmp/sketch.hex
run-avrdude /tmp/sketch.hex
EOF_run_commands
done

1 个答案:

答案 0 :(得分:0)

#!/bin/sh

#  globalUpload.sh
#  
#
#  Created by maggu on 21/02/16.
#
clear
FILENAME="valve_adjusting.hex"
SSHPASS="doghunter"
SSHCOMMAND="ssh -p 22 -T -o StrictHostKeyChecking=no -o BatchMode=no"
PREFIX="root@linino"
PREFIXO="linino"
SUFFIX=".local"
YUNS=8
for i in `seq 1 $YUNS`
do
SSHACCOUNT=$PREFIX$i$SUFFIX
ssh-keygen -R $PREFIXO$i$SUFFIX
sshpass -p "doghunter" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null sketch.hex $SSHACCOUNT:/tmp/sketch.hex
sshpass -p $SSHPASS $SSHCOMMAND $SSHACCOUNT << EOF_run_commands
merge-sketch-with-bootloader.lua /tmp/sketch.hex
run-avrdude /tmp/sketch.hex
EOF_run_commands
done