shell脚本的编写规范和变量类型

1.1 shell的作用

shell是Linux系统中后台运行的一种特殊程序也可以理解 成一种特殊的软件,提供了用户与内核进行 交互操作的 一种接口。(简单的说就是shell把人类的高级语言转换成二进制数据,让机器明白你的指令) 过程:用户发出指令,通过shell转换成二进制语言被内核识别,内核再调度相对应的硬件,做出相关操作。

1.2 常见的shell解释器

cat /etc/shells     //linux中查看本机shell种类

bash:基于GUN的框架下发展的shell
csh:类似C语言的shell
tcsh:整合了csh 提供了更多功能
sh:已经被bash替换
nologin:让用户无法登录
bash(/bin/bash)是目前大多数 Linux 版本采用的默认 shell。
其中bash的特性:
1. 支持快捷键:比如 ctrl+c 强制终止进程 、 ctrl+l 清屏 、Tab补齐 等等。
2. 支持查看历史命令(history)
3. 支持别名(alias)
4. 标准输入和标准输出的重定向
5. 管道符
6. 文件名通配机制
7. 支持命令hash
8. 支持变量

1.3 shell 脚本的用途和应用场景

用途:
      自动化常用命令
      执行系统管理和故障排除
      创建简单的应用程序
      处理文本或文件
应用场景:
      重复性操作
      交互性任务
      批量事务处理
      服务运行状态监控
      定时任务执行

2.shell脚本的编写规范和执行方法

2.1 shell脚本的编写规范 

脚本的命名规范:都是基本名称,以“.bash”为结尾。
脚本代码开头一些规范化:
必备:
       1. 第一行一般为调用使用的语言
       2. 程序名,避免更改文件名后无法找到正确的文件
注释信息:
      1. 版本号
      2. 更改后的时间
      3. 作者相关信息
      4. 该程序的作用,及注意事项
shell 脚本创建:

2.2 shell脚本的执行方法 

2.2.1 用指定路径方式去执行文件 

指定路径方式执行有两种,一种是绝对路径的方式去执行,一种是相对路径的方式去执行(但是执行的
前提一定是该脚本文件拥有执行的权限!)
相对路径的执行方式:

绝对路径的执行方式:

2.2.2 使用解释器名称直接使用脚本

我们在shel脚本中的第一行就声明了/bin/bash 解释器的存在。此时即便该脚本没有执行权限,我们也 可以通过 bash 脚本名称 进行执行。

2.2.3 “.”和source 启动脚本

2.3 shell脚本执行方法的区别

脚本中的shell环境:指定路径(相对路径和绝对路径执行)和bash执行

当前shell环境中的执行方法:“.”和source

2.4 shell脚本执行的错误排查方法

2.5 shell中的括号

在Shell脚本中,小括号 () 、中括号 [] 和大括号 {} 有不同的用途。以下是它们的主要用法:

小括号 () :

                命令替换: 可以使用小括号执行命令替换,将命令的输出嵌套到一个变量中。

                

               子shell: 小括号还可以创建一个子shell,其中的命令会在子shell中执行,不会影响当前  shell的环境。

                

中括号 [ ] :

                条件测试:  中括号用于条件测试,可以用于字符串比较、数值比较等。                                           

                数组: 中括号也用于定义数组。

                

大括号 { } :

                代码块: 大括号可以用于创建代码块,将一组命令组合在一起                                                        

                扩展: 大括号还可以用于进行扩展,生成一系列字符串。

                        

                文件重定向: 大括号还可以用于文件重定向。

                        

这只是每种括号的一些主要用法示例,实际上它们还有其他用途。在不同的上下文中,这些括号可能会 有不同的含义。在编写脚本时,理解它们的不同用法可以帮助你更灵活地使用Shell。

3.重定向与管道符的作用和使用方法

3.1 交互式硬件设备的介绍

标准输入:从该设备中接收用户通过键盘输入的信息

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

标准错误输出:通过该设备报告执行出错信息

3.2 重定向操作的符号用法

3.3 交互硬件设备和重定向符合的运用演示

3.3.1 标准输入,重定向输出,重定向输入的搭配运用

3.3.2 合并文件操作

3.3.3 重定向错误输出的运用

                

3.3.4 重定向错误输出的第二种表示方法

3.3.5 混合输出

3.5 管道符的运用

管道符的作用是连接两个命令,将第一个命令的标准输出作为第二个命令的标准输入。 同一行命令中可 以使用多个管道符。(管道符的使用前提,一定是管道符前面的命名有输出结果,后面的命令是搭配着输 出结果进行操作)

另外:如果管道符符合右边一定要执行对象的命令,则管道符后面要有xargs命令来执行传递参数。

4.数值运算的方法

4.1 整数运算
4.1.1 expr 的运用
格式:expr 数值1 运算符 数值2 [运算符 数值3]...
运算符:+(加) - (减) \ * (乘 以) /(除于) %( 取余 (取模))

