如何获取 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时代以来,如何以毫秒为单位获取时间? [复制]

PHP 如何在 unix 中获取服务器的时间戳? [复制]

Unix进程之间的连接,如何获取给定用户名的全名和根目录

如何以毫秒为单位获取带有 unix 时间戳的人类可读日期? [复制]

获取传递给 shell 脚本的最后一个参数

经典的 Shell 脚本问题