小编提示:此篇文章阅读时间为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

先来一个简单的装一个,

04/Shell 开胃菜

来盘Shell开胃菜,感受一下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脚本来详细的说明上面的内容:

使用read

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

引号的使用技巧

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

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

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

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

环境变量

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

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

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

·$0:Shell脚本的名字;

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

·$@:当前所有入参

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

参数变量

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

输出如下:

06/条件判断

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

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

test或[命令

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

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

·字符串比较;

·算术比较;

·文件相关的条件测试。

07/控制结构

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

if语句

结构如下:

来个实例玩玩:

elif语句

结构如下

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

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

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

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

for语句

结构如下:

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

while语句

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

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

until语句

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

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

case语句

结构如下:

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

代码示例:

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

&&和||操作符

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

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

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

函数

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

代码示例:获取系统信息

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

输出如下:

最后:结语

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

linux 运行class文杰,Linux Shell基础知识,你想的到的都在这里相关推荐

  1. linux 运行class文杰,Linux基本命令(示例代码)

    Linux命令 su:切换账号 注:当有#符号时,表示此时为超级用户:当有$符号时,表示此时为普通用户 cd:进入指定目录 ll:竖排显示目录内容 ls:横排显示目录内容 ls -rtl:根据时间排序 ...

  2. linux 运行class文杰,Linux高手速成

    前言:其实成为高手没那么容易,不过掌握常用linux命令是你通往高手的必经之路,本文就让我们一起来学习最常用的linux命令吧. 正文: 首先打开命令窗口进入如下状态: 让后就可以开始我们的教程了. ...

  3. linux 运行class文杰,Linux详细教程

    如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了. 第三个栏位,表示该文件或目录的拥有者. 若使用者目前处于自己的Home,那这一栏大概都是它的账号名称. 第四 ...

  4. Linux学习总结(十七)-shell 基础知识

    该篇内容很杂,但还是不难理解,就不逐个贴图举例. 一 先介绍几种常用字符: 1 * 匹配任意个任意字符 2 ?匹配一个任意字符 3 # 注释符号,符号后的语句不被执行 4 \脱意字符,后面跟带含义字符 ...

  5. Linux之(5)账户和shell基础知识

    Linux之(5)账户和shell基础知识 Author:onceday date:2022年8月23日 漫漫长路,而今才刚刚开始- 本内容主要收集整理于: <Linux命令行与shell脚本编 ...

  6. Linux进程管理:进程和线程基础知识

    <Linux进程管理:进程和线程基础知识> <Linux-进程管理> <C语言进程的内存地址空间分配> <进程和线程模型> <(1)Linux进程 ...

  7. 【图文教程】Shell基础知识

    Shell基础知识 1. shell介绍 2. history命令 history主要参数示例: 3. 命令补全和别名 4. 通配符 5. 输入输出重定向 6. 管道符和作业控制 管道符: 作业控制: ...

  8. 3000字扫盲shell基础知识(新手必备)

    目录 shell基础语法之变量 shell 变量命名 shell 变量调用 shell 变量分类 shell 运算符 运算符种类 关系运算符 布尔运算符 字符串运算符 逻辑运算符 文件测试运算符 sh ...

  9. java有哪些网校,【有哪些必备的Java的基础知识?想学好这个语言就要了解这些】- 环球网校...

    [摘要]什么是Java企业开发的主流框架,不能一概而论,我希望大家一定要了解有哪些必备的Java的基础知识?想学好这个语言就要了解这些,今天小编就带大家看看有哪些必备的Java的基础知识?想学好这个语 ...

最新文章

  1. SELinux与强制访问控制系统应用
  2. 【转载】 java根据ip地址获取详细地域信息
  3. python 标准差_标准差python
  4. 74 计算机图形学开源处理库
  5. 《BI项目笔记》多维数据集中度量值设计时的聚合函数
  6. Linux crontab定时执行任务 命令格式与详细例子
  7. Mybatis Plus逻辑删除
  8. C# datagridview 删除行(转 学会、放弃博客)
  9. Canvas--文字渲染
  10. IPSEC 004 ---- 模板海纳百川,不定对端有容乃大
  11. 戴尔Any Cloud 助力企业快速实现云转型
  12. arm-linux-gcc 64位下载,arm-linux-gcc下载与安装
  13. 厚积而薄发-2015年终总结
  14. 异常恶毒的十二星座性格分析(转)
  15. 笨拙的手指(暴力枚举)
  16. 多库多表场景下使用 Amazon EMR CDC 实时入湖最佳实践
  17. 网易云音乐登录信息加密算法详解
  18. JavaScript中的alert
  19. 音频可视化图形引擎—Specinker
  20. 新接口——“淘特”关键词搜索的API接口

热门文章

  1. LeNet5论文解读
  2. JavaWeb用户信息管理系统-创建登录页面
  3. (二)SAS基本语法
  4. Java html解析器之Jsoup
  5. MATLAB优化函数fmincon解析
  6. 算法期中1007. 怪兽训练 (找出有向图中所有的强连通分量的Kosaraju算法)
  7. 单田芳白眉大侠全320回下载
  8. 惊!钉钉CEO离职创业跨境出海领域;中欧班列跑出新高度;浙江数字化步伐再加速…|洞悉跨境
  9. python colorbar范围_python – 设置matplotlib colorbar范围
  10. antvg2 环图轮播_在vue项目中引用Antv G2,以饼图为例讲解