shell脚本语言1 (持续更新)

编程语言分类:

静态和动态语言

  • 静态编译语言:使用变量前,先声明变量类型,之后类型不能改变,在编译时检查,如Java语言、C语言

  • 动态编译语言:不事先声明,可随时改变类型,如Shell语言、python语言、javascript语言、php语言

强类型和弱类型语言
  • 强类型语言:不同类型数据操作,必须经过强制转换成同一类型才能运算,如java,C#

  • 弱类型语言:语言的运行时会隐式地做数据类型转换。无需指定类型,默认均为字符型;参与计算会自动进行隐式类型转换;变量无需事先定义可直接调用。如Shell语言,php,JavaScript

一、Shell脚本语言的基本结构

1.shell脚本基本用途

自动化常用命令;执行系统管理和故障排除;创建简单的应用程序;处理文本或文件

2.shell脚本基本结构

各种系统命令的组合 ; 数据存储:变量,属组  ;表达式a+b  ; 控制语句if case for while

格式要求:首行执行shebang机制

3.创建shell脚本

3.1、使用vim创建脚本文本文件,第一行必须包括shell声明系列:

3.2加执行权限,给予执行权限,在命令行上指定脚本的绝对或相对路径

3.3运行脚本,直接运行解释器,将脚本作为解释器程序的参数运行。

4.脚本注释

  • 第一行一般为调用使用的语言

  • 程序名,避免更改文件名为无法找到正确的文件

  • 版本号

  • 更改后的时间

  • 作者相关信息

  • 该程序的作用,及注意事项

  • 最后是各版本的更新简要说明

5.执行脚本

1、增加执行权限,执行脚本时会创建一个子shell,不影响现有的shell环境

2、使用 . 或者source,执行脚本时不会创建一个子shell,会影响现有的shell环境

注意:尽量不要使用该方式执行脚本!!!

6. 脚本错误检查

  • 语法错误,会导致后续的命令不继续执行,可以用bash -n shellname检查错误

  • 命令错误,后续的命令还会继续,可以使用bash -x shellname检查

  • 逻辑错误,只能使用bash -x进行观察

二、Shell脚本语言的变量用法详解

1.变量

变量表示命名的内存空间,将数据放在内存空间中,通过变量名引用,获取数据

2.变量类型

1)内置变量:PS1,PATH,UID,HOSTNAME,HISTSIZE

2)用户自定义变量:a=1 b=2

3)预定义变量:$0,$?,$$,$#,$@,$*

4)位置变量:$1-$9

不同的变量存放数据不同,决定了:

1)数据的存放方式

2)参与的计算

3)表示的数据范围

变量的数据类型:

1)字符串

2)数值:整型,浮点数(小数),bash不支持浮点数

3.shell中变量名的命名法则

1)不能使用程序中的保留字,如:if,for

2)只能使用数字,字符及下划线,且不能以数字开头

3)见名思意,用英文命名,并体现含义

4)全局变量大写

5)局部变量小写

6)函数名小写

4.变量定义和引用

变量的生效范围(变量作用域)

普通变量(局部):生效范围为当前shell进程;对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效(打开子shell进程方式:定义输出命令后再输入“bash”)

环境变量(范围):生效范围为当前shell进程 及其子shell进程

本地变量(局部):生效范围为当前shell进程中某代码片段,通常指函数

引用符号使用注意:1. { }引用 两个变量同时使用时需注意,要用{ }隔离两个不同变量否则可能无法使用。 2. 引号引用,"$name":弱引用,其中的变量引用会被替换成为变量值 、'$name':强引用,其中的变量引用不会被替换成变量值,而保持原字符串

5.环境变量

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

查看命令:env

全局变量(export): 修改环境变量命令:export (修改为临时的)配置命令在/etc/profile下

6.只读变量

只读变量:只能声明定义,但后续不能修改和删除

声明只读变量:

readonly name
declare -r name

7.位置与预定义变量

位置变量:在Bash Shell中内置的变量,在脚本代码中调用命令行传递给脚本的参数。(存储当前脚本执行过程中跟的参数的)

预定义变量:(echo)$0 脚本本身,包括路径 、$# 输出给脚本的参数个数、$* 传递给脚本的所有参数,全部参数合成一个字符串整体输出、$@ 传递给脚本的所有参数,每个参数为独立字符、$$ 当前shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID 、$?上个命令的退出状态,或函数的返回值(为0则是成功,非零则有其他含义)注意:$@,$*只有被双引号括起来的时候才会有差异

清空所有位置变量:set -- 写在脚本内部 以下的位置变量不显示

8.退出状态码变量

进程执行后,将使用变量 ? 保存状态码的相关数字,不同的值反应成功与失败, ?保存状态码的相关数字,不同的值反应成功与失败, ?保存状态码的相关数字,不同的值反应成功与失败,的取值范围为[0,255],$?的值为0 代表成功,$?的值不为0 代表失败。

用户在脚本中使用该命令自定义退出状态码:exit [n]

实例:

注意:

  • 脚本中一旦遇到了exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字

  • 如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码

脚本堵塞:sleep 秒数 或 wait命令实现

9.展开命令行

9.2、防止扩展

转义符:反斜线 \ 会使随后的字符按原意解释

9.3、加引号防止扩展

单引号 :' ' 防止所有扩展 双引号:"  "防止扩展

9.4、变量扩展

反引号: ls 反引号,命令替换;等效于$(ls)     e !:叹号,历史命令替换

反引号加seq用法:

三、第一个脚本

备份脚本

以上干货均为学习使用!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值