首页 > 解决方案 > sh/bash 如何正确编写 if 循环以获取输入以及如何实现无限循环脚本

问题描述

基本上,我正在尝试

  1. 获得 gpios 的访问权限
  2. 将方向设置为输出

然后为用户界面实现一个无限循环

它应该得到用户输入lidonoff

那么如果lid小于 1它应该会中断

如果输入打开,它应该为 gpio 提供 1 个值

如果输入关闭,它应该为 gpio 提供 0 值

然后在循环结束后,它应该将方向设置为输入并取消导出 gpios

我的问题是,每当我尝试实现脚本时,它所做的第一件事就是设置导出 gpios 并将其值设置为 1,然后要求我输入lidonoff输入,lid输入不会改变任何内容,并且在输入 on off 输入后没有不管我的输入是什么,gpio 值设置为 0

我也尝试使用while true; do done无限循环,但我遇到了问题

#!/bin/sh

echo "30" > /sys/class/gpio/export
echo "31" > /sys/class/gpio/export

echo "high" > /sys/class/gpio/gpio30/direction
echo "high" > /sys/class/gpio/gpio31/direction

read -p "light_iid" int lid
read -p "on/off" str onoff; 
if ! [ $lid ‐lt 1 ]; 
then 
   break
fi 
if [ $onoff != "on" -a $onoff != "off" ]; 
then 
   break
fi
if ! [ $onoff_str == "on" ]
then 
   echo "1" > /sys/class/gpio/gpio30/value
   echo "1" > /sys/class/gpio/gpio31/value     
fi
if ! [ $onoff_str == "off" ]
then 
   echo "0" > /sys/class/gpio/gpio30/value
   echo "0" > /sys/class/gpio/gpio31/value
fi

echo "low" > /sys/class/gpio/gpio30/direction
echo "low" > /sys/class/gpio/gpio31/direction

echo "30" > /sys/class/gpio/unexport
echo "31" > /sys/class/gpio/unexport

标签: bashshellsh

解决方案


推荐阅读