Shell变量


  • 定义变量
  • 使用变量
  • 只读变量
  • 命令替换
  • 特殊变量


脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。,在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

定义变量

定义变量格式:变量名=变量值
Shell 支持以下三种定义变量的方式:

var=value
var='value'
var="value"

注意:赋值号=的周围不能有空格
变量命名规则:字符下划线开始,其余部分可为字母数字下划线,不能使用Shell中的关键字

单引号和双引号的区别
以单引号’ '定义变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令也会把它们原样输出。

以双引号" "定义变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。

如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的。

使用变量

#变量引用	
$变量名
				
#清除变量内容
unset 变量名
				
#查看变量的值
set  变量名

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

readonly 变量名

命令替换

Shell 中有两种方式可以完成命令替换,一种是反引号,一种是$(),使用方法如下:

var=`commands`
var=$(commands)

commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。

例子:编辑test.sh脚本,用date命令获取当前时间,赋给变量实现命令替换

#!/bin/bash
a=`date`	#开始时间
sleep 10s	#休眠10s
b=$(date)	#结束时间
echo "$a"
echo "$b"

20s后可以看到输出结果:

[root@system ~]# ./test.sh
Sun May 31 15:45:11 CST 2020
Sun May 31 15:45:21 CST 2020

特殊变量

变量

含义

$0

脚本启动名(包括路径)

$n

第n个参数,n=1,2,…

$*

所有参数列表(不包括脚本本身)

$@

所有参数列表(独立字符串)

$#

参数个数(不包括脚本本身)

$$

当前程式的PID

$!

执行上一个指令的PID

$?

执行上一个指令的返回值,一般情况下,命令执行成功返回 0,失败返回 1

示例
编写下面的代码,并保存为 test.sh:

#!/bin/bash
echo "filename:$0"	
echo "PID:$$"
echo "The last command state:$?"
echo "total:$#"
echo "All parameters:$*"
echo "fifth parameters:$2"

运行 test.sh,并附带参数haha xixi

[root@system ~]# ./test.sh haha xixi
filename:./test.sh
PID:2532
The last command state:0
total:2
All parameters:haha xixi
fifth parameters:xixi

$?命令的上一条命令是输出进程id,执行成功故返回0

上面的脚本也可以用函数传递参数,参数直接写在脚本文件

#!/bin/bash

#定义函数
function func(){
        echo "filename:$0"
        echo "PID:$$"
        echo "The last command state:$?"
        echo "total:$#"
        echo "All parameters:$*"
        echo "fifth parameters:$2"
}
#调用函数
func haha xixi

运行结果和上面一样

[root@system1 ~]# ./test.sh
filename:./test.sh
PID:2592
The last command state:0
total:2
All parameters:haha xixi
fifth parameters:xixi