【问题标题】:Can I set variables based on command arguments in a Shell script? [duplicate]我可以根据 Shell 脚本中的命令参数设置变量吗? [复制]
【发布时间】:2021-08-20 18:14:09
【问题描述】:

我的目标是制作一个我可以运行的 shell 脚本,它会生成一个静态 HTML 页面,我想更改文件中的一些数据,比如一些文本或类名,我想得到那些来自命令行参数的变量,如下所示:

sh createfile.sh --title "Example" --author "Example"

您甚至可以使用 shell 脚本处理命令参数吗?

【问题讨论】:

  • 是的,你当然可以处理命令行参数。但是对于您的用例,使用title=Example author=Example sh createfile.sh 可能更容易。 (假设您没有使用 csh 系列的外壳)。这将使$title$author 在脚本中可用。
  • getopts 是另一个可以使用的选项

标签: shell sh


【解决方案1】:

有很多方法可以解析脚本中的命令行参数。最基本的只是通过$1$2 等引用它们。但是对于您的用例,不打扰可能更容易。只需执行以下操作:

$ cat createfile.sh 
#!/bin/sh

cat << EOF

${title?}

Written by ${author?}
EOF
$ author=doug title='my document' sh createfile.sh 

my document

Written by doug

当然有理由避免以这种方式使用环境,但如果您想将值作为参数传递,则没有理由强制使用-- 作为指标。做吧:

#!/bin/sh

for x; do
        if ! test "$x" = "${x#*=}"; then
                eval "$x"
        fi
done

cat << EOF

${title?}

Written by ${author?}
EOF
$ sh createfile.sh author=foo title=bar

bar

Written by foo

通过避开环境,您可以防止意外获取意外值。此外,如果您使用的是 csh 系列中的一种外壳,这将起作用。这当然不可靠,任何使用eval 的行为都是值得怀疑的,但这是两种相当有用的技术。

【讨论】:

  • 谢谢,这似乎解决了我的问题。
猜你喜欢
  • 2010-10-04
  • 2011-10-16
  • 1970-01-01
  • 2016-09-22
  • 2019-03-16
  • 2014-08-11
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多