补充
- shell编程也算是一种编程语言
- 编程语言分类:解释型语言、编译型语言
- 解释器|编译器:通过解释或编译源代码在计算机上运行机器语言(即二进制0100)
- 解释器:源代码 - 读一行运行一行 -机器 (脚本) -shell、python、php
- 编译器:源代码 - 编译成中间语言 - 运行这个中间语言成机器语言 - java、C、C++、go
- shell解释器:/bin/bash
一、shell简介
- 虚拟机分内核态(内核层)和用户态(应用程序层)
- 用户无法直接和内核交互
- Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口
- 它接收用户输入的命令并把翻译后送入内核去执行
- Shell是命令解释器
- Shell是编程工具,是一种脚本语言

1.shell分类
linux支持很多shell类型作为shell语言的解释器
使用命令查看:cat /etc/shells
注:Linux中默认的shell是bash,放在/bin/bash里
2.shell脚本
编写脚本:
一个可编辑的文本编辑器
- 创建一个脚本文件,常以.sh为扩展名
- vim 脚本文件名.sh
一个能解释执行的脚本解释器
- 脚本第一行写入:#!/bin/bash
- #! 是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪种 Shell
二、第一个脚本
1.编写脚本命令
步骤一:创建shell脚本文件,一般以.sh结尾;
步骤二:脚本第一行固定写入:#!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
步骤三:编写要执行的shell命令
步骤四:编写完成,vim方式保存退出,执行脚本
方式一:使用bash命令调用
方式二:加执行权限,再通过路径调用
注:一定在脚本前加./,不然会认为是系统命令
2.echo命令
- cho命令是Linux中最基本和最常用 的命令之一;
- 传递给 echo 的参数被打印到标准输出中;
- echo通常用于 shell 脚本中,用于显示消息或输出其他命令的结果;
语法:echo [选项] 输出内容
- -n:取消输出内容后的换行符
- -e:支持反斜线控制字符的转换
注:!和\均为特殊符号,不能放在一起
\e的使用方式
- 格式:"\e[颜色代码m"代表颜色输出开始,\e[0m代表颜色输出结束;
- 其中,\e是转义起始符,定义一个转义序列;[表示开始定义颜色,后加颜色代码;m是转义终止符;可以进行多个设置,多个设置之间用分号(;)分割开,同时生效。
- 字体颜色:30-37;即:30=黑色,31=红色,32=绿色,33=黄色,34=蓝色,35=紫色,36=青色,37=白色
- 字背景颜色:以上颜色数字+10就会变成底色;即:40=黑色,41=红色,42=绿色,43=黄色,44=蓝色,45=紫色,46=青色,47=白色
- 特殊的显示:即:1设置高亮,4设置下划线,5设置闪烁,7设置反显,8设置消隐
3.练习
用脚本打印出七种颜色的hello world
三、bash的基本功能
补充:
- 调用历史命令
- 使用Tab键补全命令
- 设置别名
- 常用快捷键
- 输入输出重定向
- 多命令顺序执行
- 命令支持的通配符
- grep过滤文件中的字符串
- 其他特殊符号
1.历史命令
格式:history [选项]
- -c:清空历史命令
- -w:把缓存中的历史命令保存到历史命令隐藏文件.bash_history当中
注:当正常退出(logout、exit、ctrl+d)操作系统时,系统会自动将缓存的历史命令保存到文件里
实验:将history缓存中的命令写入到.bash_history命令文件当中,并清空缓存中的命令
注:这里-c情况的是命令缓存中的数据,实际命令文件中的数据并不受影响,依旧存在
2.历史命令的调用
- 使用上、下光标键调用
- 使用"!!",重复执行上一条命令
- 使用"!n",重复执行第n条历史命令
- 使用"!字符",重复执行最近一条以此字符开头的命令

3.使用Tab将命令或文件名补全
Tab键补全:
- 可以自动补全文件名、目录名、命令、命令选项(ls --help)、服务名等;
- 能提高用户的输入速度,也能提高准确性;
- 自动补全之前,输入的字符越多补齐的范围越小,就越精确;
- 使用的软件包:bash-completion;
- 注:补齐功能会在目录结尾处自动补上/符号,有时会导致系统识别出现问题,从而报错,如:xfsdump
4.命令别名的管理
- alias:查看系统中已经生效的别名
- alias 别名="原命令 [选项]"
- 删除:退出当前终端或删除别名------unalias 别名

注:此时如果想要查看mnt,使用ls就会变成切进mnt目录,因此alial命令别名不能随意设置
执行顺序:
- 用绝对路径或相对的方式执行命令
- 别名命令
- 根据环境变量PATH定义的目录顺序找到的第一个命令(有内置也有外部命令,具体用type区分)
实验:把sh脚本放在/usr/bin/目录下,就可以被视作是系统命令去使用,不用加./
注:用命令alias设置的别名是临时的,退出当前终端则不再生效
四、循环语句-for循环
实验:在shell脚本中写入for循环语句,以更加简短的命令打印七种颜色的hello world