20shell编程之变量
Posted 小小ITa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20shell编程之变量相关的知识,希望对你有一定的参考价值。
变量表示命名的内存空间,将数据放在内存空间中,通过变量名引用,获取数据
变量类型
变量类型:
内置变量:PS1 PATH UID HOSTNAME $$ BASHPID PPID $? HISTSIZE
用户自定义变量
不通的变量存放的数据不通,决定了以下 1、数据存储方式 2、参与的运算 3、数据范围
变量的数据类型:字符型、数值型
变量命名法则
不能使用程序中保留字
只能使用数字、字母及下划线,且不能以数字开头
统一命名规则:驼峰法 StudentName
变量名大写:STUDENT_NAME
局部变量小写
函数名小写
变量的定义和引用
普通变量:生效范围为当前shell进程,对当前shell之外的其他shell进程,包括子shell进程均无效。
环境变量:生效范围为当前shell进程及其子进程。
本地变量:生效范围为当前shell进程中某代码片段,通常指函数。
变量赋值
直接字符 name=root
变量应用 name=“$user”
命令引用 name=`whoami`
或者 name=$(whoami)
变量强引用及弱引用
’$name’ 强引用,其中变量不会被替换为变量值
“$name”弱引用,其中变量引用会被替换为变量值
双应用引用能够将换行符显示出来
环境变量
环境变量:可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
一旦子进程修改从父进程继承的变量,将会传递给孙子进程
一般只在配置文件中使用,在脚本中较少使用
环境变量的申明及赋值
export name=value
declare -x name=value
或者 name = value export name
变量引用 $name $NAME
显示所有的环境变量 env printenv export declare -x
删除变量 unset name
bash 内建环境变量
(PATH SHELL USER UID HOME PWD LANG MAIL HOSTNAME HISTSIZE SHLVL(shell嵌套层数) _(上一命令的最后一个参数))
只读变量
只能申明定义,但是后续不能修改和删除,即常量
readonly name 或 declare -r name
查看只读变量 readonly [-p] declare -r
位置变量
位置变量:在bash shell 中内置的变量,在脚本代码中条用通过命令行传递给脚本的参数
$1 $2...对应第一个、第二个参数
$0 命令本身,包括路径
$* 传递给脚本的所有参数,全部参数合并为一个参数
$@ 传递给脚本所有参数,每个参数独立字符串
$# 传递给脚本的参数的个数
注意:$@ $* 只有在呗双引号引用才有差异
清空所有位置参数 set --
退出状态码变量
进程执行后,将变量$?(上一条命令执行状态) 保存状态码相关数字,不同值反应成功执行与否,0代表成功 1-255代表失败
用户可以在脚本中使用 exit [n] 自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本立即停止,终止时退出状态取决于exit命令后面的数字;如果未给脚本指定状态吗,则取最后一条命令的状态码
展开命令行
命令执行顺序 把命令行分成单个命令词-展开别名-展开大括号的申明-展开波浪符申明~-命令替换$() ``-再次把命令行分成命令词-展开文件通配* ? 等-准备IO重定向<>-运行命令
反斜线 \\ 会使后面字符按原意解释
! 叹号 命令历史替换
脚本安全和set
set命令:可以用来定制shell环境
$- 变量
h:哈希,打开选项后,shell会将命令所在路径hash下来,避免每次都要查询,通过set +h将h选项关闭
i:交互shell,
m:监控,打开监控模式,可以通过job control控制进程停止、继续、后台或者前台执行
B:大括号扩展
H:history 历史记录
set命令实现脚本安全
-u 在扩展一个没有设置的变量时,显示错误信息,等同于 set -o nounset
-e 如果一个命令返回一个非0退出状态值就退出,等同于set -o errexit (默认脚本中命令错误后下一个继续执行)
-o option 显示,打开或关闭选项
set -o
-x 当执行命令是,打印命令机器参数,类似bash -x
以上是关于20shell编程之变量的主要内容,如果未能解决你的问题,请参考以下文章