如何获取 unix 脚本参数? [复制]
Posted
技术标签:
【中文标题】如何获取 unix 脚本参数? [复制]【英文标题】:how to get unix script arguments? [duplicate] 【发布时间】:2014-10-26 19:54:40 【问题描述】:我是 unix 脚本的新手。我正在尝试创建一个充当 unix 命令的脚本,例如“ls -l”、“ls -la”
myscript -x ----> 做一件事 myscript -xy ----> 做事情 1,做事情 2 myscript -yz ----> 做事情 2,做事情 3所以,“-x”、“-xy”是 $0 吗?或者我们需要使用不同的变量来获得它?
谢谢
【问题讨论】:
相关:How do I parse command line arguments in bash? 请参阅(除了许多,许多其他时间已在 *** 上询问和回答)BashFAQ #35:mywiki.wooledge.org/BashFAQ/035 【参考方案1】:在 Bash 中,参数从索引 1 开始,而 $0 保留给命令本身。这也适用于函数和命令。
这就是您实现与您所要求的类似的方式:
while [ "$1" != "" ] ; do
case "$1" in
-x)
do_thing_1
;;
-y)
do_thing_2
;;
-z)
do_thing_3
;;
*)
error $1
exit -1
;;
esac
shift
done
你需要声明函数do_thing_xxx和error。
我说“类似的东西”是因为这个脚本会理解“myscript -x -y -z”,但会检测到“myscripts -xyz”是错误的。
要实现像您这样更复杂的行为,您需要使用 GETOPT,如下所述:http://wiki.bash-hackers.org/howto/getopts_tutorial
希望对您有所帮助。
【讨论】:
正如man bash(1)
所说,在 linux 中“getopt 命令是 util-linux 软件包的一部分,可从 link 获得。也许您需要安装一个端口。
但我在终端中看到 getopts 命令。我使用您的代码,但似乎没有检测到“-x”、“-y”选项。它总是出现在最后一种情况下“*”。另一件事是我使用 [ -z "$1" ] 来查看 $1 是否为空
似乎在我的 Mac 上运行良好,无论是 bash 还是 sh。我检查使用“回声”作为案例。以上是关于如何获取 unix 脚本参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
自Javascript中的unix时代以来,如何以毫秒为单位获取时间? [复制]