Shell_03_环境变量

本文详细介绍了Shell编程中的环境变量、系统变量和自定义变量的概念、区别、调用方式、系统变量列表,以及如何设置、查看和操作这些变量,包括全局变量、局部变量和数组变量。此外,还讨论了特殊变量如read、readonly和export,以及变量类型声明和管理技巧。
摘要由CSDN通过智能技术生成

环境变量

环境变量:以一组字符串替换设置或保留数据(存储在内存中)

1)环境变量分为:全局变量、局部变量


全局变量和局部变量对于父/子Shell的区别:

1)全局变量对于所有Shell和其子Shell均可调用;

2)局部变量仅能由创建该变量的Shell调用;


变量调用形式:${变量名}

1)也可通过“$变量名”的形式调用

2)若调用数组变量中指定值的形式:${变量名[索引值]}


调用变量时,可使用的符号:

符号说明
“ ” (双引号)使系统能够识别变量 实现转义(如:“/*”)
‘ ’ (单引号)使系统不能识别变量 不能转义(只会原样输出单引号的内容)
` ` (反引号)将脚本内执行命令后得到的数据赋给变量 将括定的内容形成一个完整的表达式
\ (反斜杠)将特殊符号转换为一般字符 放在特殊字符前即可表示转义

set命令:列出目前shell环境下的所有环境变量

指令格式:set

1)同时列出全局变量、局部变量和用户自定义变量;

2)列出的顺序是按照字母顺序进行排序;


如:查询set文件中命令提示符的变量
在这里插入图片描述

符号含义
\d显示“星期 月 日”信息
\H显示完整主机名
\h仅显示主机名第一个小数点前的名字
\t显示时间 24小时“HH:MM:SS”的格式
\u显示目前用户的名称
\v显示BASH版本信息
\w显示完整的当前工作目录名称
\W仅显示当前工作目录的最后一个目录名称
\#显示当前终端执行的第几个命令
\$显示用户标识符

系统变量

Bash Shell在系统启动时,会默认创建特殊的环境变量作为系统变量

1)系统环境变量的名称默认使用全大写(区分用户变量)


env命令(environment):列出当前系统全局变量

指令格式:env


如:列出当前系统全局变量
在这里插入图片描述

1)与export命令相似,但export比env多出一些内容


常见的Bash Shell环境变量如下:

变量名说明
*所有命令行参数(单值形式)
@所有命令行参数(多值形式)
#命令行参数的个数
?最后一次前台进程的退出状态码
-当前命令行选项标记
$当前Shell的进程PID
!最近执行的后台进程的PID
0命令行中使用的命令名称
_Shell的绝对路径名
BASH调用Shell的绝对路径
BASHOPTS允许冒号分隔列表形式的Shell选项
BASHPID当前Bash Shell的进程ID
BASH_ALIASED当前所用别名的数组
BASH_ARGC子函数中的参数的个数
BASH_ARGV指定命令行参数的数组
BASH_CMDS命令的内部散列表的数组
BASH_COMMAND当前正在被执行的命令名
BASH_ENVShell脚本运行前,默认执行的文件
BASH_LINENOShell脚本中每个命令的行号的数组
BASH_REMATCH与指定正则表达式匹配的文本元素的数组
BASH_SOURCEShell中已声明函数所在源文件名的数组
BASH_SUBSHELL当前Shell所生成的子Shell数目
BASH_VERSINFO当前Shell的主版本号和次版本号的数组
BASH_VERSION当前Shell的版本号
COLUMNS当前Shell终端的宽度
COMP_CWORD当前光标所在位置
COMP_KEY调用补全功能的按键
COMP_LINE当前命令行
COMP_POINT当前光标位置相对于当前命令起始位置的索引
COMP_TYPE补全烈性所对应的整数值
COMP_WORDBREAKS进行单词补全时,用作单词分隔符的字符
COMP_WORDS当前命令行上所有单词的数组
COMPREPLY由Shell函数生成的可能补全码的数组
COPROC用于匿名携程I/O的文件描述符的数组
DIRSTACK目录栈当前内容的数组
ENVShell以POSIX模式调用时,默认执行的文件
EUID当前用户的有效UID
FCEDITfc命令使用的默认编辑器
FIGNORE以冒号分隔的后缀名列表,在补全时被忽略
FUNCNAME当前执行的Shell函数名称
FUNCNEST嵌套函数的最高层级
GLOBIGNORE以冒号分隔的模式列表中的文件名展开时被忽略
GROUPS当前用户属组的数组
histchars控制历史记录展开的字符
HISTCMD当前命令在历史记录中的编号
HISTCONTROL控制那些命令留在历史记录列表中
HISTFILE保存Shell历史记录列表的文件名 (默认为~/.bash_history)
HISTFILESIZE保存在历史文件中的最大行数
HISTIGNORE以冒号分隔的模式列表中的命令不存进历史记录
HISTSIZE最多可记录的命令条数
HISTIMEFORMAT决定历史文件条目的时间戳的格式字符串
HOSTFILEShell在补全主机名时,读取的文件名
HOSTNAME主机名称
HOSTTYPE运行Shell的终端
IGNOREEOFShell在退出时,必须收到连续的EOF字符的数量 默认值为1
INPUTRCreadline初始化
LANGShell的语系
LC_ALLShell整体语系环境(覆盖LANG)
LC_COLLATE字符串值排序时,所使用的语系
LC_CTYPE文件名扩展和模式匹配时,所使用的语系
LC_MESSAGES解析前置$的双引号字符串,所使用的语系
LC_NUMERIC格式化数字时,所使用的语系
LINENOShell脚本中当前执行代码的行号
LINES定义了终端上可见的行数
MACHTYPE“CPU-公司-系统”格式定义系统类型
MAILCHECKShell查看新邮件的周期(默认为60s)
OLDPWDShell之前的工作目录
OSTYPE运行Shell的操作系统
PIPESTATUS前台进程退出状态码的数组
POSIXLY_CORRECTBash是否以POSIX模式启动
PPIDBash Shell父进程的PID
PROMPT_COMMAND命令行主提示符之前执行的命令
PS1主提示符的字符串
PS2次提示符的字符串
PS3select命令的提示符
PWD工作目录
RANDOM返回0~32767的随机数
READLINE_LINE保存readline行缓冲区的内容
READLINE_POINT当前readline行缓冲区的插入点位置
REPLYread命令的默认变量
SECONDSShell已运行的时间(秒)
SHELLShell的绝对路径
SHELLOPTS一起用Bash Shell选项列表(冒号分隔)
SHLVL当前Shell层级
TIMEFORMATShell显示时间值的格式
TMOUTselect和read命令在无输入的情况下,等待时间
TMPDIRShell的临时文件目录
UID运行Shell的用户UID

如:使用$?变量判断命令执行情况
在这里插入图片描述


Shell脚本默认变量:实现类似Linux内建命令中的选项功能

本质:通过变量让系统把选项传递给命令


接受变量:

${0} //命令本身

${1} //第一个选项

${2} //第二个选项

${N} //第N个选项

(1)也可用“$N”形式表示

1)但当N大于9时,必须使用“${N}”形式


(2)其中3个特殊系统变量

1)$#:参数个数(有几个选项,等于N)

2)$@:代表“$1” “$2” “$3” “$N”

3)$*:代表“$1分隔符$2分隔符$3分隔符$N”


如:test13.sh脚本能够接受外部三个选项并输出

1)编写test13.sh脚本文件
在这里插入图片描述
2)调用test13.sh脚本文件
在这里插入图片描述

//若传入的参数中含有空格,应使用双引号括起来


shift命令:参数变量偏移

指令格式:shift N

1)N为数字,指定偏移位数(若没有指定N,则默认偏移一位)

2)本质:$1和后续变量的移动,$0是固定不变的


如:使用shift_paras.sh脚本文件打印1、2、3、4、5、6

1)编写shift_paras.sh脚本文件
在这里插入图片描述
2)调用shift_paras.sh脚本文件
在这里插入图片描述


如:实现脚本文件可同时接受选项和参数

1)编写test17.sh脚本文件
在这里插入图片描述
在这里插入图片描述
//Linux中默认将双坡折线作为选项和参数的分隔
2)调用test17.sh脚本文件
在这里插入图片描述

自定义变量

变量名规则:

1)只能使用英文字母、数字和下划线(首个字符不能为数字);

2)不能包含空格和标点符号,不能使用特殊关键字;

3)变量名区分大小写,且长度不能超过20个字符;

//建议自定义变量名为小写(区分系统环境变量)


变量的赋值形式:变量名=变量值

1)等号的左右两边不能有空格和其他符号;

2)未被定义的变量被调用时,默认其内容为空;

3)变量值中若含有特殊内容可使用单/双引号等进行保留或转换;

4)若定义数组变量,可将数组值使用圆括号括起来,并使用空格分隔


将命令赋值给变量形式:变量名=`命令`

1)也可用“变量名=$(命令)”形式;


变量值追加形式:变量名=${${变量名}新增内容}

1)两个变量名也可不同,可实现将某一变量添加内容后赋值给指定变量;


如:设置test2.sh脚本能够打印当前时间
在这里插入图片描述
在这里插入图片描述

1)父Shell的自定义变量是无法在子Shell内使用的

//父Shell的全局变量是子Shell可以使用的

2)子Shell退出后,子Shell的所有变量都会注销(不会传回到父Shell)


export命令:使局部变量变成全局变量

指令格式:export 变量名

1)若没有变量名,则默认显示所有环境变量

2)自定义变量默认为局部变量


如:设置name变量并赋值在子程序调用
在这里插入图片描述

特殊自定义变量

read命令:定义输入变量

指令格式:read 选项 变量名

选项含义
-p设置输入提示信息 在输入变量前,显示提示信息
-t设置等待输入时间 若时间结束,直接结束输入
-n设置接受的字符数量 若接受字符数量达到指定值,则默认开始执行
-s隐藏输入

1)提示信息中若有空格,需要用单引号括起来;

2)输入变量:等待用户输入后,继续执行脚本;

3)若read命令不指定变量,则默认将输入数据存储至REPLY变量中;


如:test4.sh脚本能够根据用户输入的路径,在该路径下创建一文件(并列出)
在这里插入图片描述
在这里插入图片描述


readonly命令:定义只读变量或函数

指令格式:readonly 选项 变量名

选项含义
-f定义只读函数
-a定义制度数组变量
-p显示系统中全部只读变量

1)不跟选项,默认定义只读变量

2)只读变量(readonly):变量仅能读,不能赋值


如:test3.sh脚本内的a变量先赋值为1,设置为只读变量再赋值为2
在这里插入图片描述
在这里插入图片描述


unset命令:删除指定变量

指令格式:unset 变量名

1)删除数组变量中的一个值时,该值在数组中索引位会被置空(仍占位);

//变量进行索引时,仍需计算该索引位


declare命令:声明变量类型

指令格式:declare 选项 变量名

选项含义
-a (array)定义为数组变量
-i (integer)定义为整数变量
-x定义为环境变量
-r定义为readonly类型 且不能被unset
-p列出变量的类型

1)declare和typeset是完全一样的使用和功能;

2)变量类型默认为字符串;

3)“-”变成“+”,则是取消对应的变量类型(-p除外);

4)变量被设置为readonly时,可通过注销再登录来恢复变量的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值