Linux Shell基础知识,你想的到的都在这里

小编提示:此篇文章阅读时间为15分钟左右,可先收藏后阅读。

01/Linux 的江湖地位

Linux 作为一个全球用户超过14亿的操作系统,它的强大与神奇就不必多说了,混在IT界 Linux是可以装B的;要混运维界, Linux是必须装备的。

02/SHELL 可以做什么

作为目的为趋向的俗人一枚,学习Shell,不是为了兴趣就是为了工作。好吧,我说我当初学Shell纯属兴趣——那种《骇客帝国》中黑屏绿字的装B的兴趣 (如果装B也算兴趣的话)。更多人学习Shell是为了工作,为了解决工作中的实际问题,那么Shell脚本在工作中到底能干什么呢?先看看以下问题:

1.你是否经常为了处理一项简单且重复的工作而耗费大量时间?

2.你是否经常发现使用高级语言,如Python去处理一些事情发现小题大做?

3.你是否经常需要进行一些批量任务的处理?

4.......

如果上面的问题您有一条回答“Yes”。那您非常有必要学习一下Linux Shell脚本。Come on少年。

03/Hello Boy

先来一个简单的装一个,

Linux Shell基础知识,你想的到的都在这里

04/Shell 开胃菜

来盘Shell开胃菜,感受一下Shell 的味道吧

Linux Shell基础知识,你想的到的都在这里

上面是一段简单的Shell程序,实现在功能为:

1.在用户主目录下创建一个shell_Appetizer文件夹;

2.在用户主目录下创建10个规定命名格式的空文件。

第一个Shell程序,逐行解释相当有必要。

·第一行:指定脚本解释器,这里是用/bin/bash做解释器;

·第二行:切换到当前用户的home目录;

·第三行:创建一个名为shell_Appetizer的空目录;

·第四、五行:for循环,一共循环10次;

·第六行:创建10个名称为Appetizer_0.txt, Appetizer_1.txt格式的空文件。

cd、mkdir和touch都是系统自带的命令,一般在/bin目录下;而for、do和done都是Shell的关键字。 Shell中使用#开头的行就是注释(#!/bin/bash除外)。

一个简单的程序之后,我们就开始进入Shell的语法学习。

05/变量

基础知识

1.在Shell中,使用变量之前不需要事先声明,只是通过使用它们来创建它们;

2.在默认情况下,所有变量都被看做是字符串,并以字符串来存储;

3.Shell变量是区分大小写的;

4.在Shell中,通过在变量名前加一个 $符号来引用他,无论何时想要获取变量内容,都必须在它前面加一个$符号;

下面通过一段Shell脚本来详细的说明上面的内容:

Linux Shell基础知识,你想的到的都在这里

使用read

在Shell中,我们可以使用read命令将用户的输入赋值给一个变量。这个命令需要一个参数,即准备读入用户输入数据的变量名,然后它会等待用户输入数据。通常情况下,在用户按下回车键时,read命令结束。例如以下代码:

Linux Shell基础知识,你想的到的都在这里

引号的使用技巧

在上面的代码中也说了,如果字符串中包含了空格,就需要使用引号将字符串括起来,而这只是引号的一个简单的使用。 变量在引号中的行为取决于你所使用的引号类型。

1.如果把一个$变量表达式放在双引号中,程序执行到这一行时就会把变量替换为它的值;

2.如果把一个$变量表达式放在单引号中,就不会发生替换现象;

但是,我们可以通过在$字符前面加上转义字符\取消它的特殊含义,下面通过一段简单的代码来理解上面内容的意思:

Linux Shell基础知识,你想的到的都在这里

环境变量

当一个Shell脚本程序开始执行时,一些变量根据环境设置中的值进行初始化,一般比较常用的有以下几个:

·$HOME:当前用户的主目录,例如:/home/zhangwj;

·$PATH:以冒号分隔的用来搜索命令的目录列表;

·$0:Shell脚本的名字;

·$#:传递给脚本的参数个数;

·$@:当前所有入参

·$$:Shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文件。

参数变量

如果脚本程序在调用时带有参数,一些额外的变量就会被创建。即使没有传递任何参数,环境变量$#也依然存在,只不过它的值是0罢了。例如以下代码:

Linux Shell基础知识,你想的到的都在这里

输出如下:

Linux Shell基础知识,你想的到的都在这里

06/条件判断

程序设计语言的基础是对条件进行判断,并根据结果采取不同行动的能力。在使用条件判断前之前,先看看Shell脚本程序里可以使用的条件结构。

