Shell

Shell

shell —— 壳,保护内核

Shell 作用

  • 完成用户和内核之间的信息交换 —— 翻译工具,命令解释器

Shell 即命令解释器

  • Shell 是系统提供给用户的操作界面,提供了用户与内核进行交互操作的一种接口,它解释由用户输入的命令并且把它们送到内核执行任务
  • 不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 Shell 命令组成的程序
  • Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支、控制结构等,用这种编程语言编写的 Shell 程序与其它应用程序具有同样的效果

注:不同系统有不同的命令解释器,同一个系统命令解释器也有不同版本

补充说明

  • Shell 有自己的语法结构,Shell 解释的命令实际就是一些符合 Shell 编程语言的程序

程序和进程的区别

  • 程序是一段可以实现某一功能的代码,进程是这段代码运行的过程
  • 程序是静态的文件状态、进程是这段程序运行的过程 —— 由命令解释器运行程序,将程序变成进程

编程语言 —— shell 是一种面向底层操作系统的编程语言

  • Shell 语言、C、PHP、Python、Java、、、—— 有计算能力、流程控制

注:html 是一种语法,严格意义来说不具备编程语言的特征,主要是网页的样式设计

系统的包含关系 —— 硬件 --》内核 --》shell 解析器 --》应用程序

  • 内核建立在硬件的 CPU 以及内存的基础上运行,CPU 由运算器和控制器组成 —— 冯诺依曼
  • 内核在运行过程中,所执行的任务由命令或应用程序来控制,而命令的转换过程由 shell 完成 —— 解释命令

学习 Shell 脚本的目的

  1. 减少用户手动执行命令而产生的错误
  2. 减少重复性工作,让脚本来替管理员来完成重复性工作,提高效率 —— 编写脚本自动工作

简化重复操作,降低出错概率,是服务器管理的一大助力 —— 脚本

Shell 类型

查看当前系统兼容的 shell 类型 —— /etc/shells

  • cat /etc/shells —— 查看当前系统兼容的,能识别的解释器类型
    • /bin/sh --》/usr/bin/sh
    • /bin/bash --》/usr/bin/bash
    • /bin/tcsh、/bin/csh

注:/etc/shells 是系统所识别 shell 类型的配置文件,可以在其中添加或删除 shell 类型

说明

  • /bin/sh 是 /bin/bash 的前身:为了兼容之前的版本,所以 sh 的 shell 类型依然存在
  • /usr/bin/ 和 /bin/ 是同一个目录 —— 软链接
  • /bin/tcsh 和 /bin/csh:操作系统一般使用 C 语言开发,Linux 内核是 C 语言写的,所以对 C 支持

注:软链接后加上 “/” 后 “ls -l” 命令会显示软链接的对应原文件的信息,删掉结尾的 “/” 或者直接在软链接所在目录使用 “ls -l” 即可查看它是软链接

注:目录是不允许由用户创建硬链接的,但实际上 Linux 支持目录创建硬链接,每个目录自带的 “.” 和 “…” 就是硬链接,代表当前目录和上级目录 —— Linux 操作系统的一个保护机制

用户登录 shell 类型

  • /bin/bash
  • /sbin/nologin —— 特殊的解释器,是配置文件中可以后续增加的解释器选项

说明

  • /etc/shells 是 Linux 可以支持识别哪些命令解释器的配置文件,可以进行编辑
  • 在 /etc/shells 中添加 /sbin/nologin 后,系统就可以识别、调用 /sbin/nologin,完成一些工作和任务

Shell 类型的分类

Shell 类型易学性可以执行编辑性快捷性
Bourne shell(sh)容易较差较差
Bourne Again shell(bash)较好
C shell(csh)较难较好较好
TC shell(tcsh)

Bash Shell 说明

  • Linux 中 shell 有多种类型,其中最常用的几种是 Bourne shell 系列和 C shell 系列
  • Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用
    • Bourne shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做的不如其它几种 shell
  • Linux 操作系统默认的 shell 是 Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash
    • 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加、增强了很多特性
  • Bash 放在 /bin/bash 中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能
    • 它还包含了很多 C shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面

bash shell 提供的功能 —— 提供了哪些便捷功能

  1. history,历史命令记录,这是 bash shell 解释器提供的命令记录功能,历史命令保存在指定配置文件中
  2. alias,别名,命令别名,实现将某些命令简化或把命令和选项进行结合、转义等功能
  3. tab,命令和目录的自动补全功能、、、

两种 Shell 脚本执行方式

  1. 添加执行权限:chmod +x *.sh —— 被动模式
    • 给予可以执行权限,执行时再找到解释器执行
    • 编写脚本的开头需要声明解释器类型:#!/bin/bash
  2. 使用解释器加载脚本:bash *.sh —— 主动执行
    • bash 就是命令,使用命令将脚本中的代码加载到解释器中执行

