本章结构
Shell脚本概述
Shell的作用
Shell编程规范
重定向与管道
Shell脚本变量
自定义变量
特殊变量
Shell脚本概述
Shell脚本的概念
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种Shell控制语句以完成更复杂的操作
Shell脚本应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
......
shell 的作用
Linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
常见的shell 解释器程序有很多种,使用不同的shell时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells文件可以了解当前系统所支持的shell 脚本种类。
注: nologin:奇怪的shell,这个shell可以让用户无法登录主机。
bash ( /bin/bash)是目前大多数Linux版本采用的默认shell。
为什么我们的系统上合法的shell要写入/etc/shells这个文件?
这是因为系统某些服务在运行过程中,会去检查用户能够使用的shells,而这些shell的查询就是借由/etc/shells这个文件。
用户什么时候可以取得shell来工作?还有我这个默认会取得哪一个shell?
shell脚本具体能干什么
自动化完成软件的安装部署,如安装部署虚拟机(PXE)
自动化完成系统管理,比如批量的增添用户
自动化完成备份,如数据的自动备份(按时,时间可以自己设置)
等等
shell脚本的使用场地
在需要完成大量复杂、重复性的工作时,不需要在命令行重复执行命令,直接运行shell脚本即可,大大的节省了时间提高了效率(顺便还能摸个鱼)
如何学习shell脚本
熟悉掌握各种linux命令
掌握脚本的标准格式
掌握脚本的基本语法
shell脚本的构成
第一行为"#! /bin/bash" ,脚本申明(默认解释器):表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如#! /usr/bin/python、# !/usr/bin/expect
注释信息:以"#“开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行
创建shell 程序的步骤:
第一步:创建一个包含命令和控制结构的文件。
第二步:在编辑完后修改这个文件的权限使它可以执行 #使用chmod +x dome.sh
第三步:检查语法是否有误(命令集合是否正确)
第四步:执行./dome.sh
shell脚本的执行通常有以下几种方式
方法一:当前路径(决定路径与相对路径)下执行脚本(要有执行权限)
/home/dome.sh或者./dome.sh
方法二:sh、bash脚本文件路径(这种方式可以不对脚本文件添加执行权限)
bash dome.sh或sh dome.sh
方法三: source脚本文件路径(可以没有执行权限)
source dome.sh
方法四:其他方法
sh < dome.sh或者cat dome.sh l sh (bash)
例如:
执行命令的方法:
这条命令需要进行授权才可运行(chmod +x dome8.sh)
source脚本文件路径(可以没有执行权限)
第四种方法
总结:推荐使用还是通过授权才可运行的命令
第二个例题:将vim里的内容加入下方的东西
前面已经授权过了 所有这地方就不用授权可以直接用
当运行完脚本会发现下方的内容会以非常醒目的方式来显示
重定向与管道操作
重定向与管道操作
交互式硬件
设备标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | 标准输出 | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > >> | 将输出结果保存到指定的文件(覆盖原有内容) 将输出结果追加到指定的文件尾部 |
标准错误输出 | 2> 2>> | 将错误信息保存到指定的文件(覆盖原有内容) 将错误信息追加到指定的文件中 |
混合输出 | &> | 将标准输出、标准错误的内容保存到同一个文件中 |
重定向输出
重定向输出指的是将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上。
重定向输出使用">"或">>"操作符号,分别用于覆盖或追加文件
做个实验看一下重定向输出(会覆盖原内容)
追加
重定向输入
重定向输入指的是将命令中接收输入的途径由默认的键盘改为指定的文件,而不是等待从键盘输入。重定向输入使用"<"操作符。
通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成。
当输入0时代表输入文本结束(把cat << 输入的内容输出到1.txt中)
默认情况下, cat命令会接受标准输入设备(键盘)的输入,并显示到控制台,但如果用文件代替键盘作为输入设备,那么该命令会以指定的文件作为输入设备,并将文件中的内容读取并显示到控制台
错误重定向和混合重定向
错误重定向指的是将执行命令过程中出现的错误信息(如选项或参数错误等)保存到指定的文件,而不是直接显示在屏幕上。错误重定向使用"2>"操作符
2个作用:
在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据还可以将无关紧要的错误信息重定向到空文件/dev/null 中,以保持脚本输出的简洁。
使用"2>"操作符时,会像使用">"操作符一样覆盖目标文件的内容,若要追加内容而不是覆盖文件,则应用"2>>”操作符
例如:
没有应错误重定向,a.txt里是看到的正确内容
应用了错误重定向,a.txt里显示的是错误信息
还可以将正确的内容输入到s.txt中,将错误文件也一同放入,需要运用2>&1
下面是演示(&>和>&符号。&表示等同于的意思)
管道符号操作
管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号"I"左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
在 shell 脚本应用中,管道操作通常用来过滤所需要的关键信息。
过滤出df-Th中以\结尾然后打印出第6列
a相当于一个软连接,输出$a相当于输出a=后的命令
管道符“|“有一种常见的方式(就是查看有没有安装此服务)
shell变量
Shell变量的作用
类型变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
用echo查看和引用变量的值
通过在变量名称前添加前导符号"$",可以引用一个变量的值,使用echo命令可以查看变量,可以在一
用echo 命令中同时查看多个变量值
列1:给name定义变量用echo给name加上$即可
例2:当定义的变量和后续的其他字符发生冲突时可以用”{}为引用变量”将其括起来否则将无法确定正确的变量名称。对于未定义的变量,将显示为空值
不加则不会显示
python的版本号:需要先定义 ,不定义只会显示后面的数字
小扩展echo
-n不换行输出
-e输出转义字符:将转义后的内容输出到屏幕上,
\n换行
\c后面的内容不显示
\t表示插入,会在同一行表示
加了\失去了别名的功能
整数变量的运算expr
expr变量1 运算符 变量2[运算符 变量3]...
常用运算符
加法运算:+
减法运算:-
乘法运算:\*
除法运算:/
求模(取余)运算:%。 :取余数是指整数除法中被除数未被除尽部分,且余数的取值范围为0到除数之间(不包括除数)的整数
下面两种格式也可以运算:
括号里的X Y要进行赋予变量
export设置全局变量
其中第三行为设置全局变量、进入bash进行测试如显示则设定成功
赋值使用的引号
双引号(" )
双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来;其他情况下双引号通常可以省略
单引号( ’)
当要赋值的内容中包含$,",\等具有特殊含义的字符时,应使用单引号括起来。在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。输入什么就显示什么
反撇号(` )
反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。
下面的方式是将两种变量合并成“liu”进行运行
特殊的shell变量
环境变量
由系统提前创建,用来设置用户的工作环境
配置文件: /etc/profile,-/.bash_profile
常见的环境变量
PWD, PATH
USER,SHELL, HOME
只读变量
用于变量值不允许被修改的情况
位置变量与预定义变量
$# | 表示命令行中位置参数的个数。 |
$* | 表示所有位置参数的内容,这些内容当做一个整体 |
$e | 表示列出所有位置参数,但是是以单个的形式的列出 |
S? | 表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。 |
$0 | 表示当前执行的脚本或程序的名称 |
$$ | 表示返回当前进程的进程号 |
$! | 返回最后一个后台进程的进程号 |
$n | n 为数字,$0 代表命令本身,$1〜$9 代表第 1〜9 个参数,10 以上的参数需要用大括号包含, 如${10} |
例如:
进入vim编辑器里
对其进行授权,在运行时vim里面输入了(echo $1)也就代表第一位置的参数
这张图在加上文中的字会不会更明白些?
小玩具:上课点名脚本(我写可能比较麻烦)
第一步:需要先创建一个文件里面要加入名字(几个冤种就行)
第二布:进入vim编辑器去编辑
第三步授权
第四步就可以点名了
本章总结
Shell的作用与应用场景
Shell脚本的编写规范与执行方法
重定向与管道的作用与使用方法
自定义变量赋值时单引号、双引号、反撇号的使用方法
数值变量的常用运算符:+、\*、-、/、 %
环境变量、只读变量、位置变量、预定义变量的用途