《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用

简介: 《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁

🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥


第七章 shell的交互功能

学习目的

让学生了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用方式。

学习要求

了解:shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行

理解:管道和重定向,环境变量和系统变量以及变量引用方式;

掌握: 输入输出重定向的使用和命令组合,shell的三种变量类型——环境变量、系统变量和自定义变量的使用。

学习方法

应用已有功能解决常见管理维护需求的能力,尤其是利用shell编程解决问题的能力。

概念和原理

7.1 shell的功能与分类

7.1.1 shell的定义

Linux操作系统由内核、shell、文件系统和一些实用程序构成。

Shell是指“为使用者提供操作界面”的软件,通常指的是命令行界面的解析器。

Shell 是连接用户和 Linux 内核的程序,它不仅是Linux系统与用户之间的桥梁,还是一种程序设计语言。

7.1.2 shell的功能

▪ 命令解释器:解释用户发出的各种操作系统命令

▪ 程序设计语言:功能强大, 可包容引用所有的操作系统命令和可执行程序。

7.1.3 shell的分类

▪ Bourne Shell (sh)

▪ C shell (csh)

▪ Korn shell (ksh)

拓展

▪ Bourne Again shell(bash, sh 的扩展)

▪ tcsh (csh 的扩展)

▪ Public Domain Korn shell(pdksh, ksh 的扩展)

7.2 shell的启动与执行

7.2.1 shell的启动

▪ Linux预置七种init运行级别(0-6)

- 0:关机模式 (相当于poweroff)

- 1:单用户模式

- 2:无网络支持的多用户模式

- 3:有网络支持的多用户模式(也就是文本模式,工作中最常用的模式)

- 4:保留,未使用

- 5:有网络支持的X-windows支持多用户模式(也就是桌面图形模式)

- 6: 重新引导系统,即重启 (相当于reboot)

▪ 当以telent或者ssh登入主机时,系统会出现一个login的画面让用户输入账号

▪ 输入账号与密码之后,Linux会:

- 先找寻/etc/passwd里面是否有这个账号,如果没有则跳出,如果有的话则将该账号对应的UID(User ID)与GID(Group ID)读出来,另外,该账号的home目录与Shell设定也一并读出;

- 核对密码表,这时Linux会进入/etc/shadow里面找出对应的账号与UID,然后核对一下输入的密码与里头的密码是否相符;

- 如果符合,就进入Shell管控的阶段;

- 终端屏幕上显示提示符“$”,表明shell已经启动完毕,等待用户的键盘命令。

7.2.2 shell 解释执行键盘命令的过程

图7-1 shell 解释执行键盘命令的过程

7.3 shell命令类型

(1) 单条命令

- 这是最常用命令形式,在一个命令行上的只包含一条命令(包括命令名以及可能有的命令行任选项和命令行参数等)。

- $ who -H

(2) 串行命令

- 串行命令就是在一个命令行中包含多条由分号(;)隔开的简单命令。

- 第一条命令执行完成后, (无停顿)再执行第二条命令, 如此下去. 运行功能和效果与在键盘上逐条输入命令并运行是完全一样的。

- 主要目的是提高键盘命令输入效率。

- $ pwd; who; date

(3) 复合命令(命令组)

  1. 管道形式:管道前后的命令任意组合、同时运行, 形成功能更强大灵活的复合命令.
  2. 圆括号形式:括号内的命令任意组合、顺序执行,且由一个子shell来单独控制运行, 相当于一个小的功能程序. 方便灵活, 运行效率高.
  3. 复合命令:管道(用符号“|”表示)用于连接两条命令,把第一条命令的运行结果传送给第二条命令作为其运行参数。

(4) 后台命令

- 后台命令,就是 shell启动该命令的执行后,不等待该命令执行完毕,就立即开始接收新的键盘命令。

- 普通命令行的行尾加上&符号,就表示该命令在后台执行。

7.4 标准输入/输出重定向

7.4.1 标准输入/输出重定向

(1) 标准输入/输出

▪ 标准输入: 键盘 fd = 0

▪ 标准输出: 荧光屏 fd = 1

▪ 标准错误输出: 荧光屏 fd = 2

(2) 标准输入重定向

command < filename

进程的输入来自文件filename。

(3) 标准输出重定向

▪ 覆盖形式

command > filename

进程输出覆盖文件filename

▪ 追加形式

command >> filename

进程输出追加到文件filename后面, 不覆盖filename

(4) 标准错误输出重定向

command 2> filename

进程运行中的错误信息重定向到文件filename。

(5) 标准输入/输出/错误输出重定向混用

grep student < name_list > course

其意义是找出 name_list 文件中包含 student 字符串的行,并将查找的结果保存到course文件中去。

(6) 常见输入输出重定向形式

