文章目录
前言
一、shell基本概念
概念
应用范围
shell的原理
二、编写shell脚本
1.shell脚本格式
2.脚本文本的权限
3 管道符号和重定向
三 shell中的变量
1 变量的作用
2变量的类型
3 定义一个变量
自定义变量
键盘输入为变量赋值
4变量的作用范围
整数变量的计算
特殊的shell变量
环境变量
位置变量
预定义变量
浮点运算
前言
shell脚本是一种基于Linux开发的语言,可以在许多场景下执行自动化操作,完成重复性操作。
一、shell基本概念
概念
shell脚本形式上是一个将要执行的命令顺序保存到一个文本文件 该文件同样要赋予一定的权限才可以去执行(Linux文件的三个属性),可以去结合shell控制语句以完成更复杂的操作。
应用范围
shell在Linux的应用很广泛,比如高度重复的操作,交互性的任务,批量事务处理,服务运行状态监控,定时任务服务。
shell的原理
这个在之前的博客说过,shell是用户和系统的翻译器,他将用户的指令翻译为二进制语言,然后交给内核或者程序 程序去调用内核或者内核直接去调用硬件去执行的用户要求的程序。
用户默认登录Linux使用的都是shell程序,一般为/bin/bash。 不同shell环境的内部指令 运行环境等会有所区别。
图为Linux的几种默认shell环境
二、编写shell脚本
1.shell脚本格式
在Linux中编写shell脚本,是用vim文件编辑器对文件进行编辑 每行一条命令去执行
echo是向文本框输入一个文本 前一行跟上指令,
创建文件
写入脚本
给写的脚本文件提取相应的权限 否则无法执行文件。
执行脚本 echo输出结果。
2.脚本文本的权限
前面说过 如果文件没有执行权限是无法执行 但权限给与不止一种方法,方法一共有四种
第一种 就如上图说的方法 用chmod +x 来给与权限
这里要注意路径 绝对路径和相对路径
第二种 也是使用chmod 777来给与权限 但是777权限过大 可以根据实际情况来给与 一般给个644即可
第三种 使用shell来解释脚本 不要求文件要求x的权限
第四种 使用source脚本文件路径 直接执行
3 管道符号和重定向
交互式硬件设备有三种交互模式 标准输入 标准输出 标准错误
标准输入是从该设备接收用户输入的数据。设备文件为/dev/stdin 文件描述编号0 默认设备为键盘。
标准输出是通过该设备向用户输出数据。设备文件为/dev/stout 文件描述为1 默认设备为显示器。
标准错误通过该设备报告执行出错信息。设备文件为/dev/sterr文件描述为2 默认为显示器。
管道符号在之前的Linux就使用过 配合命令来进行过滤
将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中使用多个管道。
重定向操作
重定向输入 操作符 重定向输入操作符>表示将标准输出结果 保存到指定的文件,并且覆盖原有内容. >>表示将标准输出结果追加到指定的文件的尾部,不覆盖原有内容
标准错误输出 2> 将错误信息保存到指定的文件,并且覆盖原有内容。2>>将错误信息 追加到指定的文件的尾部,不覆盖原有内容。
混合输出操作符 &>将标准输出,标准错误保存到同一文件中
2>&1将标准错误输出重定向到标准输出。
例如使用echo把密码重定向到密码文件
也可以反向去提取密码来修改密码。
三 shell中的变量
1 变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量由变量名和变量值组成
变量名使用固定的名称,由系统预设或者用户自定义
变量值能够根据设置,系统环境的变化而变化
2变量的类型
自定义变量:由用户自己定义 修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量。
环境变量由系统维护,用于设置工作环境
位置变量通过命令行给脚本程序传递参数
预定义变量:bash中内置的一类变量,不可直接修改。
3 定义一个变量
变量的格式为变量名=变量值
变量命名规则:以字母或者下划线开头,区分大小写。
echo输出变量 可以输出多个变量。
自定义变量
自定义变量是使用双引号来赋值
“”允许通过$符号引用其他变量值
‘’禁止引用其他变量值,$视为普通字符
反撇号表示命令替换,提取命令执行后的输出结果。
也可以加括号
键盘输入为变量赋值
方法有2种
第一种是在shell环境中直接去赋值
read -p "要输出的信息"变量名
echo $变量名
根据提示信息来输出变量
第二种 编写一个脚本 用脚本来执行
4变量的作用范围
在默认的环境下,新定义的变量只在当前的shell环境生效,因此称为局部变量。当进入一个子程序或新的子shell环境,局部变量就无法生效。
pstree可以查看当前的bash环境
此处切换了bash环境 那么之前的变量就不可以生效了
变量已失效
如果需要变量再次生效就需要将变量导出为全局变量
使用export指令 格式有两种
export 变量名
export 变量名=变量值
如图 切换了bash环境变量任然生效。
整数变量的计算
用于计算 格式为expr 变量1 运算符 变量2 [运算符 变量3]
和基础运算一样 可以使用运算符 即加减乘除 + 加号 - 减号 *乘法 /除法 %取余
例如
常在shell使用的运算表达式有4种,
i=KaTeX parse error: Undefined control sequence: \* at position 11: (expr 12 \̲*̲ 2) 这种为上图所示的 i…((12 * 8))
i=$[12 * 8]
let i=12*8
特殊的shell变量
环境变量
由系统提前创建,用来设置用户的工作环境 配置文件为/etc/profile,~/.bash_profile
常见的环境变量由 PWD PATH USER SHELL HOME
其中变量PATH表示可执行程序的默认搜索路径
将root用户目录添加到搜索路径 输出为全局变量。
位置变量
用$n表示,n为1-9的数字 例如$1为第一个位置参数。
预定义变量
浮点运算
bash不支持浮点运算,需要借助bc和awk才可以进行计算
但bc只可以输出小数点后两位,aw可以输出6位。