如何快速学好Shell脚本?

 

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 整套体系。希望在不久的将来,这一系列入门教程能够覆盖大多数的应用情况。

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

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

如何快速学好Shell脚本? 转的更多相关文章

  1. 如何快速学好Shell脚本?

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

  2. 让你快速学会Shell脚本

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合.Shell可以直接使用在win/Unix/Linux上面, ...

  3. 【运维】Shell -- 快速上手Shell脚本

    1.Shell概述 shell脚本是利用shell的功能所写的一个[程序(program)].这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式.管道命令与数 ...

  4. 30分钟快速学习Shell脚本编程

    什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...

  5. 一文快速入门Shell脚本_了解Sheel脚本基本命令

    通过代码和注释的形式,列举了shell的基础操作,快速入门.shell在线编辑器 注释 单行用#号:多行::<<' 多行注释... '.:<<a 多行注释... a.:< ...

  6. 【Shell脚本编程系列】知识储备以及建立规范的脚本

    前言 学习shell脚本编程需要的知识储备: vi/vim编辑器命令 vimrc设置要熟练 基础命令,100多个要熟练 基础和常用的网络服务命令要会:nfs . rsync. inotify . la ...

  7. 【shell】shell脚本入门

    1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...

  8. 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法

    原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql ...

  9. 一篇文章让你快速入门 学懂Shell脚本

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

随机推荐

  1. py-day3-5 python 函数式编程

    # 函数式(方程式 y = 2*x+1) def calc(x): return 2*x+1 print('得出的结果:',calc(6)) 得出的结果: 13 # 面向过程 def calc(x): ...

  2. 服务跟踪sleuth和可视化跟踪工具Zipkin

    一.增加配置 在Order工程中添加配置 <dependency> <groupId>org.springframework.cloud</groupId> < ...

  3. AttributeError: 'module' object has no attribute 'main'

    本机环境:ubuntu16.04,  ros-kinetic $ roscore 报错 Traceback (most recent call last): File , in <module& ...

  4. repos配置

  5. javascript mqtt 发布订阅消息

    js client使用paho-mqtt,官网地址:http://www.eclipse.org/paho/,参考http://www.eclipse.org/paho/clients/js/官网给出 ...

  6. IIS小知识

    1.IIS的默认配置路径 IIS5.0默认配置文件路径C:\WINNT\system32\inetsrv\MetaBase.binIIS6.0默认配置文件路径C:\WINDOWS\system32\i ...

  7. Tcp三次挥手和四次挥手

    三次握手:  (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认  (2) 第二次握手:服务器B收到SYN包,必须确认客户A的S ...

  8. sqlserver数据库镜像运行模式

    运行模式: 从大层面来说,SQL Server镜像只有两种模式:高安全模式和高性能模式.两种模式的主要区别在于在事务提交后的操作.可以从图1-1中查看运行模式. 在高性能模式下,主体服务器不需要等待镜 ...

  9. 3.1链表----链表(Linked List)入门

    在分析链表之前,我们先来对之前的动态数组.栈.队列总结一下: (1)底层依托于静态数组 (2)依靠resize解决固定容量问题 (3)是一种假的的动态数据结构 1.什么是链表 可以从以下两个部分来理解 ...

  10. Python cx_Oracle 安装小记

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python cx_Oracle 安装小记 SQLAlchemy 是 Pytho ...