Shell中的变量

Shell中的变量

在这里插入图片描述

1. 系统变量

  1. 常用的系统变量
    $HOME, $PWD, $PATH, $SHELL, $USER
  • 查看系统变量的值
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $PWD
/root
  1. 显示Shell中的所有变量
#查看系统变量和用户定义的变量
set

set | less

#显示环境变量命令,可以查到全局变量
env

env | less

#显示环境变量命令,可以查到全局变量
printenv

printenv | less

printenv user

2. 自定义变量

  1. 语法
    1)定义变量:变量=值
    2)撤销变量:uset 变量
    3)声明静态变量:readonly 变量。注意:不能unset
  2. 变量定义规则
    1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
    2)等号两侧不能有空格
    3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
    4)变量的值如果有空格,需要使用双引号或者单引号括起来

2.1 定义变量

  1. 可以给变量user_name的等号两边加个空格,测试下变量定义规则2)
  2. 定义变量user_name值为zhangsan,并输出变量user_name的值
[root@localhost ~]# user_name = zhangsan
bash: user_name: 未找到命令...
[root@localhost ~]# user_name=zhangsan
[root@localhost ~]# echo $user_name
zhangsan

2.2 给变量重新赋值

定义变量user_name值为zhangsan,然后修改变量user_name值为lisi,输出变量user_name的值

[root@localhost ~]# user_name=zhangsan
[root@localhost ~]# echo $user_name
zhangsan
[root@localhost ~]# user_name=lisi
[root@localhost ~]# echo $user_name
lisi

2.3 撤销变量的值

unset user_name

[root@localhost ~]# user_name=lisi
[root@localhost ~]# echo $user_name
lisi
[root@localhost ~]# unset user_name
[root@localhost ~]# echo $user_name

[root@localhost ~]#

2.4 静态变量

静态变量声明:readonly 变量
静态变量不能unset(撤销)

[root@localhost ~]# readonly num=10
[root@localhost ~]# echo $num
10
[root@localhost ~]# unset num
-bash: unset: num: 无法反设定: 只读 variable

2.5 全局变量

export 变量名
可以通过这种方法把变量提升为全局变量,可供其它Shell程序使用

[root@localhost ~]# user_name=zhangsan
[root@localhost ~]# echo $user_name
zhangsan
[root@localhost ~]# bash
[root@localhost ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       2564   2558  0 22:44 pts/0    00:00:00 -bash
root       2961   2564  0 23:19 pts/0    00:00:00 bash
root       2994   2961  0 23:19 pts/0    00:00:00 ps -f
[root@localhost ~]# echo $user_name

[root@localhost ~]# exit
exit
[root@localhost ~]# export user_name
[root@localhost ~]# bash
[root@localhost ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       2564   2558  0 22:44 pts/0    00:00:00 -bash
root       3010   2564  0 23:20 pts/0    00:00:00 bash
root       3038   3010  0 23:20 pts/0    00:00:00 ps -f
[root@localhost ~]# echo $user_name
zhangsan

可以通过以上例子看出来,声明了个变量user_name值为zhangsan,在shell中可以直接打印输出其值,启动了个子shell,打印输出变量user_name的值,发现没有;然后把变量user_name提升为全局变量,再启动子shell,打印输出其值,发现和在shell中输出的值一样。

3. 特殊变量$n, $#, $*, $@, $?

3.1 $n 获取每个输入参数

$n: n为数字,$0代表该脚本名称,$1-$9代表第1到第9个参数,10以上的参数需要用大括号括起来,如${10}, ${11}

脚本para.sh

#!/bin/bash
echo "$0 $1 $2"
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"

执行该脚本sh para.sh dev start

[root@localhost jiaoben]# sh para.sh dev start
para.sh dev start
脚本名称:para.sh
第一个参数:dev
第二个参数:start

3.2 $# 获取所有输入的参数个数

$#:获取所有输入参数的个数,常用于循环
修改脚本para.sh:

#!/bin/bash
echo "=====================测试$n=========================="
echo "$0 $1 $2"
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "=====================测试$#=========================="
echo "参数个数:$#"

执行该脚本sh para.sh dev start

[root@localhost jiaoben]# sh para.sh dev start
=====================测试==========================
para.sh dev start
脚本名称:para.sh
第一个参数:dev
第二个参数:start
=====================测试2==========================
参数个数:2

3.3 $*, $@ 获取所有输入参数

$*, $@这两个特殊变量都代表命令行中所有的参数,但$*把所有的参数看成是一个整体,$@把每个参数区分对待

修改脚本para.sh:

#!/bin/bash
echo "=====================测试$n=========================="
echo "$0 $1 $2"
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "=====================测试$#=========================="
echo "参数个数:$#"
echo "=====================测试$*=========================="
echo "$*的输出结果:$*"
echo "=====================测试$@=========================="
echo "$@的输出结果:$@"

执行该脚本sh para.sh dev start

[root@localhost jiaoben]# sh para.sh dev start
=====================测试==========================
para.sh dev start
脚本名称:para.sh
第一个参数:dev
第二个参数:start
=====================测试2==========================
参数个数:2
=====================测试dev start==========================
dev start的输出结果:dev start
=====================测试dev start==========================
dev start的输出结果:dev start

3.4 $? 获取最后一次执行的命令的返回状态

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

[root@localhost jiaoben]# a = 2
bash: a: 未找到命令...
[root@localhost jiaoben]# echo $?
127
[root@localhost jiaoben]# a=1
[root@localhost jiaoben]# echo $?
0
[root@localhost jiaoben]# sh hello.sh
Hello!
[root@localhost jiaoben]# echo $?
0

3.5 直接输出变量名$n,$#…

上面的例子para.sh脚本,本来想直接输出$n,$#…,代表这一行输出内容为其的演示,结果直接输出该变量值了。那么重新该下面方式修改脚本para.sh:

#!/bin/bash
echo '=====================测试$n=========================='
echo "$0 $1 $2"
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo '=====================测试$#=========================='
echo "参数个数:$#"
echo '=====================测试$*=========================='
echo '$*'"的输出结果:$*"
echo '=====================测试$@=========================='
echo '$@'"的输出结果:$@"

执行该脚本sh para.sh dev start

[root@localhost jiaoben]# sh para.sh dev start
=====================测试$n==========================
para.sh dev start
脚本名称:para.sh
第一个参数:dev
第二个参数:start
=====================测试$#==========================
参数个数:2
=====================测试$*==========================
$*的输出结果:dev start
=====================测试$@==========================
$@的输出结果:dev start
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值