玩Linux不知道Shell,那就是不懂Linux。这句话足以见证shell在Linux运维中的地位。一直想好好写下shell,但总是不知道如何写起,不是因为Shell太难,而是因为她太庞大,也可能是因为自己shell能力上的不足,怕不能体系化地了解Shell,但是要开始的终究还是要开始,Come On!
什么是Shell
     Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。
    Shell是一个用户跟操作系统之间的一个命令解释器。Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell脚本编程去运行。
    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。
    Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。  
 
Shell与编译型语言的差异
编译型语言
    很多传统的程序设计语言,例如Fortran、Ada、Pascal、C、C++和Java,都是编译型语言。这类语言需要预先将我们写好的源代码(source code)转换成目标代码(object code),这个过程被称作“编译”。运行程序时,直接读取目标代码(object code)。由于编译后的目标代码(object code)非常接近计算机底层,因此执行效率很高,这是编译型语言的优点。但是,由于编译型语言多半运作于底层,所处理的是字节、整数、浮点数或是其他机器层级的对象,往往实现一个简单的功能需要大量复杂的代码。例如,在C++里,就很难进行“将一个目录里所有的文件复制到另一个目录中”之类的简单操作。
解释型语言
    解释型语言也被称作“脚本语言”。执行这类程序时,解释器(interpreter)需要读取我们编写的源代码(source code),并将其转换成目标代码(object code),再由计算机运行。因为每次执行程序都多了编译的过程,因此效率有所下降。

脚本编程语言的好处

使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象;缺点是它们的效率通常不如编译型语言。不过权衡之下,通常使用脚本编程还是值得的:花一个小时写成的简单脚本,同样的功能用C或C++来编写实现,可能需要两天,而且一般来说,脚本执行的速度已经够快了,快到足以让人忽略它性能上的问题。脚本编程语言的例子有awk、Perl、Python、Ruby与Shell。
Shell有两种执行命令的方式:
    交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。
    批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
Linux Shell种类:
    常见的有Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的Shell语言的语法有所不同,所以不能交换使用。
最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,也是大多数Linux系统默认的Shell。接下来我们来写一个简单的shell脚本。(shell脚本一般文件名以.sh结尾{非必须,但是很有必要},同时文件第一行定义该脚本为shell脚本)

[root@shell ~]# vim first.sh
[root@shell ~]# cat first.sh
#!/bin/bash
#DATE 2015.04.28
#Author jacken
#USE:  This is my first shell
echo "Hello World!"
[root@shell ~]# bash first.sh
Hello World!
[root@shell ~]# ./first.sh
-bash: ./first.sh: Permission denied
[root@shell ~]# chmod +x first.sh
[root@shell ~]# ./first.sh
Hello World!
[root@shell ~]#

注释:
想很很多人学Shell都是从“世界,你好!”开始的,Me too!
Shell是用来执行的,所以要有执行(x)的权限,或者直接 bash first.sh 告诉系统,这就是一个脚本(无需执行权限)
第一行的#!/bin/bash是指定这个脚本要用哪种语言来解释,除了第一行当"#"标识出哪种语言外,剩余的全部“#”后的都是注释、说明。
一个好的Shell会标明日期、作者、版本、用途,这是一个良好的习惯,否则当我们写数百行代码的时候,隔个几个月或几年,怎么知道当初写的是什么呢?

转载于:https://blog.51cto.com/linuxnote/1639640

Linux Shell之一 Shell简介相关推荐

  1. linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路

    122Linux系统和Shell命令行简介,走上数据分析之路 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://git ...

  2. 122.Linux系统和Shell命令行简介,走上数据分析之路

    122Linux系统和Shell命令行简介,走上数据分析之路 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://git ...

  3. Linux下的shell简介(三)

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是shell shell的本意是"壳"的意思,其实已经很形象地说明了shell在Linux系统中的 ...

  4. Linux基础:Shell脚本学习

    一.shell简介 Shell是用户和Unix/Linux内核沟通的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行 ...

  5. linux 定时执行搅拌,Linux上定时shell脚本

    本文主要介绍在Linux系统上部署定时器,定时执行shell脚本,通过脚本执行sql文件 sql文件 -- 创建表 create table if not exists iot_test.iot_ta ...

  6. linux中安shell怎么传入参数,【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】...

    方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...

  7. kettle脚本Linux执行,kettle在linux下面用于shell脚本执行:转换或者作业

    1 将windows下面创建好的转换,放到Linux某一个文件夹下面.如:把0816_em.ktr文件放到/home/cfj/kettle/testdemo下面. 注意里面的数据库用户名和密码可能需要 ...

  8. Linux系统管理 4 Shell的基本应用

    目录 一.Shell命令概述 1.Shell 简介 2.常用的Shell命令 1.目录的创建与删除命令 2.改变工作目录命令cd 3.显示路径的命令 4.显示目录内容命令ls 5.显示文件内容命令 6 ...

  9. linux 中输入bash,Linux上Bash Shell编程

    Linux下Bash Shell编程 Bash Shell Programming in Linux Linux下Bash Shell编程 Bash what? 进阶的内容是什么? Okay, I g ...

最新文章

  1. TensorFlow(6)神经网络训练(DNN)
  2. Xcode中Objc动态调用方法同时避免警告的几个办法
  3. 使用web3部署一个比较复杂的智能合约
  4. Screenshot of a full element in Selenium C#
  5. 信息核心技术体系是通往信息世纪的中国门票
  6. C语言试题六之使字符串的前导*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做。字符串中间和尾部的*号不删除。
  7. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析
  8. Linux系统CentOS 7配置Spring Boot运行环境
  9. 电脑ip4和ip6的怎么选择?
  10. X 分钟速成 Python
  11. java抽象类可以new_java的抽象类,接口,普通类是否可以直接NEW,并且复写方法?
  12. 阿斯克码表ACSII对照表
  13. php tcpdf 没有头部,TCPDF - 设置头部Logo不显示问题
  14. 金晨想在无人车上劈叉,撒贝宁与数字祝融号对话…这届百度世界大会,有被惊艳到...
  15. CGAL 计算几何库
  16. 告别户外弱网困扰,4G多卡聚合设备增强弱网环境下应急救援信号
  17. java导出excel与word文档
  18. (二)WaveDrom Editor使用教程
  19. UVa1646 - Edge Case
  20. 进阶训练赛(四)题解

热门文章

  1. 监督学习与无监督学习的区别_机器学习
  2. POJ1182 食物链 —— 种类并查集
  3. Spring-JDBC通用Dao
  4. 2016年深圳市宝安区小一学位申请流程及时间安排
  5. WDCP管理面板安装启动EXIF、bcmath完整步骤
  6. swift5.x基础知识入门
  7. pikachu安装以及安装时遇到的的问题——pikachu数据库链接不上config.inc.php 以及侧边栏访问没有反应,只有URL加了个#原因和解决办法
  8. pythonexpect后怎么循环_python 装饰器从放弃到玩转(初级)
  9. 创造思维方法训练_数学思维方法训练课程:每日一题11.24
  10. flash air 解析html,AIR 程序内部显示网页,并可以点击浏览的方法(HTMLLoader、StageWebView)...