三、Shell特殊变量
SHELL中单引号和双引号的区别
- ‘’ 在单引号中所有的字符包括特殊字符($,'',`和\)原来是什么就是什么。
- “” 在双引号中,$, '', `和\会被当成命令解释,其他的原来是什么就是什么。
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用
例:
[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]}
注意删除数组某个值,显示所有看起来没有了,其实该值为空
今天的学习是为了以后的工作更加的轻松!