带有cli选项的bash脚本返回未找到的命令

时间:2016-04-19 18:01:55

标签: bash

我有一个bash脚本来设置我的外部和内部笔记本电脑键盘的键盘类型(因为它们都可用并输出正确的字符)。

脚本的主要部分工作正常,但我在切换/案例时遇到了捕获命令行选项的问题。

这是完整的脚本

#!/bin/bash


###functions first

usage()
{
echo "script to set the internal and external keyboards to french and english repectively"

}


setKeyBoardMap()
{
    echo "setting dual keyboard."
    echo "setting keyboard types..."
    setxkbmap -device 13 fr
    setxkbmap -device 10 gb

    echo "done"
}


##the main show

#capture command line parameters


if ["$1" = ""]; then
    #no command line parameters
    setKeyBoardMap
    exit 0
else

while [ "$1" != " "]; do
    case $1 in
        -h | --help)    usage
                exit 1
                ;;
    -*|--*)
    echo "Unknown option $1"
    echo "please use -h or --help for usage details"
    exit 1
    ;;

    #add any switches in here
    #you may decide to modify this to set the keyboard
    #according to your prefered type.


    esac

done

fi

当我从我的主目录中调用此内容时,我得到以下内容

:~$ bash -x 2Keyb.sh -h
+ '[-h' = ']'
2Keyb.sh: line 31: [-h: command not found
+ '[' -h '!=' ' ]'
2Keyb.sh: line 37: [: missing `]'

我不确定我错过了什么,但我确定这是在我的声明中。

我知道有这个命令行参数的构造有点过分,但我打算在任何笔记本电脑上使用它来在任何2之间设置keybaord语言。

但首先我需要让它像它一样工作。

如果我没有传递任何参数,那么脚本就能完美运行......

提前致谢,感谢您的帮助。

大卫

1 个答案:

答案 0 :(得分:0)

while [ "$1" != " "]; do ^^ space missing here 同样如Codegnome所述,还有shellcheck,一个用于shell脚本的静态分析器。我个人将shellcheck二进制文件与vim和syntastic插件结合使用 - >找到这种错误非常有用。