Shell变量

环境变量

系统级环境变量:

Shell环境加载全局配置文件中的变量共享给所有用户所有shell程序使用,全局共享。

用户级环境变量:

Shell环境加载个人配置文件中的变量共享给当前用户的shell程序使用,登录用户使用。

查看系统环境变量:env      查看所有变量:set

自定义变量

自定义局部变量:

  只能在这个脚本文件中使用,等号两侧不能有空格,默认类型都是字符串无法直接进行数值运算,变量的值中间如果有空格,必须双引号扩起来

赋值:

var_name=value

查询:$var_name   ${var_name} (花括号适合拼接字符串)

删除: unset var_name

自定义常量:

  值不可以修改

readonly var_name

自定义全局变量:

  可以在当前shell环境和子shell环境使用(A脚本中执行B脚本,A是父shell环境,B是子shell环境)

export var_name1 var_name2

特殊符号变量

$n:用于接收脚本文件执行时传入的参数

$0用于获取当前脚本文件名称

$1-$9代表获取第一输入参数到第九个输入参数

第十个参数以上获取参数的格式:${数字}

执行脚本文件传入参数语法

sh 脚本文件 输入参数1 输入参数2 ...

$#:获取输入参数个数

$*,$@:获取所有输入参数,用于以后输出所有参数

不使用双引号扩起来时,功能一样

使用双引号扩起来时

$*:获取的所有参数拼接为一个字符串,格式为"$1 $2 ... $n"

$@:获取一组参数列表对象,格式为"$1" "$2" ... "$n"

$?:获取上一个命令的退出状态码或者函数的返回值

每个shell命令的执行都有一个返回值,这个值用于说明命令执行是否成功

0代表执行成功 非0代表执行失败

$$:用于获取当前shell环境进程的id号

自定义系统环境变量

   当前用户进入shell环境初始化的时候会加载全局配置文件/etc/profile/里面的环境变量,供给所有shell程序使用,以后只要是所有shell程序或命令使用的变量,就可以定义在这个文件中。

步骤:

1.编辑/etc/profile全局配置文件

 定义变量VAR1= VAR1,并导出为环境变量(G:快速定位到文件末尾 gg:快速定位到文件首行)

 export VAR1= VAR1

2.重载配置文件/etc/profile,因为配置文件修改后要立刻加载里面的数据就需要重载,

 source /etc/profile

3.在shell环境中读取系统级环境变量

 

加载流程原理

shell工作环境:

用户进入linux系统就会初始化shell环境,这个环境会加载全局配置文件和用户个人配置文件中的环境变量,每个脚本文件都有自己的shell环境

交互式shell:

与用户进行交互,互动效果就是用户输入一个命令,shell环境立刻进行反馈响应

非交互式shell:

不需要用户参与就可以执行多个命令,比如一个脚本文件含有多个命令,直接执行并给出结果

shell登录环境:需要用户名密码登录的shell环境

shell非登录环境:不需要用户名,密码进入的shell,或执行脚本文件

识别shell环境:

$0 bash:非登录环境 -bash:登录环境(不可以在脚本文件中使用)

shell字符串变量

字符串声明:

' ':原样输出,不能解析变量

" ":可以解析变量  "\"" 可以在双引号内输出双引号

不加引号:可以解析变量,不能加空格

${#字符串变量名}:获取字符串长度

字符串拼接:

无符号拼接:var3=${var1}${var2}  双引号拼接:var3="${var1}${var2}"

混合拼接:var3=${var1}"&"${var2}   var3=${var1}'&'${var2}

字符串截取:

从左侧第0个开始,向右截取2个字符

${var1:0:2} 

从右侧第5个开始,向右截取2个字符

${var1:0-5:2} 

从左边第一次出现e开始截取右边所有的字符(不包括e)

${var1#*e} 

从左边最后一次出现e开始截取右边所有的字符(不包括e)

${var1##*e} 

 

从右边第一次出现e开始截取左边所有的字符(不包括e)

${var1%e*} 

从右边最后一次出现e开始截取左边所有的字符(不包括e)

${var1%%e*} 

shell索引数组(只支持一维数组)

定义:

nums=(29 30 200 66)

nums=(29 30 200 "fdfs")

arr[6]=100

arr2=([0]=1 [3]="afd" [10]=acv)

查询:

通过下标获取:${nums[0]}

获取数组中的所有元素:${arr[@]} ${arr[*]}

获取数组的长度或个数:${#arr[*]}

获取数组指定元素的字符长度:${#arr[0]}

拼接:

arr3=(${nums[*]} ${arr2[*]})

删除数组指定元素数据:

unset nums[1]

删除整个数组:

unset nums

posted @ 2021-04-25 22:29  zfxd  阅读(123)  评论(0)    收藏  举报