我可以根据 Shell 脚本中的命令参数设置变量吗?

时间:2021-06-02 14:57:06

标签: shell sh

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

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

你甚至能用 shell 脚本处理命令参数吗?

1 个答案:

答案 0 :(得分: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 系列中的一种 shell,这将起作用。这当然不可靠,任何 eval 的使用都值得怀疑,但这是 2 种相当有用的技术。