一. 什么是Shell

1. 在学习Shell编程之前,我们应该要先知道什么是Shell

用户、Shell、Linux内核、硬件的关系如下图:

Shell是一个应用程序,也可以说是一个命令解释器,它是用户和Linux内核之间的桥梁,可以将用户在图形界面上的操作或在终端输入的命令传递给Linux内核,然后Linux内核再调度各个硬件及其他资源来完成用户的操作。

什么是Linux的内核?在Linux操作系统中,真正能够操作计算机硬件完成某个用户功能的那一部分被称为Linux系统的内核。用户在使用Linux系统时,是不可以直接操作内核的,而是通过Shell来间接的操作内核的。Shell不属于内核的一部分,而是在Linux内核之外开发的应用程序,它将接收到的用户鼠标点击操作或输入的命令传递给内核,而内核再去调度硬件去完成指定的操作。这样用户就不需要直接操作内核,而是通过Shell间接地操作内核,内核也不会被直接的暴露于外部,保障了内核的安全性,也简化了用户的操作。

Shell这个应用程序是开机即启动的,我们在操作Linux系统时,无时不刻都在直接或者间接地通过Shell去操作Linux内核。其实,在没有图形化界面之前,用户是通过终端或者控制台直接地去调用Shell这个应用程序,然后通过输入命令来操作Linux系统的。用户在控制台或者终端上看到的 $ 和 # 其实就是Shell的命令提示符,这表明用户已经进入了Shell这个程序,只需要输入命令,即可通过Shell来操作Linux内核。只不过root用户登录显示$,而普通用户登录显示#。

另外,Shell在将用户的操作传递给内核的过程,就是在调用内核提供的API接口的过程。比如,用户在图形界面或者终端命令行做了一个打开文件的操作,而这个用户的操作Shell接收到后,就会去调用内核提供的相应的函数,然后内核再去调度硬件资源来完成用户的操作。

2. 常见的Shell

我们知道,Linux 是一个开源的操作系统,它是由世界各地的多个组织机构或个人共同开发完成的,每个组织机构或个人负责一部分功能,最后组合在一起,就构成了现在我们使用的 Linux。也正是这个原因,这些不同的组织机构或者个人都会开发出可以在Linux系统中使用的应用程序,而这些应用程序的功能可能是类似的,各有优缺点,至于使用哪一个由用户选择。而Shell就是这样的一个应用程序,所以Shell有很多个版本,目前Linux的大多数发行版默认使用的Shell是 bash shell。其他常见的Shell版本如下:

(1) sh:sh 的全称是 Bourne shell,是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

(2) csh:这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

(3) tcsh:tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

(4) ash:一个轻量级占用资源少的 Shell,适合运行于低内存环境,与 bash shell 完全兼容。

(5) bash:bash shell 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。

3. 查看Linux系统的Shell

在Linux系统中,一般默认使用的Shell是bash shell。Shell是一个应用程序,一般都是放在/bin或者/user/bin目录下,而当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。

(1) 查看系统当前可用的Shell,执行命令【cat -n /etc/shells】:

(2) 查看系统当前默认使用的shell,执行命令【echo $SHELL】:

(3) 查看各个用户使用的Shell,执行命令【cat -n /etc/passwd】:

二. 什么是Shell编程

1. 什么是Shell编程语言

我们已经知道,Shell是一个应用程序,而这个应用程序不单单只是可以将用户的操作命令传递给Linux内核,它也支持编程。Shell都会对应一套编程语言的语法,而这套语言就被称为Shell编程语言或是Shell脚本语言。Shell编程语言和JavaScript语言一样是一种脚本语言,它不需要编译,而它的解释器就是Shell应用程序本身。

我们平时工作中所说的Shell,大多数情况指的是Shell脚本语言,而不是Shell应用程序。

        2. 什么是Shell脚本

我们在使用Shell脚本语言时,可以和Linux系统的其他操作命令结合使用(如 ls、grep等等),而我们使用Shell脚本语言和其他命令结合编写能够完成某个特定功能的扩展名为.sh的文本,就叫做Shell脚本程序。

3. 第一个Shell脚本

我们已经知道,Shell有很多个版本,而每个版本支持的Shell脚本语言语法可能是有差异的,而下面的关于Shell脚本的所有例子都是针对于Bash Shell这个版本而言。

(1)在根目录下新建一个Hello.sh脚本:【vim Hello.sh】

(2)然后输入以下内容:

#!/bin/bash
echo "Hello World "

第一行:#! 是一个约定标记,它可以告诉系统这个脚本要使用哪个Shell版本作为解释器,后面紧跟的/bin/bash则是Shell的所在路径,所以【#!/bin/bash 】表示声明使用bin目录下的 bash shell 作为这个脚本的解释器;

第二行:【echo "Hello World "】表示输出文本 Hello World !;

(3)然后保存退出:【!wq】;

(4)这样,一个能够输出 Hello World !的脚本就编写完成。

补充说明:

       上面我们已经说过,Shell程序就是Shell脚本语言的解释器,而我们在使用终端时(例如通过Xshell连接Linux服务器的终端),其实就是已经进入了Shell这个程序,所以其实我们是可以在终端直接输入Shell编程语言的代码来运行的,而不需要写在脚本里再去运行。例如,声明一个变量并打印这个变量的值:

(1)输入代码:【name=张三】,表示定义了一个变量name,它的值为张三;

