shell脚本基础编程命令
Shell编程规范
- Shell脚本是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
Shell脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
Shell脚本应用场景
-
重复性操作
有些时候需要重复操作,可以写一个脚本进行循环实现 -
交互性任务
-
批量事务处理
-
服务运行状态监控
-
定时任务执行
将脚本写入crotable -e 来进去进行定时任务
Shell的作用
–命令解释器,“翻译官”
- 介于内核和用户之间的翻译官
编写脚本代码
- 使用vim文本编辑器
- 每行一条Linux命令,按执行顺序依次编写
在编写shell脚本使,在名字后面带上.sh,来代表这是shell脚本命令
赋予可执行权限
- 使脚本具有可执行属性
chomd +x 文件
执行脚本文件
- 方法一:脚本文件路径(绝对路径与相对路径)
必须要有x权限 - 方法二:sh脚本文件路径
- 方法三:source脚本文件路径
也可以通过“.”来执行
shell脚本构成
- 脚本声明
又叫“解释器”:若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器,还有其他类型的解释器 - 注释信息
- 可执行语句
重定向和管道操作
交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据 |
重定向输出 | > | 将标准输出结果 保存 到指定的文件,并且覆盖原有内容 |
>> | 将标准输出结果 追加 到指定的文件的尾部,不覆盖原有内容 | |
标准错误输出 | 2> | 将错误信息 保存 到指定的文件,并且覆盖原有内容 |
2>> | 将错误信息 追加 到指定的文件的尾部,不覆盖原有内容 | |
混合输出 | &> | 将标准输出,标准错误保存到同一文件中 |
2>&1 | 将标准错误输出重定向到标准输出 |
管道操作符号“|”
- 将左侧的命令输出结果,作为右侧命令的处理对象
Shell变量的作用和类型
变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置,系统系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义,修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
定义一个新的变量
- 变量名以字母或下划线开头,区分大小写,建议全大写。
变量名=变量值 (“=”是赋值的意思) - 查看变量的值
echo $变量名
- 若想在输出的后面紧密连接上别的内容,直接添加是不行的,这时候我们需要用到“{}”,使用该符号,就可以实现以上说法。或者使用" ",将$代号全部引号进去,也可以实现。
赋值时使用引号
-
双引号:允许使用$符号引用其他变量值
-
单引号:禁止引用其他变量值,$视为普通字符
-
反撇号:命令替换,提取命令执行后的输出结果
从键盘输入内容为变量赋值
* read [-p "提示信息"] 变量名
变量的作用范围
- 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量,但是当我们进入子程序或者新的子Shell环境时,局部变量将无法再使用,这时候如果让我们再次进行变量配置,无疑是浪费时间的。于是我们可以通过内部命令export将指定的变量导出变为全局变量,使用户定义的变量在所有的子Shell环境中都可以再次使用。
格式1:export 变量名
格式2:export 变量名=变量值
- 我们首先在自身环境中查看AI这个变量的内容,发现我们时可以看得到的。
-
然后使用pstree进入bash的子bash环境,然后使用我们在bash环境中设置的变量AI,然后发现没有这个变量。
-
之后我们回bash环境内,利用export命令,将我们的AI变量设置为全局变量。
- 再次回到子bash环境,这时候我们发现在子bash环境中也可以使用这个变量了,这个变量就是全局变量了。
- 上面的这种方法在重启之后就失效了,这时候我们如果想要一直可以使用,就需要在/etc/profile中输入 export 变量名=变量值就可以了
整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]…
常用运算符
- 加法运算:+
- 减法运算:-
- 乘法运算:*
- 除法运算:/
- 求模(取余)运算:%
注:这个方法不够简洁,仅作了解即可
简洁运算法
[]和(())使用方法
* echo $[1+2]
* echo $((1+2))
* let i=1+2
* echo $i
环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件:/etc/profile,~/.bash_profile
常见的环境变量
- 使用env命令可以查看到当前工作环境下的环境变量
USER:表示用户名称
HOME:表示用户的宿主目录
LANG:表示语言和字符集
PWD:表示当前所在的工作目录
PATH:表示可执行程序的默认搜索路径
- 环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户。每个用户都有自己的配置文件(~/.bash_profile)。可以用来长期变更或设置某个环境变量。
只读变量
- 用于变量值不允许被修改的情况
readonly name #设置为只读变量
位置变量
- 表示为$n,n为1~9之间的数字,10以及之后的数字需加{}
我们可以写一个简单的shall脚本来详细了解这一定义
然后我们执行这个脚本,不同位置的数字都经过脚本写了出来
预定义变量
* $*, $@:表示命令或脚本要处理的参数。不加双引号时表现一致。
* $#:把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4".
* $@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1" "$2" "$3" "$4".
* $*:所有位置变量的内容
* $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,返回任何非0值均表示出现异常。也常被用于Shell脚本中return退出函数并返回的退出值
* $0:当前执行的进程/程序名
- 由于$@和 $*理解起来稍微有点难度,我这面写一个脚本来看一下两者的区别