sh脚本和bash脚本
前几天我写了一个剧本。 对于某些人来说,这句话听起来没什么大不了的。 对于其他人,我知道您在外面,那句话很重要。 你看,我不是程序员。 我是作家
我需要解决的问题
我的问题很简单:我不得不将文件从工程设计整理到我们的文档中。 这些文件可通过Web URL以.zip格式获得。 我将它们手动复制到桌面上,然后将它们移动到另一个目录结构中,以满足我的文档需求。 一个同伴给我的建议是: “为什么不只是写一个脚本来为你做呢?”
我以为“只写脚本?!?” -好像这是世界上最容易做的事情。
Google如何救援
同事的问题让我开始思考,而且我以为自己在Google上搜寻。
Linux上有哪些脚本语言?
这是我的第一个Google搜索条件,许多人可能会想:“她很笨。” 是的,虽然如此,但这确实使我走上了解决问题的道路。 最常见的结果是Bash。 嗯,我见过Bash。 哎呀,我要记录的文件之一里面有Bash,那是普遍存在的行#!/ bin / bash 。 我再次查看了该文件,我知道它在做什么,因为我必须对其进行记录。
因此,这导致了我下一个Google搜索请求。
如何从URL下载zip文件?
那真的是我的基本任务。 我有一个带有.zip文件的URL,其中包含我需要包含在文档中的所有文件,因此我请功能强大的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分钟的复制粘贴咕unt声。 那是一个度过了美好的早晨。
然后我意识到我还有另一个问题。 您看,我的记忆很短,而且我知道我只会每两个月运行一次此脚本。 那给我留下了两个问题:
- 我将如何记住要为脚本键入的内容(URL优先?目录优先?)?
- 如果我被卡车撞到了,另一个作家怎么会知道如何运行我的脚本?
我需要一条使用情况消息-如果我使用不正确,脚本会显示一些内容。 例如:
usage: bash yaml-fetch.sh < 'snapshot_url' > < directory >
否则,运行脚本。 我的下一个搜索是:
如何在Bash脚本中编写“ 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脚本之外)是,如果我有一个问题,很可能其他人之前也有相同或相似的问题。 当我感到困惑时,我可以问下一个问题,也可以问下一个问题。 最后,我不仅拥有脚本,而且还掌握了一项新技能,可以用来简化我一直在回避的其他任务。
不要让第一个脚本(或编程步骤)发挥最大作用。 这是一种技能,就像其他任何技能一样,并且这里有大量信息可以帮助您。 您无需阅读大量书籍或参加一个月的课程。 您可以通过婴儿步骤和婴儿脚本以一种更简单的方式来完成此操作,从而使您入门,然后在该技能和您的信心上建立基础。 人们总是需要编写带有所有分支,合并和错误修复的数千行代码程序。
但是,也非常需要简单的脚本和其他方式来自动化/简化任务。 这就是一些脚本和一点信心可以为您提供启动的机会。
翻译自: https://opensource.com/article/17/5/how-i-learned-bash-scripting
sh脚本和bash脚本