编程语言分类:
静态和动态语言
-
静态编译语言:使用变量前,先声明变量类型,之后类型不能改变,在编译时检查,如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用法:
三、第一个脚本

备份脚本
以上干货均为学习使用!!
379

被折叠的 条评论
为什么被折叠?



