从这篇博客开始,我们将进入Linux的shell脚本的学习,这对于Linux学习爱好者而言是特别重要的一节,也是特别有意思的一节,shell 脚本就像我们知道的Java,php类似的编程语言一样,通过shell脚本,我们能完成很多有意思的应用程序。在学习中找到乐趣,这也是最重要的。

  本篇博客我们先给大家介绍一下什么是shell,以及bash的基本功能。

1、Shell 是什么?

  和大家通常说的shell是一门编程语言的说法其实是不完全正确的。

  ①、shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 shell 来启动、挂起、停止甚至是编写一些程序。

    比如,我们现在操作的界面就是shell,我们输入一些命令,通过shell 去翻译为机器语言,然后由硬件去执行这些命令。

  ②、shell 是一个功能很强大的编程语言,它易编写、易调试,而且灵活性强。shell 是解释执行的脚本语言,在 shell 中可以直接调用 Linux 系统命令。

  

  其实windows类似于shell的就是它的图形交互界面,我们在windows系统中打开文件,删除文件等操作,就是向windows系统发送命令。

2、Shell 的分类

  

  

  

  

3、查看Linux系统支持的 shell:/etc/shells

  

  我们可以在shell解释器中直接输入shell名称进行切换

  

4、echo 输出命令

  这个命令如果学过Java的类似于 System.out.println(),如果学过C语言的类似于 printf(),在shell 当中语法形式如下:

echo 【选项】【输出内容】

  -e  表示支持反斜杠控制的字符转换,也就是转义字符。

  

  范例:

  

5、脚本执行方式

  首先我们编写一个shell 脚本。通过 vi hello.sh,打开 hello.sh 文件,然后在文件中添加如下内容:

  

  ①、我们说Linux系统是不区分文件后缀名的,这里我们学习的是 bash,所以创建文件 hello.sh,后缀名最好加上.sh(虽然不加也没问题),便于我们识别。

  ②、脚本的第一行 #!,这是一个约定的标记,它告诉系统这个脚本需要用什么解释器去执行,即使用哪一种 shell,所以学习 bash,第一行固定都是 #!/bin/bash。这是不能省略的。

  创建完毕之后,接下来执行该脚本,有如下两种方式:

  ①、作为可执行程序

cd /tmp                     #进入到脚本所在的目录
chmod +x ./hello.sh #使得脚本具有可执行权限
./hello.sh #执行脚本

  注意,一定要写成 ./hello.sh,而不是 hello.sh,运行其它二进制的程序也一样,直接写 hello.sh,linux 系统会去 PATH 里寻找有没有叫 hello.sh 的(这是后面会讲的环境变量的配置),而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 hello.sh 是会找不到命令的,要用 ./hello.sh 告诉系统说,就在当前目录找。

  

  ②、作为解释器参数

  也就是直接运行解释器,其参数就是 shell 脚本的文件名,如下:

/bin/sh hello.sh
或者
bash hello.sh

  注意:这种方式执行脚本,并不需要第一行写上 #!/bin/bash。

Linux系列教程(二十)——Linux的shell概述以及如何执行脚本的更多相关文章

  1. ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用“文件比较” ...

  2. linux系列(二十):find命令

    1.命令格式 find pathname -options [-print -exec -ok ...] 2.命令功能 用于在文件树种查找文件,并作出相应的处理 3.命令参数 pathname: fi ...

  3. .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限

    一.Linux下的文件目录 简介:linux的文件系统是采用级层式的树状目录结构,在此 结构中的最上层是根目录“/”,然后在此目录下再创建 其他的目录.深刻理解linux文件目录是非常重要的,如下图所 ...

  4. Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源

    多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...

  5. Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

  6. Linux系列教程(十二)——Linux软件包管理之yum在线管理

    上一篇博客我们介绍了rpm包管理之rpm命令管理,我们发现在使用rpm命令手动安装rpm包的时候,会发现安装遇到到的依赖让你痛不欲生,安装一个rpm时会要先先安装某个依赖的rpm,而安装这个依赖的rp ...

  7. Linux系列教程(十四)——Linux用户和用户组管理之相关配置文件

    前面我们介绍了软件包管理.首先介绍了rpm包的相关命令,但是我们发现直接安装rpm包会被其依赖性折磨的不行,然后解决办法是yum在线管理,通过yum命令安装rpm包能自动帮助我们解决依赖性.最后又介绍 ...

  8. Linux系列教程(十六)——Linux权限管理之ACL权限

    通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow ...

  9. Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令

    通过前面两篇博客,我们介绍了Linux系统的权限管理.Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这在Linux只能对于一个文件只能有所有者权限 ...

随机推荐

  1. Windows下memcached的安装配置

    下载windows 32位或64位 memcached 下载 memcached_dll 1.将第一个包解压放某个盘下面,比如在c:\memcached.2.在终端(也即cmd命令界面)下输入 'c: ...

  2. KM算法的应用

    HDU2255 模板     难度x HDU2282 思维     难度XXx HDU3722 模板     难度X HDU3395 模版 HDU1533 最小值模型 难度x HDU2853 HDU3 ...

  3. asp.net调用Lodop实现页面打印或局部打印,可进行打印设置或预览

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebPrint.aspx.cs ...

  4. eNSP关闭保存文件的提示信息

    总是提示如下信息: Oct 12 2017 23:49:24-08:00 Huawei DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25.191.3. ...

  5. winPcap编程之不用回调方法捕获数据包(五 转)

    这一次要分析的实例程序跟上一讲非常类似(“打开适配器并捕获数据包”),略微不同的一点是本次将pcap_loop()函数替换成了pcap_next_ex()函数.本节的重点也就是说一下这两个函数之间的差 ...

  6. Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker

    准备工作(安装过程可以百度,已安装的可以跳过) a)     安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...

  7. JS实现时钟特效

    <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"& ...

  8. 当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)

    上篇主要介绍了 GitLab WorkFlow 以及 CI/CD 做的事情,并且详细分析 GitLab CI 跟 Runner 信息交互是如何进行的.接下来将为大家讲解 Executor 的实现,再通 ...

  9. YYHS-NOIP模拟赛-gcd

    题解 这道题题解里说用莫比乌斯反演做(我这个蒟蒻怎么会做呢) 但是不会,所以我们另想方法,这里我们用容斥来做 我们先把500000以内的所有质数筛出来 每次读入编号的时候,先把编号对应的这个数分解质因 ...

  10. angular 4 实现的tab栏切换

    管理系统 tab 切换页,是一种常见的需求,大概如下: 点击左边菜单,右边显示相应的选项卡,然后不同的选项卡面可以同时编辑,切换时信息不掉失! 用php或.net,java的开发技术,大概是切换显示, ...