二、shell变量

变量用于存储和管理运行在内存中的数据。
变量的类型:系统环境变量、自定义变量、特殊符号变量。
2.1系统环境变量
系统环境变量是系统提供的共享变量,是linux系统加载shell的配置文件中定义的变量共享给所有的shell程序使用。

shell 的配置文件分类:全局配置文件、个人配置文件
全局配置文件
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置文件
当前用户/.bash_profile
当前用户/.bashrc

环境变量分类:系统级环境变量、用户级环境变量
系统级环境变量:shell环境加载全局配置文件中的变量共享给所有用户、所有shell进程使用,全局共享;
用户级环境变量:shell环境加载个人配置文件中的变量共享当前用户的shell程序使用,登录用户使用。

查看当前shell系统环境变量

env

效果如下:

root@mciserver:~# env
SHELL=/bin/bash
PWD=/root
LOGNAME=root
XDG_SESSION_TYPE=tty
HOME=/root
LANG=en_US.UTF-8
SSH_CONNECTION=192.168.231.227 56294 11.10.179.43 62485
XDG_SESSION_CLASS=user
TERM=xterm
USER=root
SHLVL=1
XDG_SESSION_ID=96
XDG_RUNTIME_DIR=/run/user/0
SSH_CLIENT=192.168.231.227 56294 62485
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAIL=/var/mail/root
SSH_TTY=/dev/pts/11
_=/usr/bin/env
root@mciserver:~#

查看所有变量

set

常用系统环境变量

变量名含义
PATH与 windows 环境变量 PATH 功能一样,设置命令的搜索路径, 以冒号为分割
HOME当前用户目录:/root
SHELL当前 shell 解析器类型:/bin/bash
HISTFILE显示当前用户执行命令的历史列表文件:/root/.bash_history
PWD显示当前所在路径:/root
OLDPWD显示之前的路径
HOSTNAME显示当前主机名
HOSTTYPE显示主机的架构
LANG设置当前系统语言环境:zh_CN.UTF-8

【示例】查看PATH环境变量

root@mciserver:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@mciserver:~#

【示例】查看$HISTFILE环境变量

root@mciserver:~# echo $HISTFILE
/root/.bash_history
root@mciserver:~#

2.2 自定义变量
自定义变量分类:自定义局部变量、 自定义常量、自定义全局变量

变量定义规则:
 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
 中间不能有空格,可以使用下划线(_)。
 不能使用 Shell 中的关键字作为变量名称。
 在 bash 环境中,变量的默认类型都是字符串类型,无法直接进行数值运算。
 变量的值如果有空格,必须使用双引号括起来。

定义变量语法
变量名=变量值
注意:等号两边不能有空格

变量值查询:
使用变量名查询 $var_name
使用花括号查询 ${var_name}
区别:花括号方式适合拼接字符串
注意:拼接字符串只能使用{}
【示例】

[webapps@localhost device_stress_test]$ a='abc'
[webapps@localhost device_stress_test]$ echo $abc

[webapps@localhost device_stress_test]$ echo ${a}bc
abcbc
[webapps@localhost device_stress_test]$

删除变量
unset variable_name
变量被删除后不能再次使用,且unset命令不能删除只读变量(常量)

自定义常量
变量设置值以后不可修改的变量叫常量,也叫只读变量。

readonly variable_name
[webapps@localhost device_stress_test]$ myname="mingming"
[webapps@localhost device_stress_test]$ readonly myname
[webapps@localhost device_stress_test]$ myname='jingjing'
-bash: myname: readonly variable
[webapps@localhost device_stress_test]$

自定义全局变量
父子shell环境介绍
例如:有两个shell脚本文件a.sh 和 b.sh。如果在a.sh脚本文件执行了b.sh脚本文件,那么a.sh就是父shell环境,b.sh就是子shell环境。
自定义全局变量就是在当前脚本文件中定义全局变量,这个全局变量可以在当前shell环境与子shell环境中使用。
语法:
export var_name1 var_name2
【示例】测试全局变量在子shell中是否可用
步骤一、创建2个脚本文件test1.sh 和 test2.sh

root@mciserver:~# touch test1.sh test2.sh

步骤二、编辑test1.sh,定义全局变量global_var, 执行test2.sh脚本文件
在这里插入图片描述
步骤三、编辑test2.sh,输出全局变量global_var
在这里插入图片描述
步骤四、通过test1.sh执行test2.sh脚本文件

root@mciserver:~# sh test1.sh
test1.sh  global_var: 100
root@mciserver:~#

自定义系统环境变量
/etc/profile 定义存储自定义系统级环境变量数据,自定义系统级环境变量只需在该文件添加即可。
在这里插入图片描述
注意:添加变量后需要重新加载配置文件/etc/profile,因为配置文件修改后要重新加载才能生效。
source /etc/profile

2.6 特殊符号变量

参数说明
$n$n:用于接收脚本文件执行时传入的参数
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数;如"$*“用引号括起来的情况,以为”$1 $2 $3… $n"的形式输出所有参数
$@ ∗ 相 同 , 但 是 使 用 时 加 引 号 , 并 在 引 号 中 返 回 每 个 参 数 。 如 " *相同,但是使用时加引号,并在引号中返回每个参数。 如" 使"@“用引号括起来的情况、以”$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$$脚本运行的当前进程ID号
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

∗ 与 * 与 @区别
相同点:都是引用所有参数
不同点:只有在引号中体现出来。" ∗ " 获 取 的 所 有 参 数 拼 接 为 一 个 字 符 串 " *"获取的所有参数拼接为一个字符串 " ""@"获取一组参数列表对象

2.7 字符串变量
字符串可以用单引号 、双引号、也可以不用引号。

str1='abcd'
str2="abcd"
str3=abcd
echo $str1 $str2 $str3

 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;双引号里可以有 变量
 字符串中还可以出现双引号的子字符串,但是需要转义
 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号“”包围的字符串一 样。字符串中不能出现空格,否则空格后边的字符串会作为其他命令解析(直接输出没 有问题,但不能赋值给其它变量)。

获取字符串的长度:${#字符串变量名}
字符串拼接
截取字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值