【Shell】变量

定义

暂时存储数据的地方,是一种数据标记,通过变量名可以取出对应内存空间中的数据

声明规则

  • 变量名和值之间不能有空格
  • 无需声明变量类型(默认字符串)
  • 变量名只能包含数字、字母、下划线
  • 变量名不能以数字开头
  • 区分大小写

变量赋值中包含反引号(`)则表示将命令执行的结果返回给变量

[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获取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

特殊状态变量

变量名说明注释
$?返回上一命令执行结果状态0执行成功,大于0执行失败
$$当前Shell的PID
$!获取上一个后台执行的Shell的PID(若不在运行,则返回空)
$_获取上一个执行指令,如果执行指令有参数,则返回指令的最后一个参数

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的向往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值