美文网首页
Shell入门01 -- Shell定义,种类,作用,调试,特性

Shell入门01 -- Shell定义,种类,作用,调试,特性

作者: YanZi_33 | 来源:发表于2021-09-27 18:31 被阅读0次

    前言

    • 计算机只能识别机器语言0和1,但是 ,我门程序员不可能直接写机器语言的代码,所以要想讲程序员开发的代码在计算机上运行,就必须找工具来翻译成机器语言,这个工具就是我们常说的编译器解释器

    编程器语言的分类

    编译型语言
    • 程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了,程序执行效率高,依赖编译器,跨平台性差,例如C,C++,Object_C,Java等等;
    解释型语言
    • 程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次,因此效率比较低,例如Python,Shell,Ruby,JavaScript等等都是解释型语言;
    image.png

    Shell定义

    • 首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。本书中,除非特别指明,Shell 指的就是命令行环境。
    • 其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
    • 最后,Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能;
    • 总之,Shell是介于系统内核与用户之间,负责命令解释的;

    Shell的种类

    • Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell;
    • 历史上,主要的 Shell 有下面这些:
      • Bourne Shell(sh)
      • Bourne Again shell(bash)
      • C Shell(csh)
      • TENEX C Shell(tcsh)
      • Korn shell(ksh)
      • Z Shell(zsh)
      • Friendly Interactive Shell(fish)
    • Bash 是目前最常用的 Shell,除非特别指明,下文的 Shell 和 Bash 当作同义词使用,可以互换;
    • 终端执行cat /etc/shells可查看本机的shell种类,如下所示:
      image.png
    • 终端执行 bash --version 可查看bash的版本信息;
    • 终端与shell之间的关系:打开一个终端,就是打开了一个shell程序;

    Shell脚本

    • 简单来说shell脚本是将需要执行的命令保存到文本中,按照顺序执行,它是解释型语言,不需要进行编译;
    • 若干命令 + shell格式 + shell语法 + 逻辑 = shell脚本
    • 其作用:简化操作步骤,提高效率,减少人为干预,减少系统故障;
    • 下面先上一个常规操作,熟悉一下创建脚本文件的命令行;
    image.png
    • mkdir -p soft/scripts:创建文件路径/soft/scripts,其中加上-p是为了防止执行错误;
    • mkdir day01:创建文件夹day01
    创建Shell脚本
    • vim test:创建Shell脚本文件test,并进入文件编辑区域,然后按i,可向文件中添加内容,编辑完成后按Esc退出,再按组合键shift + :,然后输入wq保存退出;
      image.png
    • cat test:查看test文件中的内容;
    • ./test:执行脚本文件,注意⚠️test文件是没有后缀的也就是说没有指明文件的类型,而脚本文件类型通常有Shell脚本Python脚本./test命令默认执行Shell脚本,发现报错-bash: ./test: Permission denied,是因为没有赋予执行权限,输入chmod +x test即可赋予执行权限,然后再执行./test,可执行成功!
    • bash test:也可执行Shell脚本其与sh test等价,其执行脚本有权限的,可以直接执行,这是与./test命令的区别;
    创建Python脚本
    • vim tes:再创建一个tes文件,内容如下所示:

      image.png
    • 然后执行./tes或者bash tes或者sh tes均出现报错./tes: line 3: print: command not found,这是因为tes文件是Python脚本文件./tes默认执行的Shell脚本,所以会出现报错,可通过python tes执行成功!

    • tes文件做如下修改,顶部第一行加入#!/usr/bin/python,如下所示:

      image.png
    • #!/usr/bin/python:告诉系统使用python解释器解释脚本,所以这行代码是必须添加的,同理Shell脚本文件首行也要加上解释器#!/bin/bash,如下:

      Snip20210928_78.png
    • 发现两个路径/bin/usr/bin

    • /bin路径下没有python可执行文件,而在/usr/bin路径下存在;

    • bashsh这个两个可执行文件在/bin/usr/bin路径下均存在;

    总结
    • 当脚本文件没有指明解释器时,./脚本文件名 默认执行shell脚本,若为python脚本,就会出现报错,且./脚本文件名需要添加执行权限;
    • 当Shell脚本指明解释器#!/bin/bash,Python脚本指明解释器#!/usr/bin/python,均可通过./脚本文件名执行脚本,也可分别通过sh 脚本文件名python 脚本文件名 执行脚本;
    • 如果直接将解释器的路径写死在脚本中,可能在某些系统就会存在找不到解释器的兼容性问题,可使用#!/bin/env bash
    Shell脚本的调试
    • sh -vx 脚本文件名:查看脚本文件的执行过程;
    • sh -n 脚本文件名:检测脚本文件是否存在语法错误;
    • vim 脚本文件名 +报错的line:可直接定位到脚本文件报错的指定函数位置;
    • Command + T:创建一个新的终端窗口;

    Bash的特性

    命令与文件的自动补全
    • tab键能补全命令和文件;
    常用快捷键
    • control + c:终止前台运行的程序;
    • control + l:清屏;
    • control + r:搜索历史命令;
    • control + z:将前台运行的程序挂起到后台;
    • control + d:退出 等价于exit
    常用通配符
    • *:匹配0个或多个任意字符;
    • ?:匹配任意单个字符;
    引号
    • 双引号:对引起来的内容,会解析变量;
    • 单引号:对引起来的内容,不会解析变量,输入等于输出;
    • 反引号:是用来解析shell命令的 其与 $()等价;

    相关文章

      网友评论

          本文标题:Shell入门01 -- Shell定义,种类,作用,调试,特性

          本文链接:https://www.haomeiwen.com/subject/ykoagltx.html