命令 输入 输出 效果
cat 键盘 屏幕 将键盘输入显示在屏幕上
cat file1 file1 屏幕 file1的内容显示在屏幕上
cat file1 > file2 file1 file2 file1的内容写入file2中
cat > file2 键盘 file2 键盘输入的内容写入file2
cat < file1 file1 屏幕 file1的内容显示在屏幕上
cat < file1 > file2 file1 file2 file1的内容写入file2中

(7) 管道

管道用于连接两个命令, 它把前一个命令的标准输出重定向给后一个命令作为标准输入,其格式为:

command1 | command2

▪ 对command1来说标准输出被重新定向到管道文件

▪ 对command2来说标准输入也被重新定向为管道文件.

7.5 shell的内部命令

7.5.1 shell的内部命令

shell 的内部命令包含在shell内部, 不是一条单独的操作系统命令, 因此无法在文件系统中查找到。

shell 包含几十条内部命令。在 bash 环境下,输入 help 命令(这也是一条内部命令),就可列出bash的所有内部命令。

可以使用 type 来确定一个命令是否是内建命令

(1) time命令

▪ time命令可放在任何命令或可执行程序的前面,显示当前shell运行命令所花费的时间。time 命令使用方式就是在普通命令的前面加上 time即可。

$ time ls –lR /usr > flist

real 2m 17.32s 该ls进程的总运行时间

user 0m 7.63s 其中用户程序部分的运行时间

sys 0m 6.79s 其中操作系统核心部分运行时间

(2) echo命令

▪ echo命令主要用于显示后面的字符串或变量的值

$ echo Hello World!

Hello World!

▪ 如果 echo 后面有多个由空格隔开的字符串,则 echo 把这些参数都作为单独的命令行参数(字符串)来处理,显示时各个参数之间就只保留一个空格。

$ echo this is a test line

this is a test line

▪ 如果就是要保留 echo后面的多个字符串的格式(多个空格),就需要把这些字符串用双引号括起来,表示为一个完整的字符串。

$ echo “this is a test line”

this is a test linet

▪ 常用的转义字符

图7-2 常用的转义字符

7.6 shell的变量

7.6.1 shell的变量

每一个shell都可以设定一组变量来限定shell及其子程序的功能模式和取值范围

shell的变量有三种类型:环境变量、系统变量和用户自定义变量。

shell的环境变量也称为标准变量,由系统定义并赋有初值,用户可以直接使用这些变量的初值,也可以修改这些变量的值。

系统的基本环境变量放在/etc/profile中, 用户环境变量放在用户主目录下的.profile文件中, 用户shell启动时, 先执行/etc/profile, 再执行用户主目录下的.profile。

环境变量可在shell运行时动态修改。

(1) 常用的shell环境变量及实例

▪ HOME变量

HOME=/home/ly 用户主目录, 注册时的初始目录

▪ PATH变量

PATH=/bin:/usr/bin:./ 键盘命令的搜索路径

▪ SHELL变量

SHELL=/bin/sh 用户的初始shell的路径名称

▪ TERM变量

TERM=vt100 当前所用的终端类型

▪ PS1变量

PS1=$ shell的主提示符

▪ IFS变量

IFS= 域分隔符, 通常为空格(不可显示字符), 用来分隔命令行各个域

(2) echo命令的使用

echo命令的基本功能就是在标准输出上显示后面的字符串,或变量的值。当字符串中带空白符或其它控制字符时,用引号将其括起来。

例如:

$ echo 12345

12345

$ echo “department computer”

department computer

$ echo “My home directory is: $HOME”

My home directory is: /usr/teacher/david

$ echo –n “Input your choice (y/n) [ ]\b\b”

Input your choice (y/n) [ _ ]

(3) set命令的使用

如果要查看当前用户的所有环境变量的设置情况,直接键入set命令即可。

(4) shell的系统变量

常用系统变量:

$0 当前shell程序的名字

$1 ~ $9 命令行上的第一到第九个参数

$# 命令行上的参数个数

$* 命令行上的所有参数

$@ 分别用双引号引用命令行上的所有参数

$$ 当前进程的进程标识号(PID)

$? 上一条命令的退出状态

$! 最后一个后台进程的进程标识号

系统变量只能引用不能修改!

(5) shell的局部变量(用户变量)

▪ 局部变量是由用户根据需要任意创建的. 变量名通常由一个字母后跟零个到多个字母、数字或下划线组成。

▪ 引用变量的值时,在变量名前面加上$符号.

▪ 例如:

$ AA=123 定义变量AA

$ echo $AA 引用变量AA的值

123 (显示变量AA的值)

$ B=“this is a string” 定义变量B, (字符串中有空格时用引号)

$ echo $B 引用变量B的值

