bash脚本中的多个参数

bash脚本中的多个参数,bash,gpio,Bash,Gpio,我是bash的新手,我已经开始编写一个简单的bash脚本来打开或关闭raspberryPi上的GPIO引脚。我想为脚本提供如下参数:script.sh GPIO_number start/on/off/clean。如何以最有效的方式继续此脚本?我被第二个论点难住了 #!/bin/bash if [ -z $1 ]; then echo "Usage: gpioaction.sh GPIO start/on/off/clean" exit 1 fi if [ -

我是bash的新手,我已经开始编写一个简单的bash脚本来打开或关闭raspberryPi上的GPIO引脚。我想为脚本提供如下参数:script.sh GPIO_number start/on/off/clean。如何以最有效的方式继续此脚本?我被第二个论点难住了

#!/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)

您似乎是“关闭的”-您所拥有的将值分配给变量(a=某个命令的输出),并将快速运行所有命令;也许类似这样的东西更接近您所寻找的:

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
如果您使用case语句,那么您实际上不需要使用If语句进行“第二次检查”

:)

Dale

您看起来很“接近”-您所拥有的将值分配给变量(a=某个命令的输出),并将快速运行所有命令;也许类似这样的东西更接近您所寻找的:

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
如果您使用case语句,那么您实际上不需要使用If语句进行“第二次检查”

:)


Dale

定义“我被第二个参数卡住了”。您似乎知道如何使用位置参数
$1
$2
。那么问题出在哪里呢?@4ae1e1可以定义为启动、打开、关闭或清理$2。你能给我写一个例子吗:script.sh 19 start和script.sh 19 clean仍然不确定你的意思,但看起来你需要
case
:。你需要引用
$1
$2
(例如,
如果[-z“$1”];然后,
@4ae1r1让我试着解释更多。我只能同时使用两个参数,这两个参数都是必需的。第一个参数是pin码($1),第二个参数有多个选项($2)。使用第二个参数,您可以启动、打开、关闭或清除所选GPIO PIN。我想我需要您已经提到的案例语句,但如果您能为我的案例编写一个示例,并定义“我被第二个参数卡住了”,这将非常有帮助您似乎知道如何使用位置参数
$1
$2
。那么问题出在哪里?@4ae1e1那么,$2可以定义为开始、打开、关闭或清除。您能给我写一个例子吗:script.sh 19 start和script.sh 19 clean仍然不确定您的意思,但看起来您需要
case
:。您需要引用
$1
$2
(例如,
如果[-z“$1”];那么
@4ae1r1让我试着解释更多。我只能同时使用两个参数,两者都是必需的。第一个参数是pin码($1),第二个参数有多个选项($2)。使用第二个参数,您可以启动、打开、关闭或清除所选的GPIO PIN。我想我需要前面提到的case语句,但如果您能为我的case编写一个示例,这将非常有帮助。
function
关键字使您的代码与POSIX sh不兼容,而不会增加任何兼容语法的好处。将函数定义为
gpio_start(){…}
function gpio_start{…}更好
。你的评论对原始海报有帮助吗?我认为提出问题的人最好能得到“更好的答案”,而不是与代码使用环境相关或不相关的次要评论。虽然你的评论可能有价值,但我不认为它对NOOB问题有帮助(即,“我是bash新手…”!=我想深入讨论一下shell脚本的所有怪癖……如果这个建议有助于防止OP学习一套会导致意外行为的习惯(其他shell在脚本中出现解析错误),那么当然,这是有帮助的。也就是说,这篇评论的目标受众是你,希望你能编辑你的答案,向那些(事实上)是你的人,比如原始海报,展示更好的做法在学习过程中,时间足够早,不太适合自己做出这些区分。谢谢,但我不需要这样的“帮助”-再次强调,保持对问题的关注-其他评论对原始问题没有多大帮助-这不是关于POSIX的;到目前为止,我能看到的唯一有“帮助意图”的回答是我的;再说一次,如果你有一个“更好的答案”,那么请发帖子!另外,我非常感谢你不匿名——这让人耳目一新!:)如果没有更好的问题,我无法提供任何我相信会更好的答案——OP的意图太不明确,无法知道他们真正想要什么(这也是为什么我不知道这个答案是否有用,因此没有任何投票,无论是赞成还是反对)。原则上,我不同意你拒绝建议的改进的决定(考虑到没有任何具体的论据,这似乎是绝对的:优点还是不足),但这当然是您的选择。
function
关键字使您的代码与POSIX sh不兼容,但没有添加任何与兼容语法相关的好处。将函数定义为
gpio_start(){…}
function gpio_start{…}更好
。你的评论对原始海报有帮助吗?我认为提出问题的人最好能得到“更好的答案”,而不是与代码使用环境相关或不相关的次要评论。虽然你的评论可能有价值,但我不认为它对NOOB问题有帮助(即,“我是bash新手…”!=我想深入讨论一下shell脚本的所有怪癖……如果这个建议有助于防止OP学习一套会导致意外行为的习惯(其他shell在脚本中出现解析错误),那么当然,这是很有帮助的。也就是说,这篇评论的目标受众是你,希望你能编辑你的答案,向那些(确实)在学习过程中很早就不适合自己做出这些区别的人(比如原始海报)展示更好的做法