前几天我写了一个脚本。对于你们中的一些人来说,这句话听起来没什么大不了的。但对于另一些人,我知道你们就在那里,这句话意义重大。你看,我不是程序员。我是一名作家。
我需要解决的问题
我的问题相当简单:我必须将工程文件整理到我们的文档中。这些文件以 .zip 格式从 Web URL 获取。我当时手动将它们复制到我的桌面,然后将它们移动到不同的目录结构以匹配我的文档需求。一位作家同事给了我这个建议:“你为什么不直接编写一个脚本来为你做这件事呢?”
我当时想“就写一个脚本?!?”——就好像这是世界上最容易做的事情一样。
Google 如何提供帮助
我同事的问题让我开始思考,当我在思考时,我使用了 Google 搜索。
Linux 上有哪些脚本语言?
这是我的第一个 Google 搜索条件,你们中的许多人可能在想,“她真够菜的。” 嗯,我当时确实很菜,但这确实让我走上了解决问题的道路。最常见的结果是 Bash。嗯,我见过 Bash。 实际上,我必须记录的文件之一就有 Bash,就是那行无处不在的代码 #!/bin/bash。 我再次查看了该文件,我知道它在做什么,因为我必须记录它。
所以这引导我进行了下一次 Google 搜索请求。
如何从 URL 下载 zip 文件?
那真的是我的基本任务。 我有一个 URL,其中包含一个 .zip 文件,其中包含我需要包含在文档中的所有文件,所以我请求万能的 Google 帮助我。 那次搜索的精华,以及更多,让我找到了 Curl。 但这里是最好的部分:我不但找到了 Curl,而且其中一个热门搜索结果向我展示了一个 Bash 脚本,该脚本使用 Curl 下载 .zip 文件并将其解压缩。 这比我要求的还要多,但那时我意识到,在我的 Google 搜索请求中具体说明可以为我提供编写此脚本所需的信息。 所以,乘着势头,我编写了最简单的脚本
#!/bin/sh
curl http://rather.long.url | tar -xz -C my_directory --strip-components=1
看到它运行的那一刻真是太棒了! 但是后来我意识到一个问题:URL 可能会更改,具体取决于我要访问的文件集。 我还有另一个问题要解决,这导致了我的下一次搜索。
如何将参数传递到 Bash 脚本中?
我需要能够使用不同的 URL 和不同的目标目录来运行此脚本。 Google 向我展示了如何放入 $1、$2 等来替换我在命令行中键入的内容。
bash myscript.sh http://rather.long.url my_directory
这样好多了。 一切都按照我需要的运行,我有了灵活性,我有一个可用的脚本,最重要的是,我有一个简短的命令可以输入,从而节省了 30 分钟的复制粘贴苦力活。 这是一个度过美好的早晨。
然后我意识到我还有一个问题。 你看,我的记忆力很差,而且我知道我每隔几个月才会运行一次这个脚本。 这给我留下了两个问题
- 我怎么记得我的脚本要输入什么(URL 在前?目录在前?)?
- 如果我被卡车撞了,其他作者怎么知道如何运行我的脚本?
我需要一个用法消息——如果我使用不正确,脚本会显示一些内容。
usage: bash yaml-fetch.sh <'snapshot_url'> <directory>
否则,运行脚本。 我的下一次搜索是
如何在 Bash 脚本中编写 “if/then/else”?
幸运的是,我已经知道 if/then/else 存在于编程中。 我只需要找出如何做到这一点。 在此过程中,我还学会了使用 echo 从 Bash 脚本打印。 我最终得到的是这样的
#!/bin/sh
URL=$1
DIRECTORY=$2
if [ $# -eq 0 ];
then
echo "usage: bash yaml-fetch.sh <'snapshot_url'> <directory>".
else
# make the directory if it doesn't already exist
echo 'create directory'
mkdir $DIRECTORY
# fetch and untar the yaml files
echo 'fetch and untar the yaml files'
curl $URL | tar -xz -C $DIRECTORY --strip-components=1
fi
Google 和脚本编写如何震撼了我的世界
好吧,有点夸张了,但现在是 21 世纪,学习新事物(尤其是有点简单的事情)比过去容易得多。 我学到的东西(除了如何编写一个简短的、自文档化的 Bash 脚本)是,如果我有一个问题,很可能以前有人也有过相同或类似的问题。 当我被难住时,我可以问下一个问题,再问下一个问题。 最后,我不仅有一个脚本,而且我还掌握了一项新技能的开始,我可以掌握并用它来简化我一直避免的其他任务。
不要让第一个脚本(或编程步骤)难倒你。 这是一种技能,就像任何其他技能一样,并且那里有大量信息可以帮助你。 你不需要阅读一本厚厚的书或参加一个月的课程。 你可以用更简单的方式来做,从小步骤和小脚本开始,然后在此技能和你的信心基础上构建。 总是需要人们编写那些成千上万行代码的程序,其中包含所有的分支、合并和错误修复。
但是,也强烈需要简单的脚本和其他自动化/简化任务的方法。 而这正是一个小脚本和一点信心可以给你一个快速开始的地方。
14 条评论