在shell脚本中变量主要分为
- 用户自定义变量
- 环境变量
- 位置参数变量
- 预定义变量
注意
- 默认变量类型为字符串类型
- 赋值操作等号两边不应该有空格
用户自定义变量
Linux中最常用的变量,用户可自由定义,只在当前的shell生效。
变量定义与调用
$ var=”aa” #为变量var赋值”aa”
$ echo $var #切记变量名前加$
aa
变量调用还有多种写法
$ echo “$var” #可以用双引号将变量括起来
aa
$ echo “$var”test
aatest
$ echo ${var} #可以用大括号讲变量名括起来
aa
$ echo ‘$var’ #如果用单引号括起来,则只会原样输出
$var
删除自定义变量
unset var #unset 变量名,注意:变量名前不需要$
环境变量
主要保存和系统操作环境相关的数据,在当前的shell以及其子shell中生效。
启动一个子shell
$ bash #使用bash来创建一个子shell
$ exit #退出子shell
环境变量定义与调用
$ export var=”aa” #采用expert 变量名=变量值 方式
或者
$ var=”aa”
$ export var #采用expert 变量名 方式
子shell中能够使用父shell环境变量
$ expert var=”aa”
$ bash #在当前shell创建一个子shell
$ echo $var
aa
删除环境变量
$ unset var
#删除环境变量,注意:在子shell中删除环境变量后父shell环境变量不受影响
常用环境变量
PATH
系统查找命令路径
$ PATH=”$PATH”:/bin/java #为PATH添加一个/etc/java路径
PS1
定义系统提示符
其特殊符号所代表的含义:
\d :代表日期,格式为weekday month date
\H :完整的主机名
\h :简写主机名
\t :显示时间为24小时格式,格式为:”HH:MM:SS”
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。
\W :显示当前目录最后一个目录
\# :执行的第几个命令
$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
位置参数变量
主要像脚本中传递参数或数据,变量名不能自定义,变量作用固定。1
- $0 代表命令本身
- 1, 2, 3...., 9第一个参数,第二个参数,第三个参数,第九个参数, 十以上的参数用${10}表示
- $*代表命令中所有的参数,把所有的参数看成一个整体
- $@也代表命令中所有的参数,把每个参数区分对待
- $#代表命令中所有参数的个数
#positionPar.sh
#!/bin/bash
echo $0
echo $1
echo $2
echo $*
echo $@
echo $#
执行结果:
$ chmod +x positionPar.sh
$ ./positionPar.sh p1 p2 p3
./positionPar.sh
p1
p2
p1 p2 p3
p1 p2 p3
3
执行结果显示$@与$*是相同的,接下来再写一个脚本来验证这来这两个的区别
#checkDiff.sh
#区分$@与$*
#!/bin/bash
x=0
for i in "$*"
do
x=$(($x+1))
echo "number is $x,value is $i"
done
y=0
for j in "$@"
do
y=$(($y+1))
echo "number is $y,value is $j"
done
执行结果:
$ chmod +x checkDiff.sh
$ ./checkDiff.sh 1 2 3
number is 1,value is 1 2 3
number is 1,value is 1
number is 2,value is 2
number is 3,value is 3
预定义变量
是bash中已经定义好的变量,变量名不能定义,变量作用也固定。
- $? 最后一次执行的命令返回状态。如果这个变量为0,证明上一个命令正确执行;如果这个变量非0,则证明上一个命令不正确
- $$当前进程的进程号(PID)
- $!后台运行的最后一个进程的进程号(PID)
$?
$ echo ‘a’ #执行一个正确的命令
a
$ echo $?
0
$ dfdf #执行一个错误的命令(找不到该命令)
$ echo $?
127
$!
可以在执行命令最后加&来代表后台执行