shell脚本概述
shell的作用
Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。
通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类
linux 中常见的shell
bash:基于GUN的框架下发展的shell
csh:类似C语言的shell
tcsh:整合了csh 提供了更多功能
sh:已经被bash替换
nologin:使用户无法登陆
bash(/bin/bash)是目前大多数 Linux 版本采用的默认 shell。
bash特性:
支持快捷键:比如 ctrl+c 强制终止进程 、 ctrl+l 清屏 、Tab补齐 等等。
支持查看历史命令(history)
支持别名(alias)
标准输入和标准输出的重定向
管道符
文件名通配机制
支持命令hash
支持变量
Shell脚本应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
Shell脚本概念及构成
第一行:脚本申明,调用使用的语言,默认以/bin/bash执行
第二行:注释信息: 以#开头的语句表示注释信息,被注释的语句在运行脚本中不会被执行
第三行:可执行代码内容
脚本执行逻辑及执行方式
脚本执行逻辑
顺序执行:程序按从上到下顺序执行
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
循环执行:程序执行过程中需要重复执行多次某段语句
执行脚本时的shell环境
source和 . 执行脚本时,会在当前shell环境中执行脚本。
bash、绝对路径、相对路径 执行脚本时,会创建一个子shell环境,并在这个子shell环境中执行脚本。
不建议使用source来执行脚本,可能会影响一些资源配置。
脚本中的空白行会被解释器忽略。
脚本中,除了shebang,余下所有以#开头的行,都回被视作注释行而被忽略。此即为注释行。
重定向与管道符
标准输入与标准输出
交互式硬件设备:
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 操作符 用途
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出 > 将输出结果保存到指定的文件(覆盖原有内容)
重定向输出 >> 将输出结果换行添加在文件尾部
重定向错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容)
重定向错误输出 2>> 将错误信息追加到指定的文件中
混合输出 &> 将标准输出、标准错误的内容保存到同一个文件中
管道符
管道符的作用是连接两个命令,将第一个命令的标准输出作为第二个命令的标准输入。 同一行命令中可以使用多个管道符xx| 管道符右边的命令如果需要执行对象,则需要在命令前添加xargs。
shell脚本变量简介
变量是计算机语言中能储存计算结果或能表示值的抽象概念。保存将来会变化的数据,即使数据变化,直接调用变量即可。
Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。
变量的作用:
用来存放系统和用户需要使用的特定参数(值)。
变量名:使用固定的名称,由系统预设或用户定义。
变量值:能够根据用户设置、系统环境的变化而变化。
定义变量: 变量名=变量值
我们也可以使用 read 变量名
引用变量: ¥变量名或 ${变量名}
查看变量:
echo $变量名:查看单个变量
set:查看所有变量,包括局部变量和环境变量
取消变量: unset 变量名
变量的类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改 有些规定好的变量 放在那里让你使用
自定义变量
要求:
区分大小写
不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
只能使用数字、字母及下划线,且不能以数字开头
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
大驼峰 StudentFirstName
小驼峰 studentFirstName
下划线 student_name
定义与查看变量
定义变量
变量名以字母或下划线开头,区分大小写,建议全大写
变量名=变量值
查看变量值
echo $变量名
预定义变量
预定义变量是系统定义好的变量,用来保持脚本程序的执行信息。
可以直接使用这些变量,不能直接为这些变量赋值。变量 | 作用 |
$? | 表示前一条命令执行后的返回状态。返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常。 |
$* | 表示所有位置参数的内容。当整体返回。(将输入的参数作为一个单词) |
$@ | 表示所有位置参数的内容。当个体返回。可作为数组。(将参数内容分割成n份,每份作为独立个体) |
$# | 表示命令行中位置参数的总个数。 |
$0 | 表示当前脚本名称(如果是软链接,显示当前软链接文件名)。 |
$_ | 表示在此之前执行的命令或脚本的最后一个参数。 |
$$ | 获取当前进程的PID。 |
$* 和 $@的区别:
不加双引号的话,$* 和 $@ 都代表脚本后面跟的所有参数。
加上双引号的话,"$*"会把所有参数当作一个整体去看待(此时参数数量为1),"$@"会把脚本后面跟的每一个参数当作一个个体去看待。