4.1.2 echo$[ ]和echo $(( ))

格式:

echo $((数值 运算符 数值))

echo $[数值 运算符 数值]

运算符:+(加) -(减) *(乘以) /(除于 ) %(取余)


4.1.3 let的运用

格式:let 变量=运算符<数值>
运算符与echo $[ ]相同
除此之外:
与java,c语言等计算机语言的整数变量用法相似,有
let i++ let i-- let i+=2 let i*=2 等等

4.2 小数运算 

4.2.1 bc科学计算工具的运用 

Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。
支持交互式和非交互式两种方式。
使用scale=n可以指定精度(运算中包含除法才生效),即小数点后的位数。要写在算术表达式之
前。

4.2.2 awk命令的计算运用 

使用awk进行浮点数的运算,运算结果最多只保留到小数点的后五位。
格式:awk "BEGIN{print 算术表达式}"

5.变量的运用

5.1 普通变量的定义方法

5.1.1 命令赋值法

注意:定义变量时,变量名只能以字母或者"_"作为开头

变量名=变量值

5.1.2 变量删除

可以使用 unset 命令来删除变量。 unset 命令用于移除一个或多个变量的定义。

5.1.3 通过标准输入来定义变量

格式:read 获取标准输入的内容给 变量

5.1.4 普通变量的全局设置和局部设置

如果只是简单的 变量名=变量值 设置的是局部变量,只对当前shell环境生效

export 变量=变量 设置的是全局变量,对所有的shell环境均生效

注意:变量如果不添加到配置文件中都是暂时的

5.2 环境变量 

5.2.1 变量的范围划分 

环境变量(全局变量):全局生效,在任何bash环境中都可以识别。
局部变量:生效范围为当前shell进程。对当前shell之外的其它shell进程,包括当前shell的子
shell进程均无效。
本地变量:生效范围为当前shell进程中某代码片断,通常指函数。 只能在定义它们的函数/脚本内
部中使用。

5.2.2 查看所有的环境变量

其中用处最为广泛的环境变量为

$PATH 表示可执行文件的默认路径
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录

5.2.3 环境变量的特性

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量。
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程。
一般只在系统配置文件中使用,在脚本中较少使用。

5.2.4 环境变量的配置文件 

全局配置文件:
     /etc/profile,修改此文件会作用于所有用户。
用户独立的配置文件:
~/.bash_profile,修改这个文件只作用于当前用户。

5.3 只读变量

只读变量,是一开始设置好的变量数值,一旦设置便无法更改或者删除(没有添加到配置中,则是重启
后失效,添加后永久保存。或者清除配置中的设置,再重启清除)

格式 :  readonly 变量名=变量值

5.4 位置变量

位置变量是$后以数字为结尾的的变量代表着每一个变量和标准输入参数的位置。(数字是以1为开头。 1-9是正常跟在$后面即可。当数字大于或等于10,要用{ }进行使用,区别shell误识别。)

设置位置变量

5.5 自定义变量 

5.5.1 $0 脚本本身 

在定义位置变量时,我们取数值是从1开始的,另外10以上数值要用${10}表示的原因就是因为bash脚
本中默认定义了$0为脚本本身的名字。

5.5.2 $* $@ 脚本后面跟的所有参数

正常情况下$@和$*是同一个作用 将输入的参数当作是一个整体,一次性输出 $#代表传入的参数个数

测试结果:

但是在有双引号中,则作用便不相同:

"$*" 会把脚本后面跟的所有参数当作一个整体看待

"$@" 会把脚本后面跟的所有参数看作多个以空格分隔的个体

5.5.3 $? 的作用 

$? 可以用来获取上一条命令的返回值,如果将获取返回值的信息转化输出为"0",则表示上一条命令执行
成功。如果获取的为非"0"的值,上一条命令执行异常。

6.变量的替换与截取

${variable} :获取变量的值。

${var:+value} :如果变量被定义,返回value,否则返回空

${variable:-value}:如果变量为空或未定义,则使用默认值。

${variable:=value}:如果变量为空或未定义,则设置默认值。

${variable:?message}:如果变量为空或未定义,则输出错误消息。

字符串的截取

${variable%pattern}:删除变量末尾匹配到的模式。

${variable#pattern} :删除变量开头匹配到的模式。

${variable%%pattern} :删除变量末尾最长匹配到的模式。

${variable##pattern} :删除变量开头最长匹配到的模式。

统计字符串的长度

7. 扩展延伸

7.1 date命令的运用 

date默认情况下,用来查看时间日期
另外定义格式: date +"%Y%m%d"
 %Y 年份 %d 按月计的日期(例如:01) %d 按月计的日期(例如:01)

7.2 本文所有内容写一个简易的用于压缩的脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值