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

浙公网安备 33010602011771号