文章目录

  • 隔壁的白富美也在学Shell的本质
    • Shell连接用户和内核
    • Shell连接其他程序
    • 支持编程的Shell
    • 两种类型语言的比较:
    • 常见的几种Shell

隔壁的白富美也在学Shell的本质

​ 用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell。Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。

Shell连接用户和内核

​ Shell 能接收用户输入的命令,并对命令进行处理,处理完命令后再将结果反馈给用户,比如输出到显示器、写入到文件等。你看,我一直都在使用 Shell,哪有使用内核哦?我也没有看到 Shell 将我和内核连接起来呀?

   其实,Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。接口其实就是一个一个的函数,使用内核就是调用这些函数。这就是使用内核的全部内容了吗?对!除了函数,你没有别的途径使用内核。

Shell连接其他程序

​ 在 Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫做内置命令;有一部分是其它的应用程序(一个程序就是一个命令),这叫做外部命令。

​ Shell 本身支持的命令不多,功能也有限,但是 Shell 可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。

​ 更加厉害的就是,Shell 还可以让多个外部程序发生连接,在它们之间很方便地传递数据,也就是把一个程序的输出结果传递给另一个程序作为输入。

​ 由此可见Shell的功能强大之处并不是本身,而是它擅长使用和组织其他的程序。Shell 就是一个领导者,这正是 Shell 的魅力所在。

​ 可以将 Shell 在整个 Linux 系统中的地位描述成下图所示:

注意:由于用户启动 Linux 后直接面对的是 Shell,通过 Shell 才能运行其它的应用程序,所以用户”和“其它应用程序”是通过虚线连接的

支持编程的Shell

​ Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程,这和使用 C++、C#、Java、Python 等常见的编程语言差不多。
​ Shell 虽然没有 C#、Java、Python 等强大,但也支持基本的编程元素,例如:
if…else 选择结构,case…in 开关语句,for、while、until 循环;
变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。
​ 从这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。
​ Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。

使用脚本语言的Shell
在计算机中,任何代码最终都要转换为二进制的形式才能在计算机中执行。
有的编程语言,比如C/C++、GO语言等必须要将所有的代码翻译成二进制形式(也就是生成可执行文件)然后才能执行,因而执行速度更快、效率更高对硬件的要求低。
这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。

   而有的编程语言,如Shell、python、PHP等,需要一边执行一边翻译不会生成任何可执行文件。用户必须拿到源码才能执行,程序运行后会及时翻译,翻译一部分执行一部分,不用等到所有的代码全部翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。

两种类型语言的比较:

语言类型 特点  适用范围
编译性语言   执行速度快、对硬件要求低、保密性好   开发操作系统、大型应用程序等
解释性语言   使用灵活、部署简单、跨平台性好 适合WEB开发以及制作小工具

常见的几种Shell

常见的 Shell 有 sh、bash、csh、tcsh、ash 等。

sh
sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。
sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh,sh 是第一个流行的 Shell。
csh
sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。
Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。
BSD 是 UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就连 Mac OS X 在很大程度上也基于BSD。
tcsh
tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
ash
一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与接下来讲到的 bash shell 完全兼容。
bash
bash shell 是 Linux 的默认 shell!
bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。尽管如此,bash 和 sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。
第一个Shell脚本
几乎所有编程语言的教程都是从使用著名的“Hello World”开始的,作为中国人要弘扬传统,我的第一个 Shell 脚本也从输出“Hello World”开始。

①打开Linux终端,通过文本编辑器创建一个名字为test.sh的文件。

②给文件输入以下内容:

#!/bin/bash
echo "Hello World !"  #这是一条语句

​ 第 1 行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的/bin/bash就是指明了解释器的具体位置。
​ 第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。
​ 第 2 行的**#及其后面的内容是注释**。Shell 脚本中所有以#开头的都是注释(当然以**#!开头的除外**)。写脚本的时候,多写注释是非常有必要的,以方便其他人能看懂你的脚本,也方便后期自己维护时看懂自己的脚本。

​ 第 1 行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的/bin/bash就是指明了解释器的具体位置。
​ 第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。
​ 第 2 行的**#及其后面的内容是注释**。Shell 脚本中所有以#开头的都是注释(当然以**#!开头的除外**)。写脚本的时候,多写注释是非常有必要的,以方便其他人能看懂你的脚本,也方便后期自己维护时看懂自己的脚本。

③退出保存文件内容

④通过ls -l test.sh查看文件权限
我们会发现文件权限是可读可写,却不可执行,这是因为它只是一个文本文件。当然不能执行喽!

   那么接下来我们就要通过chmod 命令来给文件赋予执行的权限

⑤通过命令chmod test.sh给文件赋予可执行权限
执行命令后再次查看文件的权限时发现文件已经可以执行了。

⑥通过命令./test.sh执行脚本
会发现控制台已经打印出来了Hello World !

