三、Shell特殊变量

SHELL中单引号和双引号的区别

  1. ‘’ 在单引号中所有的字符包括特殊字符($,'',`和\)原来是什么就是什么。
  2. “” 在双引号中,$, '', `和\会被当成命令解释,其他的原来是什么就是什么。

注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用

例:

[root@tzPC ~]# var1=123
[root@tzPC ~]# echo $var1
123
[root@tzPC ~]# echo \$var1
$var1

 给变量赋值,包含空格时需要使用单引号或双引号

[root@tzPC ~]# var8='tz good'

 单引号跟双引号的区别

[root@tzPC ~]# var8=good
[root@tzPC ~]# var9='tz is $var8'
[root@tzPC ~]# var10="tz is $var8"
[root@tzPC ~]# echo $var9
tz is $var8
[root@tzPC ~]# echo $var10
tz is good

 删除变量,注意没有$

[root@tzPC ~]# unset var1

 

设置PATH环境变量

SHELL要执行某个程序,会在系统搜索这个程序的路径,PATH变量就是用来定义BASH查找命令的目录,当我们安装了第三方程序后,可以把第三方程序bin目录追加到PATH后面,就可以全局调用这个程序。

[root@tzPC ~]# cat /opt/backup
#!/bin/bash
echo "Backup data is OK!"

[root@tzPC ~]# backup
-bash: backup: command not found
[root@tzPC ~]# PATH=/opt/:$PATH
[root@tzPC ~]# chmod +x /opt/backup
[root@tzPC ~]# backup
Backup data is OK!

 此时的PATH变量为

[root@tzPC ~]# echo $PATH
/opt/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

 也可以换行输出查看

[root@tzPC ~]# echo -e ${PATH//:/'\n'}
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin

 

或者在上述4个配置文件中追加上如下环境变量,不过不建议

export PATH=/opt/:$PATH

 重新加载配置文件,或者重新登陆

source /etc/profile

 

SHELL位置变量

SHELL解释执行用户命令时,将命令的第一个字符作为命令名,其他字符作为参数

$0 获取当前执行脚本的文件名,包括脚本路径,命令本身

$n 获取当前脚本的第n个参数,n=1,2....n,当n大于0用${10}表示

 例:

[root@tzPC ~]# cat print.sh 
#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "第三个参数: $3"
echo "第四个参数: $4"
[root@tzPC ~]# chmod +x print.sh 
[root@tzPC ~]# ./print.sh 1 2 3 4.txt
脚本名称: ./print.sh
第一个参数: 1
第二个参数: 2
第三个参数: 3
第四个参数: 4.txt

 

SHELL特殊变量

这些变量一执行程序就被定义了

$*

以一个单字符串显示所有向脚本传递的参数;

如"$*"用【"】括起来的情况、以"$1 $2 … $n"的形式输出所有参数

$#

传递到脚本的参数个数

$$

当前进程的进程号PID

$?

显示最后命令的退出状态;0表示没有错误,其他任何值表明有错误

$!

后台运行的最后一个进程的进程号pid

!$ 上一个命令的最后一个参数

举例

[root@tzPC ~]# cat special_var.sh 
#!/bin/bash
echo '$* 这个脚本的所有参数:' $*
echo '$# 表示这个程序参数个数:'  $#
echo '$$ 表示程序的进程ID: ' $$

touch /tmp/b.txt &
echo 'touch /tmp/b.txt &'
echo '$! 表示上一个后台脚本的PID:' $!
echo '$$ 表示程序的进程ID:' $$
echo '$? 表示上一个脚本执行返回的结果:'$?


[root@tzPC ~]# chmod +x special_var.sh 
[root@tzPC ~]# ./special_var.sh 1 2 3 
$* 这个脚本的所有参数: 1 2 3
$# 表示这个程序参数个数: 3
$$ 表示程序的进程ID:  6034
touch /tmp/b.txt &
$! 表示上一个后台脚本的PID: 6035
$$ 表示程序的进程ID: 6034
$? 表示上一个脚本执行返回的结果:0

 

数组变量

能存储多个值的变量

数组的赋值

[root@tzPC ~]# mytest=(one tow three four five)

 取值

[root@tzPC ~]# echo ${mytest[0]}
one

数组索引值都是从0开始的

显示整个数组变量,可用*通配符

[root@tzPC ~]# echo ${mytest[*]}
one tow three four five

修改数组值

[root@tzPC ~]# mytest[2]=3
[root@tzPC ~]# echo ${mytest[*]}
one tow 3 four five

删除数组值

[root@tzPC ~]# unset mytest[2]
[root@tzPC ~]# echo ${mytest[*]}
one tow four five
[root@tzPC ~]# echo ${mytest[2]}

 注意删除数组某个值,显示所有看起来没有了,其实该值为空

 

posted @ 2020-07-15 16:27  努力吧阿团  阅读(167)  评论(0编辑  收藏  举报