Shell脚本:
脚本主要是为了业务,辅助人工,实现自动化运维。
Shell脚本是介于用户和内核之间,充当的是翻译官。当用户执行相关的命令,Shell会把指令已二进制的形式传给内核,内核处理完毕之后通过shell把内核的执行结果,转换成人类能够识别的语言。
Linux中的shell的种类:
1、sh:已经被淘汰
2、bash:默认的shell,基于sh的扩展
3、csh:类c语言的shell
4、tcsh:整合csh的功能,包括一部分shell的功能
5、nologin:这也是一种shell,用于禁止用户登录主机
在默认情况下,我们使用shell都是bash
Shell语言又叫做脚本语言,主要用于控制软件和应用程序,一般都是以文本的形式保存,运行时才会编译。
Shell脚本的作用:
1、自动化运维
2、批量化重复操作
3、减轻管理人员的工作量
4、提高业务处理的速度
5、脚本写完之后,都是经过调试,没有问题才会上线部署,在配置过程中减少了出错的概率。
Shell脚本的构成:
主要由三部分组成:
1、脚本申明(解释器)
2、注释信息,shell脚本以#开头表示注释信息。注释掉的信息不会被执行,注释可以帮助工作人员更好的理解代码的架构。
3、可执行语句
shell脚本当中:所有linux的命令行可以执行命令,都可以作为脚本的可执行语句。
Shell脚本的执行方式:
赋权执行:给脚本执行权限
./first.sh
/opt/first.sh
chmod 777 first.sh
./执行当前目录下的可执行文件,但是这个文件必须要有执行权限。
直接执行:一般用于调试脚本的内容
bash firs.sh
sh first.sh
source:点命令,也就是符号,是bash的内部命令
重新执行刚修改完的初始化文件,可以让命令在配置文件中立刻生效,无需重启。
sh bash ./ 这三种都是运行,运行代码,反馈结果
source:执行,执行脚本中的命令。脚本当中的代码会被真正的执行。展示真正的结果。
重定向:
交互式硬件设备的执行方式:
标准输入:设备是键盘 输入的结果符合编码规范
标准输出:符合编码规范的命令,给与执行结果 设备是显示器
标准错误输出:不符合编码规范的结果,给与错误输出的执行结果,设备显示器
echo 123>123
重定向输出:>把标准输入保存到指定的文件中。会覆盖原有内容。
>>把标准输入保存到指定的文件尾部。相当于行末追加,不覆盖原有内容。
重定向错误输出:2>将错误信息保存到指定的文件,会覆盖原有内容。2>>不覆盖原有内容。
混合输出:&>既可以保存标准输出,也可以保存标准错误输出到指定的文件
&>> 不覆盖,追加
重定向输入:< 从指定的文件
shell的变量:
面向对象
变量:描述对象的属性或者参数。存放系统和用户需要使用的特定参数、值
变量的类型:int整数 string:字符串 布尔类 浮点
变量名称:有固定名称的变量,一般是系统预设。
自定义的变量名:不要使用系统命令来作为变量名、不要使用中文、不能使用特殊符号 _可以作为开头、
不要使用数字开头。不需要声明变量类型,直接赋值
变量赋值时,引号的用法:
强引用和弱引用:
打印变量时。加上""是弱引用,结果会被变量的值替代 加上''是强引用$test 会被认为是一个普通字符串
赋值变量时,双引号和单引号没有任何区别。
反撇号:``先执行反撇号当中的命令。然后再命令运行的结果赋值给变量。
自定义变量的类型:
一般自定义:a=1
只读变量:不可以被重新赋值readonly
read 通过命令获取内容,给变量赋值
read -p "提示字符" 变量名
变量的作用范围:
自定义变量只在当前shell中生效
全局变量(自定义):1、系统预设的全局变量,对所有用户都能生效
2、自定义全局变量
临时声明全局,只在当前shell生效
一般来说,我们自定义变量可能需要根据条件时常修改,以满足不同的条件,一旦作为全局变量,引用的值或者参数不需要变
全局变量所有人可以引用,会导致程序状态的不确定性
环境变量:
系统预设,用来设置用户的工作环境、自定义环境变量,用于满足个人需求的工作环境。可以随时创建,随时修改,随时删除
系统可以识别到用户所需的操作指定,可以直接运行调用
位置变量:命令行参数
在脚本运行时,从脚本的外部通过位置变量给脚本内部的程序传参
$n n1-9 10以上要用{}
传参的顺序是从左往右
$0,特殊的位置变量,表示命令自己
预定义变量:编译语言或者脚本解释器提供的,自动设置,自动更新,不能修改。
$* $@ @# $?
$* $@:表示命令或者脚本需要处理的参数。
$*:不加引号,会把参数一个一个处理,加了引号,会当成整体处理。
$@:无论加不加引号都会把参数一个一个的处理。
$*和$@不加引号的表现一致
$?:表示前一条命令的返回状态码,只有0是表示执行成功或者执行正确,非0,一律表示执行出现异常。
$#:特殊的自定义变量,统计一共传了多少个参数
Shell中变量的运算符:
运算符:+ - * / %(取余)
i++ 每次自增1,先赋值,再加一;++i 加了值之后再赋值