【Shell篇】常见shell变量用法,$n,$#,$*,$@,$?,$HOME,$PWD,$SHELL,$USER

Shell中的变量

1. 系统变量

$HOME

获取当前用户的工作目录

[root@jiangnan ~]# echo $HOME
/root
[root@jiangnan ~]# 

$PWD

获取当前所在的目录

[root@jiangnan tomcat]# echo $PWD
/root/tomcat
[root@jiangnan tomcat]# 

区别:我们也可以使用pwd返回当前的目录,但是pwd是命令,而PWD是系统变量。

$SHELL

获取当前使用的shell解析器

[root@jiangnan tomcat]# echo $SHELL
/bin/bash
[root@jiangnan tomcat]# 

$USER

获取当前用户

[root@jiangnan tomcat]# echo $USER
root
[root@jiangnan tomcat]# 

set

获取shell中的所有变量

[root@jiangnan tomcat]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
......
_=clear
colors=/root/.dircolors
[root@jiangnan tomcat]# 

env

获取所有的环境变量

[root@jiangnan ~]# env
XDG_SESSION_ID=13289
HOSTNAME=jiangnan
TERM=xterm
......
_=/usr/bin/env
OLDPWD=/root/tomcat
[root@jiangnan ~]# 

2. 自定义变量

2.1 基本语法

定义变量:变量=值

撤销变量:unset变量

声明静态变量:readonly变量。

注意:静态变量不能被unset

2.2 变量定义规则

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
  • 等号两侧不能有空格
  • 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
  • 变量的值如果有空格,需要使用双引号或单引号括起来。
  • 使用export可将变量提升为环境变量,供全局使用

2.3 实例

# 定义变量A
[root@jiangnan ~]# A=5
[root@jiangnan ~]# echo $A
5
# 给变量A重新赋值
[root@jiangnan ~]# A=6
[root@jiangnan ~]# echo $A
6
# 撤销变量A
[root@jiangnan ~]# unset A
[root@jiangnan ~]# echo $A  # 变量A被撤销了,所以不能打印任何数据

[root@jiangnan ~]# 
# 定义静态变量B
[root@jiangnan ~]# readonly B=6
[root@jiangnan ~]# echo $B
6
# 不能对静态变量撤销
[root@jiangnan ~]# unset B
-bash: unset: B: cannot unset: readonly variable
[root@jiangnan ~]# 
# 变量默认类型都是字符串类型,不能直接运算
[root@jiangnan ~]# C=1+2
[root@jiangnan ~]# echo $C
1+2
[root@jiangnan ~]# D=1
[root@jiangnan ~]# E=2
[root@jiangnan ~]# C=D+E
[root@jiangnan ~]# C=$D+$E
[root@jiangnan ~]# echo $C
1+2
[root@jiangnan ~]# 
# 变量的值如果有空格,需要使用双引号或单引号括起来
[root@jiangnan ~]# H=I love China
-bash: love: command not found
[root@jiangnan ~]# H='I love China'
[root@jiangnan ~]# echo $H
I love China
[root@jiangnan ~]# 
# 提升H为环境变量,可以在脚本中使用了
[root@jiangnan tomcat]# H='I love China'
[root@jiangnan tomcat]# export H
[root@jiangnan tomcat]# vi hello.sh
[root@jiangnan tomcat]# cat hello.sh 
#!/bin/bash 
echo $H
[root@jiangnan tomcat]# sh hello.sh 
I love China
[root@jiangnan tomcat]# 

3. 特殊变量

$n

n为数字,0代表脚本名称,1-9代表第一到第九个参数。十个以上的参数,需要用大括号包含,比如${10}

[root@jiangnan tomcat]# vi variable1.sh 
[root@jiangnan tomcat]# cat variable1.sh 
#!/bin/bash
echo "脚本名称为:"$0
echo "第1个参数为:"$1
echo "第10个参数为:"${10}
[root@jiangnan tomcat]# sh variable1.sh a b c d e f g h i g k l m n  # 参数之间空格隔开
脚本名称为:variable1.sh
第1个参数为:a
第10个参数为:g
[root@jiangnan tomcat]# 

$#

获取所有输入参数个数

[root@jiangnan tomcat]# cat variable2.sh 
#!/bin/bash
echo "参数个数为:"$#
[root@jiangnan tomcat]# sh variable2.sh a b c
参数个数为:3
[root@jiangnan tomcat]# 

这种通常用于循环。

$和$@

均表示所有的参数,但是$*把所有的参数看成一个整体,$@把每个参数区分对待

[root@jiangnan tomcat]# vi variable3.sh
[root@jiangnan tomcat]# cat variable3.sh 
#!/bin/bash
echo $*
echo $@
[root@jiangnan tomcat]# sh variable3.sh a b c
a b c   # 由$*获取
a b c   # 由$@获取
[root@jiangnan tomcat]#  

从这里看到都获取了全部参数,没有什么区别,但是在for循环的时候可以看出区别。

[root@jiangnan tomcat]# vi variable4.sh 
[root@jiangnan tomcat]# cat variable4.sh 
#!/bin/bash
for parameter1 in "$*"
do
	echo "I love "$parameter1
done
for parameter2 in "$@"
do
	echo "I love "$parameter2
done
[root@jiangnan tomcat]# sh variable4.sh beijing shanghai tianjin
I love beijing shanghai tianjin  # $*把参数当成一个整体
I love beijing                   # $@把每个参数区别对待
I love shanghai
I love tianjin
[root@jiangnan tomcat]# 

$*和$@使用了双引号变成了整体,看出了其中的区别。

$?

最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确了。

[root@jiangnan tomcat]# sh variable4.sh a b c
I love a b c
I love a
I love b
I love c
[root@jiangnan tomcat]# echo $?
0  # 返回0证明我的上一条命令sh variable4.sh a b c 执行成功了
[root@jiangnan tomcat]# 

微信公众号先已开通,搜索 “江小南和他的小伙伴们” 就能找到我哦,各位小伙伴们可以关注一下,文章会进行同步更新,方便查看哦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

傻啦猫@_@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值