shell编程01-局部变量和环境变量
shell编程01-局部变量和环境变量
一、shell脚本基础
1、格式要求:首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
2、创建shell脚本
创建shell脚本
第一步:使用文本编辑器来创建文本文件
第一行必须包括shell声明序列:#!(/bin/bash)
#!/bin/bash
添加注释
注释以#开头
第二步:运行脚本的方法
方法1:给予执行权限,在命令行上指定脚本的绝对或相对路径
方法2:直接运行解释器(bash),将脚本作为解释器程序的参数运行(如bash xxx.sh)
或者 cat xxx.sh|bash
开始以一个最简单的shell脚本
注意命令要被反引号引起来
或者这样运行:
3、脚本规范
脚本规范
脚本代码开头约定
1、第一行一般为调用使用的语言
2、程序名,避免更改文件名为无法找到正确的文件
3、版本号
4、更改后的时间
5、作者相关信息
6、该程序的作用,及注意事项
7、最后是各版本的更新简要说明
4、脚本调试的2种方法
一般脚本会有两种错误:
语法错误:不会往下执行
命令错误:出现命令错误,则跳过出错的命令,继续往下执行(更危险)
可用两种方法来检测:
1)检测脚本中的语法错误
bash -n /path/to/some_script
2)调试执行-跟踪查看脚本运行的结果
bash -x /path/to/some_script
例1:
检测脚本中的语法错误
bash -n 只能检测出语法错误,其他错误不能检测出
例2:调试执行 跟踪脚本运行结果
上边是命令,下边是命令执行的结果
例3:调试执行 跟踪脚本运行结果
二、变量
1、变量的赋值
变量的赋值可以采用3种方式:
变量赋值:name=‘value’
(1) 可以是直接字串; name=“root" (注意字符串用双引号引起来)
(2) 变量引用:name="$USER" (注意变量用双引号引起来)
(3) 命令引用:name=`COMMAND` name=$(COMMAND) (反引号引起来命令或者$()命令方式)
2、变量的引用:${name} $name
"" 弱引用,其中的变量引用会被替换为变量值
'' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name
变量赋值:name=‘value’
变量是直接字串; name=“tang"
变量引用:name="$USER"
命令引用:name=`COMMAND` name=$(COMMAND)
3、bash中变量的种类
bash中根据变量的生效范围等标准划分下面变量类型:
- 局部变量:又称标准变量或普通变量,指生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
- 环境(全局)变量:生效范围为当前shell进程及其子进程
- 本地变量:生效范围为当前shell进程中某代码片断,通常指函数
- 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
- 特殊变量:$?, $0, $*, [email protected], $#,$$
局部变量和环境变量是成对出现的
3.1 局部变量
实验:验证局部变量的有效范围是当前进程(只在当前shell有效)
局部变量特性介绍:
1)变零name的值只在当前session会话内(进程)有效
2)进程编号-系统会自动分配给每个程序一个进程编号
pstree -p 可查看当前进程与父进程的关系
再新开一个进程
思考:
当前在19478进程下,能使用一开始的变量吗?(name=wang)
一开始定义的变量-进程ID18056
结论:局部变量的有效范围是:当前进程(只在当前shell有效)
实验进一步:
从这个19660新进程再推出,又回到18056进程,
思考:此时变量name值是什么呢?
结论2:
局部变量:
在下级子进程定义的变量没有影响上级父进程,上级父进程的变量也不会传到下级子进程(变量传递不下去,也传不上来),这就是局部变量的特性:只在一小块范围内有效(当前shell进程)