【Linux】基本知识1

Original from: http://www.zsythink.net/archives/279

 

root@agu:~/nmonData# xyz="this is atest"

root@agu:~/nmonData# ./test.sh

这是在子shell中执行test.sh,所以在父shell中定义的变量没有办法在子shell中执行,也就是test.sh中不能使用父shell中定义的变量zyz;如果想要test.sh脚本可以使用到当前bash中定义的变量,有两种方式

1) 使用另一种不是本地变量的"变量",它被称作"环境变量",我们可以在当前bash中定义环境变量

2) 在当前bash中,仍然使用"本地变量";,但是改变执行test.sh脚本的方式。

 

环境变量
使用export关键字指明对应的变量为环境变量,方法如下: export varname=value环境变量的作用域:环境变量的生效范围为当前shell进程及其子进程, 

也可以先声明为本地变量,然后再导出为环境变量,步骤如下: 

zsythink="www.zsythink.net"

export zsythink

1) 命令行中直接执行的shell脚本在执行时会启动一个子shell进程

2) 命令行中直接执行的shell脚本会继承当前shell的环境变量

3)系统自动执行的shell脚本(非命令行中执行)就需要自我定义需要的各种环境变量,或者导入一些已经存在的环境变量。

 

在原有bash shell环境中执行一个脚本

在当前bash中,除了使用"路径+名称脚本"的方式直接运行脚本以外,还能使用另一种方法运行脚本,就是使用source关键字,我们只要在原有的方法前面加入source关键字即可

  root@agu:~/nmonData# source ./test.sh

本地变量只能在当前shell进程中生效,而当我们在执行脚本的时候如果加入了source关键字,那么脚本就相当于在当前进程中执行,而不是在子进程中执行,那么,如果使用source的方式执行脚本,理论上来说,本地变量是可以被脚本使用的,因为它们都在一个进程中。注意 也可以如下执行

root@agu:~/nmonData# . /test.sh

". /some/file"用文字描述就是"点 空格 脚本路径",其实 source /some/file 可以理解为将/some/file文件中的内容包含到当前文件或者进程中, "." 的作用和source的作用相同。

 

特殊变量:$?, 保存了上一个命令的执行状态返回值。命令执行后,可能有两类状态返回值(0 - 255), >如果返回值为0:表示上一条命令正确执行, 如果返回值为1-255中的任意一个:表示上一条命令执行错误. 1到255中,1、2、127 为系统预留的错误状态码,其他状态码可自定义。

位置变量:  

  $# 表示传入脚本的参数个数,参数数量

  $*参数列表 同 $@

  $@参数列表,获取到所有参数

  ${@:起点} 表示由起点开始(包括起点),取得后面的所有的位置参数

  ${@:起点:个数} 表示由起点开始(包括起点),取得指定个数的位置参数

  

当我们直接使用$*和$@的时候,这两种写法没有任何区别. 但是,在对$* 和$@加引号后,变成了"$*"和"$@", 这两种写法就会产生区别

$@ $* 只在被双引号包起来的时候才会有差异. "$*": 传递给脚本的所有参数,全部参数合为一个字符串,"$@": 传递给脚本的所有参数,每个参数为独立字符串

$0表示脚本本身,相当于basename输出的内容

如下特殊变量用来在脚本内引用传入脚本的参数值:

$1 , $2 ……

posted on 2018-06-26 14:57  alicegu  阅读(145)  评论(0编辑  收藏  举报