Shell变量(二)

346 阅读1分钟

一、变量使用

1. 查看

使用echo &valName查看变量值

 [root@izwz9eldxtlzr8ehu1fmjbz batch]# echo $HOME
 /root

2. 新建

  • 局部变量

    key=val新建普通变量

 [root@izwz9eldxtlzr8ehu1fmjbz batch]# name=stopping
 [root@izwz9eldxtlzr8ehu1fmjbz batch]# echo $name
 stopping
  • 静态变量

    readonly key=val设置静态变量,静态变量不能撤销

 [root@izwz9eldxtlzr8ehu1fmjbz batch]# readonly staticName=staticStopping
 [root@izwz9eldxtlzr8ehu1fmjbz batch]# echo $staticName
 staticStopping
  • 全局变量

    全局变量可以提供给其他shell程序使用,在shell脚本中使用局部变量是读取不到值的。使用export key将已存在的变量升级为全局变量,或者是export key=val创建全局变量。

    在shell脚本尝试获取$name变量值

     #!/bin/bash
     echo "hello stopping"
     echo $name
    

    局部变量,读取不到val

     [root@izwz9eldxtlzr8ehu1fmjbz first]# sh helloworld.sh
     hello stopping
     ​
    

    升级为全局变量

     [root@izwz9eldxtlzr8ehu1fmjbz first]# export name
     [root@izwz9eldxtlzr8ehu1fmjbz first]# sh helloworld.sh
     hello stopping
     stopping
    

3. 撤销

unset key撤销变量

 [root@izwz9eldxtlzr8ehu1fmjbz batch]# unset name
 [root@izwz9eldxtlzr8ehu1fmjbz batch]# echo $name
 [root@izwz9eldxtlzr8ehu1fmjbz batch]# unset staticName
 -bash: unset: staticName: cannot unset: readonly variable

二、 特殊变量

1. $n

特殊变量指的是$n所表示的变量,其中n表示数字

  • $0 表示脚本名称

  • 19表示第一到第九参数,大于10的参数需要用1-9 表示第一到第九参数,大于10 的参数需要用`{10}`表示

    新建shell脚本,输出脚本名名称 和第一个、第二个参数。

 #!/bin/bash
 echo $0 $1 $2

执行脚本

[root@izwz9eldxtlzr8ehu1fmjbz specialval]# sh specailVal.sh 1
specailVal.sh 1
[root@izwz9eldxtlzr8ehu1fmjbz specialval]# sh specailVal.sh stopping
specailVal.sh stopping
[root@izwz9eldxtlzr8ehu1fmjbz specialval]# chmod 777 specailVal.sh
[root@izwz9eldxtlzr8ehu1fmjbz specialval]# ./specailVal.sh hello
./specailVal.sh hello
[root@izwz9eldxtlzr8ehu1fmjbz specialval]# vim specailVal.sh

2. $#

$# 获取所有的参数个数。

#!/bin/bash
echo $#

输出结果

[root@izwz9eldxtlzr8ehu1fmjbz specialval]# sh specailVal2.sh hello stopping
2

3. $*

$*是获取所有的参数值。

#!/bin/bash
echo $0 $1 $2
echo $#
echo $*

执行shell文件,这里执行的参数是和$n有区别的,$*是获取所有参数值但是不能获取到shell脚本的文件名称。

[root@izwz9eldxtlzr8ehu1fmjbz specialval]# sh specailVal.sh stopping
specailVal.sh stopping
1
stopping

4. $@

$@是获取所有的参数值。

#!/bin/bash
echo $0 $1 $2
echo $#
echo $*
echo $@

执行结果

[root@izwz9eldxtlzr8ehu1fmjbz specialval]# sh specailVal.sh stopping
specailVal.sh stopping
1
stopping
stopping

5. $?

该变量是获取上次命令执行的结果,如果 上次命令正确执行则是0,否则非0。应用场景在逻辑判断中处理。

[root@izwz9eldxtlzr8ehu1fmjbz specialval]# $?
-bash: 0: command not found
[root@izwz9eldxtlzr8ehu1fmjbz specialval]# echo $?
127
[root@izwz9eldxtlzr8ehu1fmjbz specialval]# sh specailVal.sh
specailVal.sh
0


[root@izwz9eldxtlzr8ehu1fmjbz specialval]# echo $?
0

三、注意事项

  • 等号左右两边不能有空格,如果值太长需要用引号
  • 默认为字符串类型无法运算
  • 静态变量无法撤销

四、本章节关键字

  • export 设置全局变量
  • unset 撤销变量