shell中的变量

shell中的变量

变量介绍

变量即变化的量,核心是"变""量",变即变化,领即衡量状态。
量:是记录现实世界当中的某种状态
变:指的是记录状态是可以发生变化的

如何使用变量

变量名   赋值符号   变量值
name=zh    // shell中定义的变量
name: zh	// yaml中定义的变量


# 变量的语法
1.变量名: 相当于一个门牌号,便于取出变量值,是访问到值的唯一方式
2.赋值符号:将值的内存地址绑定给变量名
3.变量值: 用来表示状态

变量的使用规则:先定义,再通过变量名去引用

定义变量名的规范

# 前提:变量名的命名应该能反映出值记录的状态。 变量是用来访问变量的值,所有变量应该遵循一定的规范,来方便我们标识存到内存中值的功能。
变量名的命名规则:
	1.变量名只能是字母、数字或下划线的任意组合 (区分大小写)
	2.变量不可以使用中文
	3.变量名不要使用命令来命名
	4.变量不能以数字开头
	5.不要使用拼音
	
# 变量名定义的方式
1.下划线+纯小写
name_of='xxx'

2.驼峰体
nameOf='xxx'
ageOf='xxx'

3.下划线+纯大写
NAME_OF='xxx'

不好的方式
1.变量名为中文、拼音
2.变量名过长
3.变量名词不达意

变量的分类

系统内置环境变量

# 查看系统环境变量
env
declare
export

# 环境变量
LANG		# 字符集语言
PATH		# 该变量中的路径里的所有可执行文件,都可以执行.不需要加路径
PS1			# 命令提示符
UID			# 当前登录的uid
HOST TNAME	 # 当前主机名
PWD			# 当前工作路径
# 历史记录相关
HISTSIZE		# 保存历史记录条数
HISTFILESIZE	# 将历史命令保存到隐藏文件中记录的条数
HISTFILE		# 历史命令保存到隐藏文件的路径
TMOUT			# 终端一段时间不操作后断开连接的时间
HISTCONTROL: export HISTCONTROL=ignorespace		# 在命令行加空格就会不在历史命令里记录这条命令
PROMPT_COMMAND  # 每次执行命令都会把命令打印出来


# 如果有多个变量在一起注意使用大括号分隔变量
mkdir ${hsk}_${jdlw}_${mdlw}

位置变量

符号 含义 应用
$N 脚本的第N个参数 命令传参,传递给脚本,在脚本中使用
$0 脚本名字 脚本使用方法:给出错误体质或者使用帮助
$# 统计脚本参数 判断脚本是否传参
$* 获取脚本所有参数 将所有参宿当成一个整体,对传递的参数进行判断
$@ 获取脚本所有参宿 将每一个参数当成是一个整体,对传递的参数进行判断

特殊变量(状态)

$?			# 表示上一个命令执行的状态
		特殊命令: false  diff
$$ 			# 表示当前脚本执行的pid
$! 			# 上一个脚本或程序运行的pid
$_			# 获取上一条命令的最后一个参数(以空格为分隔符)		esc+.

变量的子串

${变量名}			# 调用变量
${#变量名}			# 获取该变量的值长度
${变量名:偏移量}	  # 字符串的截取
${变量名:偏移量:不创}  	# 字符串的截取

${变量名#字符串} 		# 从变量开头,删除最短匹配word的子串
${变量名##字符串}		# 从变量开头,删除最长匹配word的子串

${变量名%字符串}		# 从变量结尾,删除最短匹配word的子串
${变量名%%字符串}		# 从变量结尾,删除最长匹配word的子串

${变量/匹配内容/替换内容}		# 使用string替换第一个匹配内容
${变量名//匹配内容/替换内容}		# 视图string替换所有匹配内容

扩展变量

# 给变量默认值
${变量名:-字符串}			# 如果变量名没有被赋值,就以字符串为默认值,它不会赋值给变量
${变量名:=字符串}			# 如果变量名没有被赋值,就以字符串为默认值,他会赋值给变量(用户没有传递值)
${变量名:?字符串}			# 如果变量没有被赋值或其值为空,就以?号后面的字符串为报错信息输出
${变量名:+字符串}			# 如果变量没有被赋值或其值为空,就什么都不做,否则就替换变量内容

变量的赋值方式

直接赋值   name=zh
间接赋值	ip=`ifconfig eth0|awk 'NR==2'{print $2}`
交互赋值	read -p '请输入内容' 变量名
传参赋值	$1 $2 $3

交互赋值

read

read 选项 变量名

-p # 打印一行内容
-s # 不显示输入内容
-t # 设置超时时间
-a # 将后面所有结果放入数组

shell中的数据类型

# 字符串类型
赋值: name='字符串'

取值
$name

# 整型
age=18

# 数组类型
赋值
list=(python java golang shell)

list[0]='aaa'
list[1]='bbb'
list[2]='ccc'
list[3]='ddd'

取值
${list(0)}
${list(1)}
${list(2)}
${list(3)}

循环数组
list=(python java golang shell)

for yuansu in ${list[*]};do
	echo $yuansu
done

echo ${#list[*]} 	# 数组中元素的个数
posted @   FYytfg  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示