【问题标题】:looping "for..do" on bash shell在 bash shell 上循环“for..do”
【发布时间】:2012-09-06 02:36:28
【问题描述】:

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

我在下面有这段代码,我想运行 usb-servo 应用程序,给定 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

【问题讨论】:

  • 请仅发布相关代码。您的预期结果是什么?
  • 你为什么要向 sudo 回显密码?把自己放在/etc/sudoers 中。这就是它的用途。

标签: linux bash shell loops


【解决方案1】:

您的循环看起来不错,但您也可以使用范围进行尝试,看看是否打印出您想要的内容:

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

如果这个和你的循环都没有打印出预期的输出,那么问题不在于循环。可能是您的 usb-servo 命令中的问题。

【讨论】:

  • 我希望输出是具有 i 值的伺服器的运动,我已经尝试过在范围内,但它使我的伺服器运动到 0。
  • 当您在循环外使用硬编码值而不是 $i 运行命令时,确切的输出是什么?
  • 当我在循环外运行时,输出的是伺服转子位置的状态,如果我将 i 更改为值 190,那么这就是伺服转子位置的确切值。
  • 所以,当您运行echo my_pass | sudo -S /usr/bin/usb-servo set 0 190 时,“190”确实会打印到屏幕上,是吗?
  • 是的,它确实会打印到屏幕上。
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2013-05-05
相关资源
最近更新 更多