我的目标是制作一个可以运行的 shell 脚本,该脚本将生成一个静态 HTML 页面,我想更改文件中的一些数据,例如一些文本或类名,我想获得这些来自命令行参数的变量,如下所示:
sh createfile.sh --title "Example" --author "Example"
你甚至能用 shell 脚本处理命令参数吗?
答案 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 种相当有用的技术。