Shell-变量介绍
1、基础知识
1.1、简单介绍
变量包括两部分:变量名(不变的) + 变量值(变化的) 表现样式:变量名=变量值 功能定位: 通过变量名的调用,达到快速执行批量的效果
1.2、注意事项
变量的全称应该成为变量赋值,简称变量,在工作中,我们一般只xx是变量,其实是是将这两者作为一个整体来描述了。准确来说,我们一般所说的变量其实指的是:变量名。
1.3、shell变量分类
1.3.1、本地变量
变量名仅仅在当前终端有效
1.3.2、全局变量
变量名在当前操作系统的所有终端都有效
1.3.3、shell内置变量
shell解析器内部的一些功能参数变量
2、变量详解
2.1、本地变量【=】
本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。
本地变量包含两种:普通变量和命令变量
2.1.1、普通变量
类型 样式 特点 无引号 变量名=变量值 变量值必须是一个整体,中间没有特殊字符 "=" 前后不能有空格 单引号 变量名='变量值' 原字符输出 双引号 变量名="变量值" 变量值先解析,后整合 习惯:数字不加引号,其他默认加双引号
2.1.2、命令变量
类型 样式 特点 反引号 变量名=`命令` ``反引号 小括号 变量名=$(命令) $() 执行流程: 1、执行`或者$()范围内的命令 2、将命令执行后的结果,赋值给新的变量名A
2.2、全局变量【export、unset】
2.2.1、什么是全局变量
在当前系统的所有环境下都能生效的变量,可以基于env命令查看
2.2.2、定义方法
# 设置值 export 变量=值 # 查看 $变量名 、"$变量名"、${变量名}、"${变量名}" # 取消 unset 变量名
2.3、内置变量
2.3.1、属性含义
符号 意义 $0 获取当前脚本文件名 $n 获取脚本的第n个参数值,样式:$1,${10} $# 获取脚本参数的总个数 $? 获取上一个指令的状态返回值(0为成功,非0为失败) $* 获取所有参数,存放到一个字符串中 $@ 获取所有参数,存放到一个列表里面 $$ 获取当前程序进程号 $! 获取上一个进程的id
2.3.2、$0【获取脚本的名称】
cat << 'CAT_END' > test.sh #!/bin/bash echo "脚本名字: $0" CAT_END # sh test.sh 脚本名字: test.sh
2.3.3、$n【获取位置参数值】
cat << 'CAT_END' > test.sh #!/bin/bash echo "one parmer1: $1" echo "two parmer1: $2" CAT_END # sh test.sh ptest1 ptest2 one parmer1: ptest1 two parmer1: ptest2
2.3.4、$#【获取参数总数量】
cat << 'CAT_END' > test.sh #!/bin/bash echo "parmer count number $#" CAT_END # sh test.sh ptest1 ptest2 parmer count number 2
2.3.5、$?【获取文件执行或者命令执行的返回状态值】
# bash test /usr/bin/test: /usr/bin/test: 无法执行二进制文件 # echo $? 126
# ls# echo $? 0
2.3.6、$$【获取shell脚本运行进程id】
cat << 'CAT_END' > test.sh #!/bin/bash echo "pid $$" CAT_END # sh test.sh pid 34956
2.3.7、$!【获取上一条命令的进程号】
# sleep 15 & [1] 34963 # echo $! 34963
2.4、$@ 与 $* 的区别实践
cat << 'CAT_END' > test.sh #!/bin/bash # string for arg in "$*";do echo '$*获取到的参数内容:' $arg done # list for arg in "$@";do echo '$@获取到的参数内容:' $arg done CAT_END # sh test.sh p1 p2 $*获取到的参数内容: p1 p2
$@获取到的参数内容: p1 $@获取到的参数内容: p2
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 分享4款.NET开源、免费、实用的商城系统