Shell - 01 初探

Shell作为连接用户与内核的桥梁,是Unix/Linux系统的关键组件。本文详细介绍Shell的概念、分类及功能,包括Shell脚本的创建与执行,以及如何利用Shell进行系统管理和自动化任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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的日常管理工作,如:文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、甚至能抓取网页内容、压缩文件等等

[root@master sbin]# cat /etc/shells # 这本身就是一句shell命令了
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

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

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

[root@master ~]# vim helloworld.sh
#!/bin/bash

echo "Hello World!"

代码解析:

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

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

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

或
[root@master ~]# chmod +x  helloworld.sh

执行方式1:

[root@master ~]# helloworld.sh
Hello World!

或 ./表示当前目录下。推荐!!!
[root@master ~]# ./helloworld.sh

执行方式2:

[root@master ~]# /bin/sh helloworld.sh
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脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值