​ shell是允许用户输入命令的界面,linux中最常用的交互式shell是Bash。

一、什么是shell

​ shell就是用户和操作系统内核之间的接口,起着协调用户和系统的一致性和在用户与系统之间进行交互的作用。

二、shell的功能

​ shell最重要的功能是命令解释,从这种意义上理来说,shell是一个命令解释器。

​ Linux系统中所有可执行文件都可以作为shell命令来执行。将可执行文件作为一个分类如下表。

类别 说明
Linux命令 存放在/bin,/sbin目录下
内指明了 处于效率考虑,将一些常用的命令的解释程序构造在shell内部
实用程序 存放在/usr/bin,/usr/sbin,/usr/local/bin等目录下的实用程序
用户程序 用户程序经过编译生成的可执行文件,也可以作为shelll命令运行
shell脚本 有shell语言编写的批处理文件

​ 当用户提交了一个命令后,shell首先判断它是否为内置命令,若是,就通过shell内部的解释器将其解释为系统功能调用并转交给内核执行;若是外部命令或使用程序,在硬盘中查找命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。

在查找一个命令时分两种情况

  • 1、用户给出了命令路径,shell就沿着用户给出的路线查找,若找到则调入内存,若没有找到则输出提示信息。
  • 2、用户没有给出命令的路径,shell就在环境变量OATH所指定的路径依次进行查找,若找到则调入内存,若没有找到则输出提示信息。

shell的功能

  • shell环境变量
  • 正则表达式
  • 输入/输出重定向和管道

三、shell环境变量

​ shell支持具有字符串值的变量

​ shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值。

​ 在命令行或shell脚本文件中使用$name的形式引用变量name的值

1.变量的定义和引用

​ 在shell中,变量的复制格式如下:name=string其中,name是变量名,它的值就是string。变量名以字母或下划线开头的字母、数字和下划线字符序列。

​ 在变量名前加引用变量的值,引用的结果就是用字符串string代替引用变量的值,引用的结果就是用字符串string代替引用变量的值,引用的结果就是用字符串string代替name的值。该过程也被成为变量替换。

>>> name = asdfsasdf
>>>echo $name
asdfsasdf

​ 在定义变量时,若string中包含空格、制表符和换行符时,则string必须使用"string"'string'的形式,即用单(双)将其括起来。双引号内允许变量替换,而单引号内则不可以。

​ 注:显示字符常量,要输出的字符串中没有特殊的字符,所以使用“”和‘’的效果是一样的。

>>>echo hello world
hello world
>>>echo 'hello world'
hello world
>>>echo "hello world"
hello world
>>> echo he's bag

​ 因使用特殊字符(’),由于‘不匹配,shell认为命令行没有结束,按enter键后出现系统第二提示符,让用户继续输入命令行,按ctrl+c组合键结束。

>>> echo "he's bag"
he's bag
>>> echo he\'s bag
he's bag

2.shell局部作用域

​ shell变量有着规定的作用范围。
​ shell变量分为局部变量和全局变量。

  • 局部变量作用范围仅仅限于命令行所在的shell或shell脚本文件中。
  • 全局变量作用范围包括本shell进程及其所有子进程。
  • 使用export内置命令将局部变量设置为全局变量。
>>> var1=linux
>>> var2=unix             当前shell中定义变量var1和var2
>>> export var2                设置var2为全局变量
>>> echo $var2
unix
>>> echo $$                    显示当前shell的PID
1702
>>> bash                   调用子shell
>>> echo ##                    显示当前shell的PID
1636
>>> echo $var1             var1没有宝贝export,所以在子shell中没有值>>> echo $var2              var2倍export,所以在子shell中仍然有值
unix
>>> exit
exit

3.环境变量

​ 环境变量是指由shell定义和赋初值的shell变量。
​ shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。
​ 所有环境变量都是全局变量,并可以由用户重新设置。

3-1Linux中常见的环境变量

  • PATH:指定明理路的搜索路径
  • HOME:指定用户的主工作目录(即用户登录到Linux系统中时,默认的目录)
  • HISTSIZE:指保存历史命令的条数
  • LOGNAME:值当前用户的登录名
  • HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
  • SHELL:值当前用户用的是那种shell
  • LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
  • MAIL:值当前用户的邮件存放目录
  • PS1:命令基本提示符,对弈root用户是#,对于普通用户是$
  • PS2:附属提示符,默认是“>”

直接使用set命令可以显示用户当前所有环境变量的设置。:set

3-2 输出变量PATH的值

>>> echo $PATH
.....
>>> PATH=/TMP/            修改PATH
>>> echo $PATH
/tmp/
>>> PATH=....         改回原来的
>>> echo $PATH
.....
>>> PATH=/tmp:$PATH       修改PATH变量,将一个路径/tmp加到PATH变量前
>>> echo $PATH
/tmp:......             在保存原有PATH路径的基础上进行了添加。shell在执行命令前,会先查找这个目录。