一个Shell脚本能够对任何可以从命令行上调用的命令的退出码进行判断,这其中也包括我们写的Shell脚本程序。这就是为什么要在所有自己编写的脚本程序的结尾包括一条返回值的exit命令的重要原因。

test或[命令

“[” 这个是个命令? 没错我没有写错,您也没有看错 '[' 等价于 ‘test’ Shell的真假判断命令。为了增强可读性,当使用[命令时,默认使用符号]来结尾。下面就通过一个简单的例子来看看“test”和“[”是如何使用的。

Linux Shell基础知识,你想的到的都在这里

我们通过使用-f来判断指定文件是否存在。test命令可以使用的条件类型可以归为3类:

·字符串比较;

·算术比较;

·文件相关的条件测试。

Linux Shell基础知识,你想的到的都在这里

Linux Shell基础知识,你想的到的都在这里

Linux Shell基础知识,你想的到的都在这里

07/控制结构

Shell有一组控制结构,下面就分别来认认认识它们吧。

if语句

结构如下:

Linux Shell基础知识,你想的到的都在这里

来个实例玩玩:

Linux Shell基础知识,你想的到的都在这里

elif语句

结构如下

Linux Shell基础知识,你想的到的都在这里

一个很容易出错的问题。例如以下代码:

Linux Shell基础知识,你想的到的都在这里

上面这段代码很简单,但缺少容错,如果你不输入yes或no,就会运行出错,得到以下提示信息:

Linux Shell基础知识,你想的到的都在这里

这是为何?代码中有if [ $Judge = "yes" ],当我不输入任何内容时,这个if语句就会变成这样if [ = "yes" ],很明显,这不是一个合法的条件。为了容错,我们给变量加上引号,改成这样if [ $Judge = "yes" ]。

技巧:如非数值比较,建议变量引用都加双引号

for语句

结构如下:

Linux Shell基础知识,你想的到的都在这里

来一个实用的代码示例:(判断输入的IP地址是否合法)

Linux Shell基础知识,你想的到的都在这里

while语句

结构如下:循环将反复执行直到条件为假

Linux Shell基础知识,你想的到的都在这里

代码示例:(倒计时 100秒)

Linux Shell基础知识,你想的到的都在这里

until语句

结构如下:循环将反复执行直到条件为真

Linux Shell基础知识,你想的到的都在这里

它与while循环很相似,只是把条件测试反过来了。

case语句

结构如下:

Linux Shell基础知识,你想的到的都在这里

case的代码结构相对来说是比较复杂的。case结构具备匹配多个模式,然后执行多条相关语句的能力,这使得它非常适合于处理用户的输入。

代码示例:

Linux Shell基础知识,你想的到的都在这里

当case语句被执行时,它会把变量market的内容与各字符串依次进行比较。一旦某个字符串与输入匹配成功,case命令就会执行紧随右括号)后面的代码,然后就结束。 在代码中,最后面的表示匹配任何字符串,我们在写代码时,总是在其它匹配之后再添加一个以确保如果没有字符串得到匹配,case语句也会执行某个默认动作.

&&和||操作符

Shell中也支持&&和||符号,如:

Linux Shell基础知识,你想的到的都在这里

从左开始顺序执行每条命令,如果一条命令返回的是true,它右边的下一条命令才能执行。如果此持续直到有一条命令返回false,或者列表中的所有命令都执行完毕;遵循“短路”规则。

Linux Shell基础知识,你想的到的都在这里

从左开始顺序执行每条命令,如果一条命令返回的是false,它右边的下一条命令才能够被执行。如此持续直到有一条命令返回true,或者列表中的所有命令都执行完毕。

函数

函数,这么NXX的东西,Shell怎么可能少呢。定义函数的结构如下:

Linux Shell基础知识,你想的到的都在这里

代码示例:获取系统信息

Linux Shell基础知识,你想的到的都在这里

脚本程序从自己的顶部开始执行,当它遇到了check_os_release() {结构时,它知道脚本正在定义一个名为check_os_release的函数。当执行到单独的check_os_release时,Shell就知道应 该去执行刚才定义的函数了。函数执行完毕以后,脚本接着check_os_release后的代码继续执行

输出如下:

Linux Shell基础知识,你想的到的都在这里

最后:结语

关于Linux Shell的基本语法就先侃到这里,后续会对Shell中的一些常用命令进行简单的说明。(文/张文杰)

转载于:https://my.oschina.net/u/3052891/blog/856374

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值