Shell - 01 初探

ゞ 浴缸里的玫瑰 2022-03-09 13:46 218阅读 0赞

在这里插入图片描述

0、定义-shell

shell,译作:壳、外壳。

在计算机科学中,Shell 称为【壳】(区别于 【核(kernel)】),是一个用C语言编写的程序(性质是一个命令解析器,用于接收用户命令。同时也是一个程序设计语言(脚本编程语言)),它一端连接着【内核】,另一端连接着【用户和其它应用程序】,即 Shell是用户和应用程序 与内核沟通的桥梁。

它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。

程序设计语言分为两类:

  • 编译型语言
  • 解释型语言

















语言类别 区别
编译型语言 需要预先将写好的源代码转换成目标代码,这个过程被称作“编译”。运行程序时,直接读取目标代码。由于编译后的目标代码非常接近计算机底层,因此执行效率很高,这是编译型语言的优点
解释型语言 也叫脚本语言或命令语言。执行这类程序时,解释器需要读取编写的源代码,并将其转换成目标代码,再由计算机运行。因为每次执行程序都多了编译的过程,因此效率有所下降
  • 作为命令语言:Shell交互式地(Interactive)解释、执行用户输入的命令。这也是Shell执行命令的一种方式。
  • 作为程序设计语言:Shell可定义各种变量、参数、函数、流程控制(条件、循环、分支)等等。

1、相关概念-shell

Linux的Shell脚本解释器种类众多,一个系统可以存在多个shell脚本解释器。可以通过cat /etc/shells 命令【查看系统中可登陆的Shell】脚本解释器:以CentOS7为例,它的默认shell是bash

与此相关的词语:

  • 【Shell脚本】(shell script),是一种为shell编写的脚本程序,是放在文件中的一串shell和操作系统的命令,用于可被重复使用。其本质是 命令行命令简单的组合到一个文件里头。
  • shell、shell script是两个不同的概念。
  • 业界说 shell,通常指的是 shell脚本。因习惯和简洁,【shell编程】一般指的是 【shell脚本编程】,不是指开发shell本身。

2、分类-shell

Shell分为两类:

  • 1、图形界面Shell(Graphical User Interface shell 即GUI shell):如Windows Explorer
  • 2、命令行式Shell(Command Line Interface 即CLI shell):如bash、sh、ksh、csh这些是Unix或Linux系统中的;Windows NT系统的cmd.exe、Windows PowerShell。
  • 传统意义上说的 Shell 指的是 命令行式shell,除非特别注明。

各主要操作系统都有自己默认的(缺省的)Shell,如:

  • Linux(Red Hat、Slackware、Caldera、CentOS)是 Bourne Again shell(简写为 bash)
  • FreeBSD(Unix)是C shell
  • Windows 是Windows PowerShell

Linux shell常见版本:

  • Bourne shell(B shellsh):Unix的最初Shell,在Shell编程方面比较优秀
  • C Shell(csh):在C语言编程方面性能较好
  • Bash Shell(bash):Bourne Shell的增强版,Linux系统的默认Shell
  • Korn Shell(ksh):综合B Shell和C Shell 的特点于一身
  • Tcsh:C Shell的增强版,具有命令行编程接口和历史记录功能

3、Shell能做什么?

Shell脚本,能干什么?? 通过Shell用户可以访问操作系统内核服务

以Linux为例,可完全胜任Linux的日常管理工作,如:文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、甚至能抓取网页内容、压缩文件等等

  1. [root@master sbin]# cat /etc/shells # 这本身就是一句shell命令了
  2. /bin/sh
  3. /bin/bash
  4. /usr/bin/sh
  5. /usr/bin/bash
  6. /bin/tcsh
  7. /bin/csh

4、如何运行一个shell脚本文件?

1)创建并编辑一个shell脚本文件:扩展名随意,可以没有,不过最好是做到见名知意。扩展名并不会影响脚本执行。

  1. [root@master ~]# vim helloworld.sh
  2. #!/bin/bash
  3. echo "Hello World!"

代码解析:

  • #! 是一个约定标记,它告诉系统这个脚本需要什么解释器来执行,也就是说:使用哪一种Shell,这里指定bash
  • echo 是Shell的一个内部指令,用于在终端打印出指定的字符串"Hello World!"

2)执行shell脚本文件
赋予当前用户helloworld.sh的执行权限(刚创建的文件没有执行权限)

  1. [root@master ~]# chmod u+x helloworld.sh #给文件属主增加执行权限
  2. [root@master ~]# chmod +x helloworld.sh

执行方式1:

  1. [root@master ~]# helloworld.sh
  2. Hello World!
  3. ./表示当前目录下。推荐!!!
  4. [root@master ~]# ./helloworld.sh

执行方式2:

  1. [root@master ~]# /bin/sh helloworld.sh
  2. Hello World!

直接运行shell解释器,它的参数是shell脚本文件名。这种情况下,脚本文件中的这行#!/bin/bash所指定的解释器是不生效的。

/bin/bash/bin/sh 本身也是可执行脚本文件。

上述这种也叫【批处理(Batch)】,即:用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。

5、多种方式:查看系统中默认Shell【非重点知识,了解即可】

  • 查看当前系统中运行的Shell类型:通过查看当前运行的SHELL变量,确定默认的Shell

    [root@master ~]# echo $SHELL
    /bin/bash

  • 通过查看创建用户时使用的Shell来确定默认的Shell类型

    [root@master ~]# grep root /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

  • 通过查看默认配置文件/etc/default/useradd,同时可以通过修改SHELL变量,修改默认的Shell

    [root@master ~]# cat /etc/default/useradd

    useradd defaults file

    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash #这里可以修改为其他Shell类型
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

  • 通过$0 变量来获取当前运行的Shell类型

    [root@master ~]# echo $0
    bash

  • 查看某个特定用户的Shell。每个用户都可以有自己特定的Shell

    [root@master ~]# grep ^root /etc/passwd
    root:x:0:0:root:/root:/bin/bash

  • 通过$$这个变量来获取当前运行的shelld的进程号(PID),在通过ps -p PID 获取当前运行的SHELL类型

    [root@master ~]# echo $$
    79176
    [root@master ~]# ps -p 79176
    PID TTY TIME CMD
    79176 pts/0 00:00:00 bash

参考文档:
1、shell (计算机壳层)
2、Shell脚本

发表评论

表情:
评论列表 (有 0 条评论,218人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Shell编程(01)-入门简介

    Shell 是操作系统的最外层,Shell 可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任

    相关 Shell-01

    1、概述 大数据程序员为什么要学习Shell? (1)需要看懂运维人员编写的shell程序 (2)偶尔会编写一些简单shell程序来管理集群、提高开发效率 Shel

    相关 初探 Dart 语法 01

    欢迎来到 Dart 编程的世界,最开始将通过初探 Dart 的基本语法;让你对 Dart 整个语法体系轮廓、Dart 的编程有个大概了解,然后再深入到具体每个语法点细节和使用场

    相关 shell脚本-01

    使用变量时,建议给所有变量 按照$\{变量名\} 的方式使用。 字符串建议使用双引号""包括, 命令的结果保存到变量:      变量=$(命令的结果)  不推荐 \`命令