4.工作环境配置文件

​ shell环境依赖于多个文件的配置。用户并不需要每次登录后都对各种环境变量进行手工设置,通过环境设置文件,用户的工作环境的设置可以在登录的时候自动由系统来完成。环境设置文件有两种,一种是系统环境设置文件,一种是个人环境设置文件。

4-1 在系统中的用户工作环境设置文件(所有用户生效)

  • 登录环境设置文件:/etc/profile
  • 非登录环境设置文件:/etc/bashrc

4-2 在用户设置的环境设置文件(对用户自身生效)

  • 登录环境设置文件: $HOME/ .bash_profile
  • 非登录环境设置文件: $HOME/ .bashrc

*/etc/profile

*/etc/bashrc

profile
profile 是某个用户唯一的用来设置环境变量的地方, 因为用户可以有多个 shell 比如 bash, sh, zsh 之类的, 但像环境变量这种其实只需要在统一的一个地方初始化就可以了, 而这就是 profile.
bashrc
bashrc 是专门用来给 bash 做初始化的。比如用来初始化 bash 的设置, bash 的代码补全, bash 的别名, bash 的颜色. 以此类推也就还会有 shrc, zshrc 这样的文件存在了, 只是 bash 太常用了。

*$HOME/ .bash_profile

​ 用户每次登录系统时被读取,里面的所有命令都会被bash执行。用户自己定义的环境变量设置。

*$HOME/ .bashrc

四、正则表达式

1.grep命令

​ grep是“global search regular expression and print out the line”的简称,意思是全面搜索正则表达式,并将其打印出来。https://www.linuxcool.com/grep
​ grep命令用来在文本文件中查找内容。指定给grep的文本模式叫做“正则表达式”。它可以是普通的字母或数字,也可以使用特殊字符来匹配不同的文本模式。
grep ‘welcom’ file //从指定文件中查找含有字符串的行

2.正则表达式

​ Linux定义了一个使用正则表达式的模式识别机制。
​ 正则表达式使用了一些特殊字符,所以所有的正则表达式都必须使用单引号括起来。
​ 正则表达式字符可以包含某些特殊的模式匹配字符。

字符表达式 作用
. 匹配单个任意字符
[list] 匹配字符串列表中的其中一个字符
[range] 匹配指定范围中的一个字符
[^] 匹配指定字符串或指定范围中以外的一个字符
40

五、重定向

六、管道

七、shell脚本

​ shell是一种功能强大的编程语言,用户可以在文件中存放一系列命令,这被称为shell脚本或shell程序,将命令、变量或控制有机地结合起来将会得到一个功能强大的编程工具。
​ shell脚本语言擅长处理文本类型的数据。

1.脚本的内容

​ shell脚本是以行为单位的,在执行脚本的时候会分解为一行一行并依次执行。
​ 脚本中所包含的成分主要有注释、命令、shell变量和结构控制语句。

shell中用于流程控制的内置命令

命令 说明
text expr 或**[exp]** 用于测试一个表达式expr(如真、假)
if expr then command-table fi 用于实现单分支结构
if expr then command-table else command-table fi 用于实现双分支结构
case…case 用于实现多分支结构
for …do…done 用于实现******for******型循环
while…do…done 用于实现当型循环
until…do…done 用于实现直到型循环
break 用于跳出循环结构
continue 用于重新开始下一轮循环

2.脚本的建立与执行