(2)输入代码:【echo $name】,表示打印变量name的值。

当然,这种方式只适合去执行逻辑简单只有一两句代码的情况,大多数情况下我们还是将Shell编程代码写在.sh脚本中再去执行。

4. 运行Shell脚本的方式

上面我们已经编写了一个能够输出 Hello World !的Shell脚本运行,而现在我们就要执行 Hello.sh 这个脚本。而Shell脚本的执行方式有两种:

第一种:给予.sh文本可执行权限,然后执行文本:

(1)先给予Shell脚本可执行权限:【chmod +x Hello.sh】;

(2)直接执行:绝对路径:【/Hello.sh】 或者   相对路径:【./Hello.sh】

注意,这里执行时如果使用的是相对路径,必须要以./开头,表示当前目录,否则系统会找不到脚本,从而导致执行失败。

第二种:将 Shell 脚本作为参数传递给 Bash Shell 解释器:

(1)这里使用Bash Shell来作为解释器,那么我们直接调用Bash Shell 这个程序,然后把Hello.sh这个脚本作为参数传给Shell即可:【/bin/bash Hello.sh】或 【bash Hello.sh】

(2)这里需要注意,使用这种方式执行Shell脚本时,在Shell脚本的第一行中就不需要声明使用哪个版本的Shell来作为解释器,也就是不需要这行代码【#!/bin/bash】,因为我们运行脚本的命令中【/bin/bash Hello.sh】,就已经指明了使用哪个版本的Shell作为解释器。

注意,这种方式执行脚本文件时,如果使用的是相对路径,那么【/bin/bash ./Hello.sh】和【/bin/bash Hello.sh】是一样的,并无使用第一种执行方式中的区别。

Linux系统的Shell编程相关推荐

  1. 《Linux与unix Shell编程指南》 总结

    <Linux与unix Shell编程指南> 总结 标签: linux网络dstcron服务器 2011-01-10 18:27 3742人阅读 评论(0) 收藏 举报 分类: Linux ...

  2. shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

    Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对 Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很 ...

  3. 2008年度LINUX与UNIX SHELL编程指北系列大片

    2008年度LINUX与UNIX SHELL编程 指北 系列大片 前言:这个世界是公平的,机会是平等的,学习的机会人人都有,只要你有不甘平庸的上进之心,定会成功! 主演:rootman rootman ...

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

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

  5. Linux学习:Shell编程总结

    在学习L为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用 ...

  6. Linux系统的shell是什么

    shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性. 什么是 ...

  7. Linux系统与shell教程(1):有没有兴趣玩耍一下shell版俄罗斯方块?

    文章目录 来,我要诱惑你 Linux系统与shell 安装属于你的Linux系统 shell的功能 shell特点 shell版本 shell初体验 Hello Shell shell版俄罗斯方块 怎 ...

  8. linux的shell编程课设,linux课程设计-shell编程.doc

    linux课程设计-shell编程.doc 还剩 18页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: fido ...

  9. linux系统下的shell是什么,Linux系统中shell各命令的区别有什么?

    今天小编要跟大家分享的文章是关于Linux系统中shell各命令的区别有什么?喜欢Linux系统并对此感兴趣的小伙伴们快来一起看一看吧~希望对你有所帮助. 1.xargs作用: (1)将前一个命令的标 ...

  10. Linux系统通过Shell脚本实现一个全方面的系统性能分析系统

    Linux系统通过Shell脚本实现一个全方面的系统性能分析系统 文章目录 Linux系统通过Shell脚本实现一个全方面的系统性能分析系统 1.利用select循环实现系统工具箱 2.命令技巧 3. ...

最新文章

  1. sql 根据多个ID删除表中多行数据
  2. 基于标记的AR的OpenCV实现
  3. python与excel做数据可视化-python做可视化数据分析,究竟怎么样?
  4. 如果彩虹QQ算非法外挂,那么运行在windows上的非微软开发的程序算什么?
  5. 安装git之后,桌面出现蓝色问号的解决方法
  6. 过滤特征_万字长文讲解如何做特征工程
  7. python使用-python使用
  8. Vimeo反反复复地重生死亡。
  9. 淘宝API代码c#实例(摘)
  10. PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理
  11. 130242014075 杨利城 《电商系统某功能模块》的需求分析与设计
  12. 2 多贝西小波_【原创】土超:安卡拉高古VS贝西克塔斯
  13. 网易公开课与网易云课堂的区别
  14. 坚果pro2刷机魔趣9(安卓9.0)的分享
  15. 面试题集锦——不断更新
  16. oracle revoke 列_oracle受权与回收权限grant和revoke
  17. 通过任意数量点拟合曲线
  18. 罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程
  19. 华为android10手机隐藏小游戏,华为手机10个实用好玩的隐藏功能
  20. 关于springboot项目(@SpringBootTest单元测试类)找不到配置文件问题

热门文章

  1. squid笔记下载_Squid笔记APP下载|Squid笔记安卓版下载
  2. Java SSM开发大众点评后端 Mybatis实战商城项目
  3. 课程管理系统 java
  4. vasp-分子动力学模拟
  5. URLDecoder解码报错
  6. Android端直播系统开发入门
  7. nodejs + echarts 图表展示
  8. aix java 版本_AIX系统安装JDK
  9. 研发管理 - 流程篇
  10. 【PMP】pmp练习题及解析