我有一个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语言。
但首先我需要让它像它一样工作。
如果我没有传递任何参数,那么脚本就能完美运行......
提前致谢,感谢您的帮助。
大卫
答案 0 :(得分:0)
while [ "$1" != " "]; do
^^ space missing here
同样如Codegnome所述,还有shellcheck,一个用于shell脚本的静态分析器。我个人将shellcheck二进制文件与vim和syntastic插件结合使用 - >找到这种错误非常有用。