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


目录
相关文章
|
7天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
27 3
|
7天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
20 2
|
7天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
9天前
|
移动开发 人工智能 Android开发
移动应用与系统:探索移动开发与操作系统的协同进化####
当今数字化时代,移动设备已成为日常生活不可或缺的一部分。本文旨在深入探讨移动应用开发与移动操作系统之间的紧密关系及其相互影响,揭示技术创新如何推动这一领域的发展。通过分析当前主流移动操作系统的特点、移动应用的开发趋势以及两者间的互动机制,本文为开发者和用户提供了一个全面了解该领域的窗口。 ####
|
7天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
25 3
|
10天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
36 6
|
11天前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
22 7
|
6天前
|
开发工具 Android开发 iOS开发
移动应用与系统:涵盖移动应用开发、移动操作系统等相关话题####
本文深入探讨了移动应用开发和移动操作系统的复杂世界。从移动应用开发的基本概念到移动操作系统的核心功能,再到两者如何相互作用以提供无缝的用户体验,本文全面涵盖了这一领域的各个方面。无论你是开发者、技术爱好者还是普通用户,这篇文章都将为你提供有价值的见解。 ####
15 1
|
10天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
12 2