this is a string (变量B的值)

(6) 清除变量

当某个shell变量不再使用时,可以将其清除。当变量被清除后,它所代表的值也会一起消失。

清除变量使用 unset命令。

$ unset V

(7) 输出变量export

新的shell变量定义后或已有的shell变量修改值后, 如果未经export命令输出, 则只在当前的shell中起作用, 对其各个子shell不产生任何影响. 经过 export 命令输出的变量才能对当前shell的各个子shell、以及子shell的子shell起作用。

export 命令的功能就是输出变量,使在当前 shell 中新建的变量或重新赋值后的变量能够被后续可能新建的子 shell所识别。

例如:

$ PATH=$PATH:./

$ export PATH

7.7 shell的引用符

7.7.1 shell的引用符

▪ 使用引用符是防止字符串中某些特殊字符被shell解释成其他含义。

▪ 单引号、双引号、反撇号和花括号为shell的引用符。

▪ 特殊字符是指那些既可代表字符本身又可解释为其他意思的字符。

(1) 单引号和双引号

shell规定单引号禁止变量替换, 元字符$和*等保持其符号本身; 而双引号允许元字符变量替换.

$ a=“he is a student”

$ echo “She said: $a”

She said: he is a student echo执行时,替换了变量$a的值

$ b=‘The value of a is $a’

$ echo $b

The value of a is a e c h o 执行时,未替换变量 a echo执行时,未替换变量aecho执行时,未替换变量a的值

$ c=“The value of a is $a”

$ echo $c

The value of a is he is a student

(2) 反撇号

反撇号( ` )的作用就是把包括在反撇号中的字符串作为命令来执行,再把命令执行的结果(输出)加以利用。有时这也叫命令替换。

$ a=date

$ echo $a

date (变量a的值是字符串date)

$ b=date (反撇号中的字符串作为命令名)

$ echo $b

Sat Feb 1 16:28:19 Beijing 2003 (变量b的值是反撇号中命令的执行结果)

$ echo “Current directory is: pwd

Current directory is: /home/teachers/liudi

$

(3) 花括号

花括号({和})的功能就是把变量名与后面紧跟的其他字符区分开来。

$ c=“There is a teach”

$ echo “$cer reading room”

reading room (未定义变量cer, 其值用空串替代)

$ echo “${c}er reading room”

There is a teacher reading room

(花括号将变量名和后面的字符串区分开)

重点

(1)输入输出重定向和管道。(2)环境变量、系统变量和引用符。

输入输出重定向和文件的概念结合起来讲,它们分别是三个不同的特殊文件,将它们映射到其他文件或者对象上即可完成重定向,而管理对进程来说也是特殊的文件,通信端口对Linux来说本身就是文件。

环境变量等举例说明使用方式即可。

难点

输入输出重定向。

习题

1.简述shell的功能。

答:(1)命令解释器:解释用户发出的各种操作系统命令(2)程序设计语言:功能强大, 可包容引用所有的操作系统命令和可执行程序。

2.shell可以分为哪几类?

答:主要分为:(1)Bourne Shell (sh)(2)C shell (csh)(3)Korn shell (ksh)

拓展:Bourne Again shell(bash, sh 的扩展)、tcsh (csh 的扩展)和Public Domain Korn shell(pdksh, ksh 的扩展)。

3.管道的作用是什么?管道前后两条命令之间的关系是什么?

答:管道用于连接两个命令, 它把前一个命令的标准输出重定向给后一个命令作为标准输入。

  1. 如何设置一个变量?如何清除一个已有的变量?

答:创建变量:变量名通常由一个字母后跟零个到多个字母、数字或下划线组成。例如:

$ AA = 123

清除变量:当变量不再使用时,使用unset命令来清除变量。例如:

$ unset AA

原创声明

=======

作者: [ libin9iOak ]


本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任。

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。


目录
相关文章
|
15天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
51 4
|
4天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
19 5
linux系统服务二!
|
4天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
21 3
linux系统服务!!!
|
12天前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
108 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
14天前
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
35 5
Linux系统之安装OneNav个人书签管理器
|
13天前
|
运维 监控 Linux
Linux系统之部署Linux管理面板1Panel
【10月更文挑战第20天】Linux系统之部署Linux管理面板1Panel
62 3
Linux系统之部署Linux管理面板1Panel
|
16天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
38 5
Linux系统之安装Ward服务器监控工具
|
18天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
32 2
Linux系统之安装cook菜谱工具
|
20天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
75 4
Linux系统之Ubuntu安装cockpit管理工具
|
19天前
|
安全 Linux
Linux系统之lsof命令的基本使用
【10月更文挑战第14天】Linux系统之lsof命令的基本使用
75 2
Linux系统之lsof命令的基本使用