继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何快速学好Shell脚本?

陈树义
关注TA
已关注
手记 39
粉丝 1.1万
获赞 2270

Shell 语言作为类 Unix 系统的原生脚本,有着非常实用的价值。但对于很多刚刚接触 Shell 脚本的同学来说,搞懂 Shell 语言的语法却是一件非常困难的事情。甚至有人吐槽,或许没有谁能清楚地说明白 Shell 的语法。

例如下面这两个 Shell 脚本:

#!/bin/bash
a=10
if [ $a = 10 ]
then 
    echo "a is 10"
else
    echo "a is not 10"
fi
#!/bin/bash
a=10
if [$a = 10 ]  # $a 前没有加空格,非法
then 
    echo "a is 10"
else
    echo "a is not 10"
fi

这两个脚本的区别只是 if 中的判断表达式,一个有空格,一个没有空格而已。但在 Shell 语法中,第二个没有在$a前加空格的脚本是非法的。再举一个例子:

a=10
a = 10

在我们看来这两个表达式没有什么区别嘛,都是给 a 变量赋值 10。但实际上在 Shell 语法中,第一个表达式a=10表示赋值,第二个表达式a = 10表示判断(判断 a 是否等于 10)。

又例如 Shell 中我们要进行数学运算,其实有很多种方式可以实现,例如:

#!/bin/bash
a=`expr 10 + 5`
echo $a

当然了,你还可以这么写:

#!/bin/bash
let a=10+5
echo $a

这两种方式都可以实现简单的数学运算。但相比这两种,我更推荐用下面这种形式:

(( a = 10 + 5 ))
echo $a

即将需要运算的内容放在两对中括号里面。因为这种方式更加简洁,并且功能也是最为完整,也是最为接近高级语言的写法。

正是因为 Shell 中的语法问题以及实现的多样性,许多初学者(包括我)都会对 Shell 语法感到迷惑。因此我有了写一个 Shell 快速入门系列的想法。

写作思路

为了能快速上手 Shell 语法,在很多时候我会对一些不是很重要的内容进行舍弃。这些内容则会作为补充内容在后续的文章中说明。例如在 Shell 中有许多种循环结构:for 循环、while 循环、util 循环,但实际上 while 循环和 until 循环基本上是一样的。在这种情况下我舍弃对于 until 循环这个语法的介绍。

例如在 Shell 中进行数学运算有很多种方式,可以使用-eq操作符,可以使用==操作符,可以使用=操作符、可以使用(())操作符等等。这个时候我也会进行取舍,取一种最简单、最通用的语法来实现。舍弃一些复杂的语法并不会影响我们使用 Shell 语言,反而会让我们更快入手。

这是本系列跟其他 Shell 入门教程的最大不同,即以快速入手为目的,并不追求大而全。对于入门系列的文章,目前写了大概十四篇。每篇文章阅读不会超过 10 分钟,每个知识点都有相应的代码可以运行,确保小白都能看得懂。

我觉得这种系列学习的文章并不适合放在公众号里发表,所以公众号的朋友可以通过我的个人博客:http://shuyi.me 来查看。

知识体系

那如果我想要用到更高级的语法怎么办?我的思路是直接搜索资料或者到下面的文章中看看。下面的文章是快速入门的延续,但是是较为高级的用法,我会根据我自身情况不断地增加内容,构建起 Shell 整套体系。希望在不久的将来,这一系列入门教程能够覆盖大多数的应用情况。

如果你有想补充的知识点,欢迎关注我的微信公众号,回复入群与我交流。

如果你想了解高级的用法,可以看下面的这些文章:

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP

热门评论

你这第十三章把case..in写成循环语句,不是误导新手吗???
这么基础的内容都写错,这么长时间没发现吗?


查看全部评论