​ 用户可以使用vim编辑shell脚本文件。
​ 一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:
#!/bin/bash#!/bin/sh
注意
​ (1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。
​ (2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。

2-1 执行方式1

​ 将文件名作为shell命令的参数,调用格式:#bash script_file当被执行脚本文件没有可执行权限时使用。

>>> bash test.sh
>>> sh test.sh

2-2 执行方式2

​ 在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限改为可

执行(即文件权限属性为x位)。
具体方法为:chmod a+x script-name。然后通过执行脚本绝对路径或者相对路径

就可以执行脚本。

​ 注意:在生产环境中,运维人员由于忘记为该脚本设置可执行权限,然后直接使

用,导致出错。

>>> chmod a+x test.sh
>>> /tmp/test.sh
>>> ./test.sh

2-3 执行方式3

​ source script-name或者. script-name
​ source或者“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。
注意:这是和其他几种执行shell方式的最大不同。

>>> source test.sh
>>> . test.sh
test.sh
>>> /tmp/test.sh
>>> ./test.sh

2-3 执行方式3

​ source script-name或者. script-name
​ source或者“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。
注意:这是和其他几种执行shell方式的最大不同。

>>> source test.sh
>>> . test.sh

Linux系统管理16:shell相关推荐

  1. Linux系统管理 4 Shell的基本应用

    目录 一.Shell命令概述 1.Shell 简介 2.常用的Shell命令 1.目录的创建与删除命令 2.改变工作目录命令cd 3.显示路径的命令 4.显示目录内容命令ls 5.显示文件内容命令 6 ...

  2. Linux编写脚本监控系统负载,linux系统管理-编写Shell脚本监测服务器状态

    --为了持续观察服务器每天的基本运行状况,提供方便易读的集中的日志记录数据,需要结合Shell脚本和计划任务设置,定期记录不同时间段服务器的CPU负载.内存和交换空间.磁盘使用率等各种信息 需求描述 ...

  3. 基本BASH SHELL脚本命令——Linux系统管理命令-检测程序、检测磁盘空间

    详细介绍Linux系统管理命令,演示如何通过命令行命令来探查Linux系统的内部信息 一.监测程序 Linux系统管理员面临的最复杂的任务之一就是跟踪运行在系统中的程序--尤其是现在,图形化桌面集成了 ...

  4. 【Linux系统管理】10 Shell 基础概念篇

    一 Shell 概述 1.1 什么是 Shell Shell 只要可以实现功能(不考虑效率的情况)即可.Shell 需要对 Linux系统比较熟悉才能使用得当. Shell 编程主要为了帮助运维人员实 ...

  5. linux系统管理试卷必修B卷,2013-2014Linux系统管理试卷

    2013-2014Linux系统管理试卷 德州科技职业学院2013-2014学年度 第二学期 <Linux系统管理>期末考试题 7. . 当使用mount进行设备或者文件系统挂载的时候,需 ...

  6. Linux系统管理和维护常用命令

    Linux系统管理和维护常用命令 Linux系统管理和维护常用命令 ls 命令 功能说明 ls 命令显示指定工作目录下的内容,列出工作目录所包含的文件及子目录. 语法结构: ls [选项] [路径或文 ...

  7. 《Linux系统管理与应用》课程知识点整理+书后习题全文解答(Linux知识点大纲)

    目录 第一章:Linux操作系统概述 知识点整理部分 课后习题与参考答案 第二章:Linux系统的环境搭建 知识点整理部分 课后习题与参考答案 第三章:Linux操作基础 知识点整理部分 课后习题与参 ...

  8. linux操作系统 第11章 linux系统管理

                                                                                      第11章    Linux系统管理 ...

  9. 12. linux系统管理(1)

    目录 12.1 Linux进程管理 什么是进程和程序 进程管理的作用 12.2 Linux进程启动的方式有几种? Linux手工启动进程 Linux调度启动进程 12.3 Linux如何查看正在运行的 ...

最新文章

  1. dubbo服务发布一之服务暴露
  2. linux显示磁盘使用情况命令,Linux显示磁盘使用率信息(iostat)
  3. TensorFlow 损失函数
  4. 追MM与Java的23种设计模式
  5. 【PC工具】创客、arduino爱好者必备,最最简单好用硬件电路连线绘图工具Fritzing...
  6. EChart 标题 title 样式,x轴、y轴坐标显示,调整图表位置等
  7. 漫画:程序员之间的真爱,好暖啊!
  8. OpenLDAP 2.4.44 安装 + phpLDAPadmin 安装
  9. 道了 14 年歉的扎克伯格,继续犯错的 Facebook
  10. 数据遍历打印得小列子
  11. Python使用正则爬取51job
  12. 微信公众号开发之消息模板
  13. 卸载软件-Uninstall Tool(无残留)
  14. 忘记teamviewer密码怎么办?
  15. php 计算字数,实现word一样的字数计算
  16. 无痕埋点在Android中的实现
  17. 《深入理解计算机系统》实验二Bomb Lab
  18. 报错Could not find a version that satisfies the requirementAnaconda历史版本清华镜像
  19. win7计算机快速打开,快速开启Win7控制面板三大方法
  20. 擦亮双眼识别网线真假优劣

热门文章

  1. Happy Father's Day 告诉父亲你爱他
  2. Revit启动后,如何把你的命令显示在Revit的Ribbon(工具栏)上?
  3. 2020高考一轮复习数学:必修1集合的概念及运算【经典例题及解析】
  4. 人工智能基础——为什么逻辑学中“假推真”、“假推假”永远是真命题?
  5. 用java做日记本系统_jsp+servlet开发java web个人日记本系统
  6. 分布式秒杀 - 实战
  7. 蜻蜓FM信息流推荐探索与实践
  8. Swagger2 3.0的使用
  9. 深入C++对象模型(1) -- C++的三种模型
  10. 数据分析可视化之模型介绍