ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 定义 暂时存储数据的地方,是一种数据标记,通过变量名可以取出对应内存空间中的数据 ## 声明规则 * 变量名和值之间不能有空格 * 无需声明变量类型(默认字符串) * 变量名只能包含数字、字母、下划线 * 变量名不能以数字开头 * 区分大小写 >变量赋值中包含反引号(`)则表示将命令执行的结果返回给变量 ``` [henry@localhost shell]$ var1=`whoami` [henry@localhost shell]$ echo $var1 henry ``` ### 单引号和双引号的区别 单引号变量不识别特殊语法 双引号变量能识别特殊语法 ``` [henry@localhost shell]$ name=Henry [henry@localhost shell]$ echo1='my name is ${name}' [henry@localhost shell]$ echo2="my name is ${name}" [henry@localhost shell]$ echo $echo1 my name is ${name} [henry@localhost shell]$ echo $echo2 my name is Henry ``` ## 作用域 父子Shell中的变量无法相互访问 环境变量在任意子进程都可以访问 > bash和sh命令可以开启子shell > pstree可以查看当前shell存在的域 ### Shell的调用方式不同,作用域不同 bash和sh调用会开启对应的子shell source和./脚本名调用不会开启对应的子shell ``` [henry@localhost shell]$ cat test.sh name=henry1 [henry@localhost shell]$ name=henry [henry@localhost shell]$ bash test.sh [henry@localhost shell]$ echo $name henry *****开启子shell定义变量name,父shell的name变量没变 [henry@localhost shell]$ source test.sh [henry@localhost shell]$ echo $name henry1 *****在父shell执行脚本name变量被替换 ``` ## 特殊变量 | 变量名 | 说明 | 注释 | | --- | --- | --- | | $? | 返回上一命令执行结果状态 | 0执行成功,大于0执行失败 | | $0 | 获取shell脚本的文件名以及路径 | | | $n | 获取脚本的第n个参数 | | | $# | 获取脚本的参数个数 | | | $* | 获取脚本的所有参数 | 带“”输出参数时所有参数整合为一个字符串 | | $@ | 获取脚本的所有参数 | 带“”输出参数时每个参数分别整合为独立字符串 | ``` [henry@localhost shell]$ cat test.sh echo "参数个数:$#" echo "脚本路径:$0" echo "参数:$1 $2 $3" echo '$*输出所有参数:' for var in "$*" do echo $var done echo '$@输出所有参数:' for var in "$@" do echo $var done [henry@localhost shell]$ ./test.sh a b c 参数个数:3 脚本路径:./test.sh 参数:a b c $*输出所有参数: a b c $@输出所有参数: a b c ```