🌷🍁 博主 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) 复合命令(命令组)
- 管道形式:管道前后的命令任意组合、同时运行, 形成功能更强大灵活的复合命令.
- 圆括号形式:括号内的命令任意组合、顺序执行,且由一个子shell来单独控制运行, 相当于一个小的功能程序. 方便灵活, 运行效率高.
- 复合命令:管道(用符号“|”表示)用于连接两条命令,把第一条命令的运行结果传送给第二条命令作为其运行参数。
(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.管道的作用是什么?管道前后两条命令之间的关系是什么?
答:管道用于连接两个命令, 它把前一个命令的标准输出重定向给后一个命令作为标准输入。
- 如何设置一个变量?如何清除一个已有的变量?
答:创建变量:变量名通常由一个字母后跟零个到多个字母、数字或下划线组成。例如:
$ AA = 123
清除变量:当变量不再使用时,使用unset命令来清除变量。例如:
$ unset AA
原创声明
=======
作者: [ libin9iOak ]
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,共同成长。