《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技术核心学习团队。一起探索科技的未来,共同成长。


目录
相关文章
|
8天前
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
7天前
|
Linux
Linux 常用文件查看命令
`cat` 命令用于连接文件并打印到标准输出,适用于快速查看和合并文本文件内容。常用示例包括:`cat file1.txt` 查看单个文件,`cat file1.txt file2.txt` 合并多个文件,`cat &gt; filename` 创建新文件,`cat &gt;&gt; filename` 追加内容。`more` 和 `less` 命令用于分页查看文件,`tail` 命令则用于查看文件末尾内容,支持实时追踪日志更新,如 `tail -f file.log`。
28 5
Linux 常用文件查看命令
|
10天前
|
弹性计算 监控 安全
实测阿里云操作系统控制台:功能、诊断与优化
阿里云操作系统(AliOS)是阿里巴巴专为物联网和智能设备开发的操作系统,提供高效、安全、智能化的解决方案。本文介绍了如何开通和使用阿里云的云服务器ECS,包括注册、选择操作系统、创建用户及授权等步骤。通过控制台,用户可以实时监控设备状态、管理组件、进行性能诊断,并优化资源使用。掌握这些功能有助于提升系统管理和数据处理能力,满足物联网场景的多样化需求。建议进一步丰富系统健康指标和观测功能,以提供更好的用户体验。
80 24
|
13天前
|
Linux
Linux od命令
本文详细介绍了Linux中的 `od`命令,包括其基本语法、常用选项和示例。通过这些内容,你可以灵活地使用 `od`命令查看文件内容,提高分析和调试效率。确保理解每一个选项和示例的实现细节,应用到实际工作中时能有效地处理各种文件查看需求。
44 19
|
11天前
|
人工智能 弹性计算 运维
深度评测阿里云操作系统控制台:功能全面,体验卓越!
阿里云操作系统控制台是阿里云提供的高效、稳定、易用的云运维管理平台,结合百万服务器运维经验,提供系统资源监控、问题分析和故障解决功能。用户可通过该平台进行ECS实例管理、组件安装、健康检查、系统诊断及订阅管理等操作,支持API、SDK、CLI等多种管理方式。其界面简洁明了,操作流程直观易懂,适合各层次用户使用。推荐指数:★★★★★(5/5)。
47 9
|
22天前
|
缓存 Linux
Linux查看内存命令
1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h • -h 选项:以易读的格式(如GB、MB)显示内存大小。 输出示例: total used free shared buff/cache available Mem: 15Gi 4.7Gi 4.1Gi 288Mi 6.6Gi 9.9Gi Swap: 2.0Gi 0B 2.0Gi • to
35 2
|
4月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
156 0
Vanilla OS:下一代安全 Linux 发行版
|
1月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
140 10
|
2月前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
152 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
2月前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
89 7