1. Shell的变量
1.1. Shell变量介绍
- Linux Shell中的变量分为:系统变量和用户自定义变量
- 系统变量: $HOME、$PWD、$SHELL、$USER等等,比如 :
echo $HOME
等等
[root@CtCentos01 shcode]# echo $HOME
/root
[root@CtCentos01 shcode]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@CtCentos01 shcode]# echo $PWD
/root/shcode
- 显示当前shell中所有变量: set
2. shell变量的定义
2.1. 基本语法:
- 定义变量:变量名=值
变量名和值之间的等号之间不能有空格
- 撤销变量:
unset
变量 - 声明静态变量:
readonly
变量,注意:不能unset
2.2. 快速入门:
案例1 : 定义变量A
1 #!/bin/bash
2 #案例1 : 定义变量A
3 A=100
4 #输出变量需要加上$
5 echo A=$A
6 echo "A=$A"
7 echo 'A=$A'
案例2 : 撤销变量A
8 #案例2 : 撤销变量A
9 unset A
10 echo "A=$A"
案例3 : 声明静态的变量B=2,不能unset
11 #案例3 : 声明静态的变量B=2,不能unset
12 readonly B=2
13 echo "B=$B"
14 unset B
输出结果:
输出变量前面必须加上符号$
案例4: 可把变量提升为全局环境变量,可供其他shell程序使用【该案例后面讲】
2.3. 定义变量的规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如5A=200(X)
- 等号两侧不能有空格
- 变量名称一般习惯为大写(遵守即可)
2.4. 将命令的返回值赋给变量
- A=`date`,运行里面的命令,并把结果返回给变量A
注意:这里的反引号在键盘上是~键的位置
- A=$(date)等价于反引号
#将指令返回的结果赋给变量
C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"
3. 设置环境变量
3.1. 基本语法
export
变量名=变量值 (功能描述 : 将shell变量输出为环境变量)source
配置文件 (功能描述 : 让修改后的配置信息立即生效)echo
$变量名 (功能描述 : 查询环境变量的值)
3.2. 快速入门
- 在
/ect/profile
文件中定义TOMCAT_HOME
环境变量
先转到/opt/
文件夹,用其打开/etc/profile
[root@CtCentos01 shcode]# cd /opt/
[root@CtCentos01 opt]# vim /etc/profile
在其中定义环境变量TOMCAT_HOME
等于/opt/tomcat
的值
#定义一个环境变量
export TOMCAT_HOME=/opt/tomcat
- 查看环境变量
TOMCAT_HOME
的值
直接输出TOMCAT_HOME
的值我们发现为空,因为修改后的配置信息没有立即生效,我们通过source /etc/profile
让其立即生效再输出,可以发现TOMCAT_HOME
的值已经变成了/opt/tomcat
[root@CtCentos01 opt]# echo $TOMCAT_HOME
[root@CtCentos01 opt]# source /etc/profile
[root@CtCentos01 opt]# echo $TOMCAT_HOME
/opt/tomcat
注意:在输出TOMCAT_HOME
环境变量前,需要让其生效source /etc/profile
- 在另外一个shell程序中使用
TOMCAT_HOME
我们转到/root/shcode/
路径下,再次打开var.sh
[root@CtCentos01 opt]# cd /root/shcode/
[root@CtCentos01 shcode]# ls
hello.sh service.sh var.sh
[root@CtCentos01 shcode]# vim var.sh
我们直接输出TOMCAT_HOME
的值
#使用环境变量TOMCAT_HOME
echo "TOMCAT_HOME=$TOMCAT_HOME"
[root@CtCentos01 shcode]# ./var.sh
可以看出来TOMCAT_HOME
的值已经等于/opt/tomcat
了,并且可以在另外的shell程序var.sh
中使用(TOMCAT_HOME
变量的是在/ect/profile
定义的)
4. 位置参数变量
4.1. 介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量比如 :./myshell.sh 100 200
,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
4.2. 基本语法
- $n (功能描述:n为数字,$0代表命令本身,$1-S9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
- $* (功能描述: 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
- $@ (功能描述: 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
- $# (功能描述 : 这个变量代表命令行中所有参数的个数)
4.3. 位置参数变量
案例: 编写一个shell脚本 myshell.sh ,在脚本中获取到命令行的各个参数信息
- 我们先创建一个shell脚本
myshell.sh
[root@CtCentos01 shcode]# vim myshell.sh
- 在脚本中输出对应的位置参数信息
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数的个数$#"
- 添加权限后,我们给脚本传入两个参数100和200,可以看到第一个参数是100,第二个参数是200
[root@CtCentos01 shcode]# chmod u+x myshell.sh
[root@CtCentos01 shcode]# ls
hello.sh myshell.sh service.sh var.sh
[root@CtCentos01 shcode]# ./myshell.sh 100 200
0=./myshell.sh 1=100 2=200
所有的参数=100 200
100 200
参数的个数2
5. 预定义变量
5.1. 基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
5.2. 基本语法
- $$ (功能描述 : 当前进程的进程号( PID ))
- $! (功能描述 : 后台运行的最后一个进程的进程号( PID ) )
- $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行如果这个变量的值为非0(具体是哪个数,由命令自己来决定》,则证明上一个命令执行不正确了。)
5.3. 应用实例
在一个shell脚本中简单使用一下预定义变量
- 创建一个
preVar.sh
脚本
[root@CtCentos01 shcode]# vim preVar.sh
- 用预定义变量获取不同进程的进程号和他们的执行状态
#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取它的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"
- 运行脚本,得到两个进程的进程号
[root@CtCentos01 shcode]# chmod u+x preVar.sh
[root@CtCentos01 shcode]# ls
hello.sh myshell.sh preVar.sh service.sh var.sh
[root@CtCentos01 shcode]# ./preVar.sh
当前执行的进程id=15739
最后一个后台方式运行的进程id=15740
执行的结果是=0
[root@CtCentos01 shcode]# 0=/root/shcode/myshell.sh,1=,2=
所有的参数=
参数的个数0