赞
踩
变量即在程序运行过程中它的值是允许改变的量。
变量是用一串固定的字符串去表示不固定的内容。
变量表示命令的内存空间,将数据放在内存空间中,通过变量名引用,获取数据。
变量的作用:
用来存放系统和用户需要使用的特定参数(值)。
变量赋值: 变量名=变量值(name=value)
bash变量类型:
1、根据变量的生效范围可分为:
环境变量(全局变量):全局生效,在任何bash环境中都可以识别。
局部变量:生效范围为当前shell进程。对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效。
本地变量:生效范围为当前shell进程中某代码片断,通常指函数。 只能在定义它们的函数/脚本内部中使用。
2、根据是否由系统定义可分为:
3、特殊变量:
只读变量:read only, 只可以读取不可以更改 。
位置变量: 通过命令行给脚本传递参数 。n(n是正整数),n(n是正整数),n(n是正整数),{10} 要加花括号。
预定义变量:用来保持脚本程序的执行信息。
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量(即环境变量),使用户定义的变量在所有子shell环境中可以继续使用。
方法:
方法一,设置全局变量:
export name=value或 declare -x name=value
方法二,将局部变量转变为全局变量:export name
步骤1、先设置一个局部变量color,使用bash命令进入子shell环境,查看变量是否有效;
步骤2、之后使用export命令将局部变量转换为环境变量,进入子shell环境,查看变量是否有效。
# 设置局部变量color
[root@localhost ~]# color=red //设置局部变量color
[root@localhost ~]# echo $color
red
[root@localhost ~]# bash //进入子shell环境
[root@localhost ~]# echo $color //查看变量color,为空,无效
[root@localhost ~]# exit //退出当前shell,返回上一级shell环境
exit
# 将局部变量color转换为全局变量
[root@localhost ~]# export color //将局部变量color转换为全局变量
[root@localhost ~]# bash //进入子shell环境
[root@localhost ~]# echo $color //查看变量color,有效
red
定义变量: 变量名=变量值
引用变量: $变量名 或 ${变量名}
查看变量:
echo $变量名:查看单个变量
set:查看所有变量,包括局部变量和环境变量
取消变量: unset 变量名
作用范围: 仅在当前shell环境中有效,无法在子shell环境中使用。
1、由系统提前创建,用来设置用户的工作环境。
2、使用env命令查看所有环境变量:
[root@localhost ~]# env //查看所有环境变量,这里只截取部分进行展示
XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.72.100 55445 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
3、需要记住的常用环境变量:
$PATH 表示可执行文件的默认路径
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]# echo $PWD
/root
4、环境变量的特性:
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量。
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程。
一般只在系统配置文件中使用,在脚本中较少使用。
自定义的环境变量只是临时生效,退出系统后就会失效。需要将自定义的环境变量放入配置文件中,才会永久生效。配置文件可以用来长期变更或设置环境变量。
全局配置文件:
用户独立的配置文件:
示例:
1)将脚本文件所在目录添加进可执行文件的默认路径PATH中,则可直接通过文件名称执行该程序。
[root@localhost ~]# echo "echo 'hello stars'" > /data/hello.sh //写一个脚本
[root@localhost ~]# cat /data/hello.sh
echo 'hello stars'
[root@localhost ~]# chmod a+x /data/hello.sh //为脚本增加执行权限
[root@localhost ~]# vim /etc/profile //编辑全局配置文件
---------------------------
export PATH=$PATH:/data //将/data加入变量PATH中
[root@localhost ~]# source /etc/profile //刷新文件,使立即生效
[root@localhost data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data
[root@localhost ~]# hello.sh //现在可直接使用文件名执行该脚本
hello stars
2)在当前用户环境中,添加系统的空闲等待时间TMOUT,等待15分钟后自动登出。
[root@localhost ~]# echo $TMOUT //查看TMOUT,没有该变量
[root@localhost ~]# vim ~/.bash_profile //编辑用户的配置文件,加入变量TMOUT
----------------------
TMOUT=900 //超时900秒后自动注销
[root@localhost ~]# source ~/.bash_profile //刷新文件,使立即生效
[root@localhost ~]# echo $TMOUT //查看变量TMOUT,显示为900
900
我们在定义shell变量时,默认定义的变量是可以被修改的,但有一种变量是不能修改的,就是只读变量。
只读变量只能被赋值一次。只读变量在取得初始值之后,只能进行读取操作,不能重新赋值或删除。
定义变量:
第一步:name=value # 定义一个变量
第二步:readonly name # 使用 readonly 来修饰该变量 ,表明只读
[root@localhost data]# year=2022 //定义一个变量year
[root@localhost data]# readonly year //使用 readonly 修饰该变量 ,表明只读
[root@localhost data]# echo $year
2022
[root@localhost data]# year=2000 //无法重新赋值
-bash: year: 只读变量
[root@localhost data]# unset year //无法使用unset删除
-bash: unset: year: 无法反设定: 只读 variable
位置变量也称为位置参数。
使用$n表示,n为数字序列号,且必须为整数。
如:$1、$2、…、 9 、 9 、 9、{10}、${11}。
两位数需要加花括号{},不然$10会被识别为:$1和0 。
示例:
[root@localhost ~]# cat weizhi.sh
#!/bin/bash
echo "$1" #显示位置1的参数
echo "$2" #显示位置2的参数
echo "$3" #显示位置3的参数
[root@localhost ~]# bash weizhi.sh aaa bbb ccc
aaa //对应$1
bbb //对应$2
ccc //对应$3
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。