为什么什么要加这个./呢?是不是有点多余呢?
当我们把./去掉时会发现控制台会打印“command not found”,这又是为什么呢?这是因为在Shell的标准搜索路径( P A T H ) 中 找 不 到 t e s t . s h 因 此 加 上 . / 是 很 有 必 要 的 。 呢 ? 当 我 们 把 . / 去 掉 时 会 发 现 控 制 台 会 打 印 “ c o m m a n d n o t f o u n d ” , 这 又 是 为 什 么 呢 ? 这 是 因 为 在 S h e l l 的 标 准 搜 索 路 径 ( PATH)中找不到test.sh因此加上./是很有必要的。 呢? 当我们把./去掉时会发现控制台会打印“command not found”,这又是为什么呢?这是因为在Shell的标准搜索路径( PATH)中找不到test.sh因此加上./是很有必要的。呢?当我们把./去掉时会发现控制台会打印“commandnotfound”,这又是为什么呢?这是因为在Shell的标准搜索路径(PATH)中找不到test.sh因此加上./是很有必要的。

隔壁的白富美也在学Shell的本质相关推荐

  1. 一起学shell之(九-2)拼写检查、进程

    #----------------------------------------------------------# # ====> 红色字体 -特指煮酒个人所见.加粗则为需要重点注意. # ...

  2. shell脚本删除冒号空格_从Bash漏洞学Shell脚本(冒号)

    前天,爆发了Bash安全漏洞,非常恐怖.在网络上开始飞速传播,附带了非常友好的检测工具. $ env x='() { :;}; echo vulnerable' bash -c "echo ...

  3. 我们一起来学Shell - 初识shell

    文章目录 Shell 的分类 `bash` `csh` `ksh` `tcsh` `sh` `nologin` `zsh` Shell 能做什么 bash 环境变量文件 `/etc/profile` ...

  4. 【跟晓月学shell脚本】掌握shell脚本变量实战案例

    前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...

  5. 【跟晓月学shell脚本】掌握shell脚本变量原理及概念

    前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...

  6. (1)Shell 编程学习 Shell是什么?Shell的浅显原理 为什么要学Shell 及其第一个Shell脚本 CTF角度学习Shell

    最近刷CTF题目的时候经常要用到Shell语言,但是自己并没有系统的学习,所以最近花了点时间学习一下,所以重新来梳理一下.对于稍微有一点编程语言基础的同学,能上手Shell其实不需要半小时(甚至更短) ...

  7. linux 反弹shell(二)反弹shell的本质

    0X00 前言 在上一篇文章 Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹shell中最核心也是相对较难理解的部分,那么接下来我们就可以正式借反弹shell的实例分析回顾前一 ...

  8. 学shell和python哪个难_shell与python的优劣对比到底用哪个

    Python相对于shell的优点: (1)Python不需要记忆太多的命令,语法简单,有C基础的人学起来非常容易上手,易于使用.而shell要学的命令太多了,但常用的命令不是太多. (2)Pytho ...

  9. 运维学shell还是python_运维DBA要不要学python

    运维DBA要不要学python 我个人认为是:要 现在 python 在运维 数据库 的工作中主要用在 1.编写一些运维脚本 2.编写运维管理平台 3.研究互联网大厂的运维脚本/工具并应有 特别是运维 ...

最新文章

  1. html中绝对定位的父级,父元素相对定位,子元素绝对定位
  2. pip安装ipython_Python -- 关于pip安装Ipython
  3. 循环: 打印1~10
  4. 超链接href属性_如何使用标签上的HREF属性制作HTML超链接
  5. LinuxAndroid笔记-centos7安装adb并链接到雷电模拟器
  6. 微信公众平台开发教程第21篇-“可信网址”白名单
  7. 学习OpenGL-ES: 2 - EGL解析
  8. 为什么c语言没落了,编程语言Go飞速大涨,Delphi走向没落
  9. 照片放大模糊怎么变清晰,图片无损放大
  10. c语言输出字符太阳,〖作业〗 C语言程序设计
  11. OpenStack环境下安装Mistral
  12. Web_制作页面开场动画并解决自动播放问题
  13. 有的放矢,Liferay进军数字体验市场
  14. const和extern用法
  15. 大数据仓库技术实训任务2
  16. allegro PCB 检查报告中的Report DangLine以及禁用Antenna vias
  17. flash ftp 注册码
  18. 北京非一卡通公司异型卡遭禁
  19. NEON intrinsic 简易入门指南
  20. 无人驾驶出租车实行免费制是天上掉馅饼?No, 天下一定没有免费的午餐

热门文章

  1. 828. 统计子串中的唯一字符
  2. UI设计师月薪大概是多少 一般能工作到多少岁
  3. BoCloud博云获京东云、京东金融联合战略投资 云计算PaaS市场现重磅操作
  4. ElementUI解决循环出多个Popover点击其中一个则其他关闭
  5. 录屏软件--ZD Soft Screen Recorder_8.0
  6. 邮件服务器压力测试工具postal
  7. 一个碌碌无为的毕业生的感慨
  8. 网站 页面公共部分的处理
  9. 收集并简单清洗网页数据
  10. 【100%通过率】华为OD机试真题 C 实现【完美走位】【2022.11 Q4新题】