注:使用 bash 可以主动加载没有 x 权限的脚本 —— 测试

Shell 脚本

Shell 中使用的工具 —— echo 命令

Shell 脚本的本质

  • 可以将由人手动管理服务的过程变成程序自动执行
    • 比如每次新装的操作系统都要重复进行的操作:yum 源配置、ip 地址设置、、、
  • 将平时执行的命令罗列到脚本中,辅以一些自动化功能

echo 命令

  • 格式:echo [选项] [输出内容]
    • -e —— 支持反斜线控制的字符转换(转义字符)
    • -n —— 取消输出后行尾的换行符号

例:编辑 vim hello.sh --》#!/bin/bash、echo “hello world” --》然后执行 bash hello.sh

#!/bin/bash
echo "hello world"				# bash hello.sh --》hello world

echo -e 选项支持的特殊符号

  • \a —— 输出警告音(声音的输出)
  • \b —— 退格
  • \c —— 取消输出行末的换行符,和 “-n” 选项功能一致
  • \e —— ESCAPE 键
  • \f —— 换页符
  • \n —— 换行
  • \r —— 回车键
  • \t —— 制表符,tab
  • \v —— 垂直制表符
  • \0nnn —— 按照八进制 ASCII 码表输出字符。其中 0 为数字零,nnn 是三位八进制数
  • \xhh —— 按照十六进制 ASCII 码表输出字符。其中 hh 是两位十六进制数

注:0 开头的数字表示八进制数,chmod 00755 file —— 第一个 0 表示八进制,第二个 0 表示取消特殊权限

例:将字符 “abcdef” 六个字符以两行三列输出,中间用制表符

echo -e "a\tb\tc\nd\te\tf				# 两行三列,制表输出
a	b	c
d	e	f

注:“\n” 和 \t 表示转义字符,代表换行和 tab,注意一定要加 -e 选项才支持识别 “\” 的字符转义功能

补充:

  • \\ —— 输出 “\” 字符 —— “\” 作为特殊符号的功能是强制换行

如:find 命令最后的选项 -exec {} ; —— “\” 作用是取消命令的别名

如:rm 命令存在 “rm -i” 的别名,\rm —— “\” 会注释掉 rm 的别名,使用命令本身的含义执行

echo 显示颜色

  • 格式:“\e[m” 代表颜色输入开始,“\e[m” 代表颜色输入结束
  • 文字颜色:
    • 30 = 黑色、31 = 红色、32 = 绿色、33 = 黄色、34 = 蓝色、35 = 紫色、36 = 天蓝、37 = 白色、39 = 结束
  • 底纹颜色:
    • 40 = 黑色、41 = 红色、42 = 绿色、43 = 黄色、44 = 蓝色、45 = 紫色、46 = 天蓝、47 = 白色、49 = 结束

echo 特殊的显示

  • \e[0m —— 关闭所有属性
  • \e[1m —— 设置高亮度
  • \e[4m —— 下划线
  • \e[5m —— 闪烁
  • \e[7m —— 反显
  • \e[8m —— 消隐

例1:输出字符 “hello world” 并设置输出字符颜色为红色

echo -e "\e[31mhello world\e[0m"	#\e[0m 表示结束所有的颜色或格式输出

例2:输出字符 “hello world” ,设置字符高亮显示,且颜色为红

echo -e "\e[31;1mhello world\e[0m"	#特殊的显示,结合显示颜色

注:多个条件之间用分号 “;” 分割,可以同时生效

创建一个合格的 shell 脚本

[root@localhost ~]# vim hello.sh
#!/bin/bash
#This is my first piece of code
#Author(Email):liuchuan_jy@163.com

echo "We will print hello world of 7 colors."
echo -e "\e[30;1mhello world\e[0m"
echo -e "\e[31;1mhello world\e[0m"
echo -e "\e[32;1mhello world\e[0m"
echo -e "\e[33;1mhello world\e[0m"
echo -e "\e[34;1mhello world\e[0m"
echo -e "\e[35;1mhello world\e[0m"
echo -e "\e[36;1mhello world\e[0m"

注:vim hello.sh —— .sh 是命名规范,可写可不写,但 vim 会以后缀名识别脚本格式,显示字符串高亮

执行 shell 脚本 —— 两种方式

  1. 添加 x 执行权限(相对或绝对路径执行)

    [root@localhost ~]# chmod +x hello.sh
    [root@localhost ~]# ./hello.sh
    
  2. 用 bash 命令,调用脚本文件

    [root@localhost ~]# bash hello.sh
    

说明:执行一个脚本只有以上两种方式,主动通过 bash 命令执行,或者添加权限通过脚本声明的 shell 执行

补充:. hello.sh 或 source hello.sh 会将脚本加载到当前 shell 执行 —— 可加载配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值