一、变量概念
- 概念:变量就是一个字符串,可以指向一个内容,该内容可以是路径、命令、数字、字符串等...
- 变量分类:预定义变量、环境变量、自定义变量、位置变量
二、预定义变量
预定义变量
- $? 最后一次执行的命令的返回状态。如果这个变量的值为0,则证明上一条命令正确执行;如果这个变量的值为非0,则证明上一条命令执行错误
- $$ 当前进程的进程号(PID)
- $! 后台运行的最后一个进程的进程号(PID)
- $# 位置参数的数量
- $* 所有位置参数的内容
- $@ 所有的参数
- $* 和 $@ 的区别:$@和$*在无引号时效果一样,都是代表数组中的所有参数,$@被引号引起来不变,$*被引号引起来是一段字符串
1)$?
[root@localhost opt]# ls
[root@localhost opt]# echo $?
0
2)$$
[root@localhost opt]# vim variable.sh
#!/bin/bash
echo "The current process is $$"
#输出当前进程的PID
#这个PID就是variable.sh脚本执行时生成的进程的PID
3) $!
[root@localhost opt]# sleep 3000 &
[1] 12165
#符号"&"的意思是把命令放入后台执行
[root@localhost opt]# echo $!
12165
4)$#、$@、$*
[root@master srv]# cat test.sh
#! /bin/env bash
echo $#
echo $@
echo $*
[root@master srv]# sh test.sh 1 2 3
3
1 2 3
1 2 3
5) $@和$*的区别
[root@master srv]# sh test.sh 1 2 3
3
1 2 3
1 2 3
[root@master srv]# sh test.sh "1 2 3"
1
1 2 3
1 2 3
三、环境变量
环境变量
- shell在开始执行时已经定义好的
- env 查看所有环境变量
- set 查看所有变量
- 环境变量拥有可继承性:export之后就拥有继承性
- export 导出变量(作用范围)
1)临时生效
[root@slave conf.d]# jk=girl
[root@slave conf.d]# echo $jk
girl
2)永久生效
写到4个登陆脚本中 ~/.bashrc ~/profile 更好放在/etc/profile.d/* 下建立独立的环境变量配置文件
常用环境变量:USER UID HOME HOSTNAME PWD PS1 PATH
PATH:存储所有命令所在的路径
四、自定义变量
自定义变量
定义:变量名称=值
- 变量名称:只能由字母,数字,下划线组成,不能以数字开头;
- 注意:应该让变量名称有意义;
- = :赋值符号 前后不能有空格;
- 值: 所有的字符串和数字都可以;
- 引用变量: $变量名 或 ${变量名}。
例:
[root@localhost opt]# a=100
[root@localhost opt]# echo $a
100
[root@localhost opt]# echo $aa
# 这里输出为空,因为解释器认为$aa是变量
[root@localhost opt]# echo ${a}a
100a
- 查看变量: echo $变量名
- set(所有变量:包括自定义变量和环境变量)
- 取消变量: unset 变量名 仅在当前shell中有效
- 作用范围: 仅在当前shell中生效
五、位置变量
$0 $1 $2 $ 3 $4 $5 $6 $7 $n
[root@master srv]# cat test.sh
#!/bin/bash
#...
echo 我的第一个位置参数是:$1
echo 我的第二个位置参数是:$2
echo 我的第三个位置参数是:$3
echo 我的第四个位置参数是:$4
echo 一共有 $# 个位置参数
echo 你输入的参数分别是:$*
[root@master srv]# sh test.sh 1 2 3 4 5
我的第一个位置参数是:1
我的第二个位置参数是:2
我的第三个位置参数是:3
我的第四个位置参数是:4
一共有 5 个位置参数
你输入的参数分别是:1 2 3 4 5