简体   繁体   English

bash脚本中有多个参数

[英]Multiple arguments into bash script

I'm new to bash and I've started working on a simple bash script to turn on or off GPIO pins on raspberryPi. 我是bash的新手,我已经开始研究一个简单的bash脚本,以打开或关闭raspberryPi上的GPIO引脚。 I'd like to provide arguments to the script like this: script.sh GPIO_number start/on/off/clean. 我想为脚本提供如下参数:script.sh GPIO_number开始/开启/关闭/清除。 How do I continue this script the most efficient way? 如何以最有效的方式继续执行此脚本? I'm stuck at the second argument. 我陷入第二个争论。

#!/bin/bash

if [ -z $1 ]; then
        echo "Usage: gpioaction.sh GPIO start/on/off/clean"
        exit 1
fi

if [ -z $2 ]; then
        echo "Usage: gpioaction.sh GPIO start/on/off/clean"
        exit 1
fi

PIN=$1

start=$(echo "$PIN" > /sys/class/gpio/export;echo "out" > /sys/class/gpio/gpio$PIN/direction;echo "1" > /sys/class/gpio/gpio$PIN/value)
on=$(echo "1" > /sys/class/gpio/gpio$PIN/value)
off=&(echo "0" > /sys/class/gpio/gpio$PIN/value)
clean=&(echo "$PIN" > /sys/class/gpio/unexport)

You appear to be 'close' - what you have assigns values to variables (a = output from some command) and will quickly run through all commands; 您似乎很“接近”-您已为变量分配值(a =某些命令的输出),并将快速运行所有命令。 perhaps something like this is closer to what you are looking for: 也许像这样的东西更接近您要寻找的东西:

function gpio_start {
echo "$PIN" > /sys/class/gpio/export
echo "out"  > /sys/class/gpio/gpio$PIN/direction
echo "1"    > /sys/class/gpio/gpio$PIN/value
}
###
case "$2" ### here you could use functions or simple commands lines
in
        start) replace_with_fucntion_or_start_steps ;;
           on) replace_with_fucntion_or_on_steps ;;
          off) replace_with_fucntion_or_off_steps ;;
        clean) replace_with_fucntion_or_clean_steps ;;
            *) echo "Usage: gpioaction.sh GPIO start/on/off/clean" ; exit ;;
esac
###  
Another, closer to what you have example:  

case "$2"
in
        start) gpio_start ;; ## use function for multiple commands
           on) echo "1" > /sys/class/gpio/gpio$PIN/value ;;
          off) echo "0" > /sys/class/gpio/gpio$PIN/value ;;
        clean) echo "$PIN" > /sys/class/gpio/unexport ;;
            *) echo "Usage: gpioaction.sh GPIO start/on/off/clean" ; exit ;;
esac

If you use the case statement then you don't really need your 'second check' using the 'if' statement. 如果使用case语句,则实际上不需要使用'if'语句进行'第二次检查'。

:) :)
Dale 戴尔

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM