2012-09-06 135 views
-1

如何在bash shell中执行for do循环以执行某些应用程序?在bash shell上循环“for..do”

我有这个代码下面,我想运行usb伺服应用程序,给定usb-servo从190到225的值,我试图运行代码,但for do没有给出任何输出,我的伺服没有移动。

#! /bin/sh 
i=190 

sleep 0.4 
for ((i=190;i<=225;i++)) 
do 
echo my_pass | sudo -S /usr/bin/usb-servo set 0 $i 
done 

#echo my_pass | sudo -S /usr/bin/usb-servo set 0 195 
#echo my_pass | sudo -S /usr/bin/usb-servo set 0 200 
#echo my_pass | sudo -S /usr/bin/usb-servo set 0 205 
#echo my_pass | sudo -S /usr/bin/usb-servo set 0 210 
#echo my_pass | sudo -S /usr/bin/usb-servo set 0 215 
#echo my_pass | sudo -S /usr/bin/usb-servo set 0 220 
#echo my_pass | sudo -S /usr/bin/usb-servo set 0 225 
+0

请仅发布相关密码。你的预期结果是什么? –

+0

你为什么回应sudo密码?改为放在'/ etc/sudoers'中。这就是它的目的。 –

回答

0

你的循环看起来不错,但你也可以尝试使用范围,看看是否打印你想要什么:

for i in {190..225}; do 
    echo my_pass | sudo -S /usr/bin/usb-servo set 0 $i 
done 

如果非此非彼的循环打印预期的输出,问题不与循环。可能是您的usb-servo命令中的一个问题。

+0

我期望输出是舵机与i值的移动,我已经在范围内尝试过了,但它给了我舵机的移动为0. – Faqih

+0

当你在外部运行命令时,确切的输出是什么?使用硬编码值而不是$ i循环? – chown

+0

当我在循环外运行时,输出是伺服转子位置的状态,如果我将i更改为值190,那么这就是伺服转子位置的确切值。 – Faqih