Shell 编程规范与变量

前言

随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要。在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分。

一、Shell 脚本编程规范

在一些复杂的Linux维护找工作中,大量重复性的输入和交互操作不但费时费力,而且容易出错,而编写一个恰到好处的Shell脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。

1.1、Shell 脚本概述

1.1.1、Shell 脚本的概念

shell脚本的概念:

将要执行的命令按顺序保存到一个文件文本

给该文件可执行权限,便可运行

可结合各种shell控制语句以完成更复杂的操作

1.1.2、Shell 脚本应用场景

shell脚本应用场景:

重复性操作

批量事务处理

自动化运维

服务运行状态监控

定时任务执行

1.1.3、Shell 的作用

(1)命令解释器,“翻译官”

介于系统内核与用户之间,负责解释命令行
在这里插入图片描述
(2)用户的登录shell

登录后默认使用的shell程序,一般为/bin/bash

不同shell的内部指令,运行环境等会有所区别
在这里插入图片描述

1.2、Shell 编程规范

Shell脚本简单的说,只要将平时使用的各种Linux命令按顺序保存到一个文本文件,然后添加执行权限,这个文件就成为一个Shell脚本了。
例如,执行以下操作可以创建第一个脚本文件:first.sh

使用vim文本编辑器

每行一条Linux命令,按执行顺序依次编写

脚本后缀为.sh
在这里插入图片描述
在这里插入图片描述
上述first.sh脚本文件中,包括三条命令:cd /boot/、pwd、ls -lh vml*。执行此脚本文件后,输出结果与依次单独执行这三条命令是相同的,从而实现了“批量处理”的自动化过程。
在这里插入图片描述
当然这边执行脚本文件也有三种方法
在这里插入图片描述
还有一个合格的Shell脚本程序应该遵循标准的脚本结构,而且能够输出友好的提示信息、更加容易读懂。对于代码较多、结构复杂的脚本,应添加必要的注释文字。改写后的first.sh脚本内容如下。
在这里插入图片描述
第一行是一行特殊的脚本声明,表示此行以后的语句通过/bin/bash程序来解释执行;
其他以“#”开头的语句表示注释信息;
echo命令用于输出字符串,以使脚本的输出信息更容易读懂。

执行改写后的脚本,输出结果如下
在这里插入图片描述

1.3、管道与重定向

由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不要用户干预。因此学会提取、过滤执行信息变得十分重要。Shell环境中的两个I/O操作:管道、重定向,就是此作用,

1.3.1、重定向操作

Linux系统使用文件来描述各种硬件、设备等资源,用户通过操作系统处理信息的过程中,包括以下几类交互设备文件。
标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息
在这里插入图片描述
重定向操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.2、管道操作

将左侧的命令输出结果,作为右侧命令的处理对象(前后有关系时使用)
在这里插入图片描述

二、Shell 脚本变量

Shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell程序能够提供更加灵活的功能,实用性更强。

2.1、Shell 变量的作用及类型

变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置,系统环境的变化而变化

变量的类型
自定义变量:由用户自己定义,修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量

2.2、自定义变量

自定义变量是由系统用户自己定义的变量,只在用户自己的Shell环境中有效,因此又称为本地变量。在编写Shell脚本程序时,通常会设置一些特定的自定义变量,以适应程序执行过程中的各种变化,满足不同的需要。

2.2.1、定义新的变量和查看变量的值

变量名以字母或下划线开头,区分大小写,建议全大写
变量名=变量值
代表将右边的值赋予左边
查看变量的值:echo $变量名
在这里插入图片描述

2.2.2、变量赋值的特殊操作

赋值时使用引号

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值,$视为普通字符

反撇号:命令替换,提取命令执行后的输出结果
在这里插入图片描述
在这里插入图片描述
从键盘输入内容为变量赋值
在这里插入图片描述

2.2.3、设置变量的作用范围

默认情况,新定义的变量只在当前的Shell环境中有效,因此成为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用。
在这里插入图片描述
为了使用户定义的变量在所有的子Shell环境中能够继续使用,可用过Export命令将指定的命令导出为“全局变量”。
在这里插入图片描述
使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值
在这里插入图片描述

2.2.4、数值变量的运算

整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]…

常用运算符:
加法运算:+
减法运算:-
乘法运算:*
除法运算:/
求模(取余)运算:%
在这里插入图片描述
使用expr进行计算的时候,变量必须是整数,不能是字符串,也不能含小数,否则会出错。

2.3、特殊变量

2.3.1、环境变量

环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile,~/.bash_profile

常见的环境变量
PWD,PATH
在这里插入图片描述
USER,SHELL,HOME

2.3.2、只读变量

用于变量值不被修改的情况下
在这里插入图片描述

2.3.3、位置变量

为了在使用Shell脚本程序时,方便通过命令行为程序提供操作参数,Bash引入了位置变量的概念。当执行命令操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数安装从左到右的顺序依次赋值给位置变量。
在这里插入图片描述

2.3.4、预定义变量

预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能之间为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示,较常用的几个预定义变量的含义如下。
$#:命令行中位置变量的个数

$*:所有位置变量的内容

$?:上一条命令执行后返回的状态,当返回状态值为0时表示正常,非0值表示执行异常或出错

$0:当前执行的进程/程序名

编写一个备份操作的小脚本并进行分析,用打包命令行指定多个文件或目录,并输出相关信息。其中,新建的压缩包文件名称中嵌入秒数(从1970年1月1日至今经过的秒数),通过“date+%s”命令获取秒刻时间
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48191211/article/details/107917480