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