什么是shell
shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行
(比如说你要播放音乐,你的计算机通过你的shell输入的打开音乐的命令,shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者)
shell介于系统内核与用户之间,负责解释命令行
shell脚本的概念
- 将执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合个种shell控制语句以完成更复杂的操作
shell脚本的应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
Linux中有哪些shell
查看/etc/shells这个文件
- bash:基于GNU的框架下发展出来的shell
- csh:语法有点类似于c语言的shell
- tcsh:整合了csh,提供更多的功能
- sh:已经被bash所替代
- nologin:奇怪的shell,这个shell无法登录主机 注:bash是目前大多数linux采用的默认shell
shell脚本的作用
- 自动化运维
- 批量化重复操作可以编写脚本结合计划任务自动周期运行
- 减轻管理员工作量
- 提高处理文本文件的速度
- 避免配置出错
shell脚本的构成
- 脚本声明(解释器):第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
- 可执行语句:比如echo命令,用于输出“”之间的字符串
重定向操作
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出的数据
- 标准错误:通过该设备报告执行出错信息
注由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道。
管道符“|”
作用
- 将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象)
- 同一行命令中可以使用多个管道符
重定向
shell变量
变量的作用
用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量,只读变量,位置变量,预定义变量
变量名要求
- 区分大小写
- 只能以字母或下滑线“_”
- 命名只能使用字母、数字和下划线“_”组成
自定义变量的方法
直接赋值(变量名=变量名)
赋值时使用引号的效果
- // 双引号——允许通过 $ 符号引用其他变量值
- //单引号——禁止引用其他变量, $原样显示
- //反撇号——命令替换,提取命令执行后的输出结果 和$(命令)作用相同
键盘输入为变量赋值(read)
-
read 变量名(没有提升信息)继续输入变量值即可赋值
-
read -p (显示提示信息) 可追加输出需要显示的提示信息
删除变量(unset)
自定义变量作用范围
-
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。
-
可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。(命令格式:export 变量名)
自定义变量永久启动
在/etc/profile(全局配置文件)中添加 export 变量名
变量的算术运算
整数变量的算术运算(Shell 默认只支持整数运算)
使用整数变量的算术运算赋值
-
变量=$((数值或变量1 运算符 数值或变量2))
-
变量=$[数值或变量1 运算符 数值或变量1]
-
变量=$(expr 数值或变量1 运算符 数值或变量2)
-
let 变量=数值或变量1运算符数值或变量2 (数值与运算符之间不需要空格)
环境变量
命令:env(查看到当前工作环境下的环境变量)
更多工行建行股份回购已经以哦米见过忽然
只读变量
命令格式
readonly 变量=变量值
在配置文件中添加只读变量
位置变量
shell脚本执行命令操作时会带有很多变量$n,文件中执行的n数值依次递增,用于代表某个位置的变量