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

 

环境变量

  • 全局变量
  • 局部变量

全局:对于shell会话和所有子shell都是可见的

局部:只在当前shell会话中使用

 

查看全局变量命令

[root@tzPC ~]# env |more
XDG_SESSION_ID=25
HOSTNAME=tzPC
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.149.1 56410 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
...

输出HOSTNAME全局变量的值

[root@tzPC ~]# echo $HOSTNAME
tzPC

  使用export把局部变量改为全局变量

export VAR1="tz is good"

 这种方式在新开的xshell窗口中是读不到变量的值,需要写入配置文件永久生效

 

当登录系统或新开启一个ssh连接启动bash进程时,一定会加载这4个配置文件:

/etc/profile    #系统全局环境和登录系统的一些配置

 /etc/bashrc    #bash全局自义配置文件,用于自定义bash

/root/.bashrc   #用于单独自定义某个用户的bash(此例中是定义root用户)

/root/.bash_profile  #用户单独自定义某个用户的系统环境

这4个配置文件是依次执行的,里面都是脚本,如果被写入了木马程序就会被执行。

 

设置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

 或者在上述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

 

 

 

SHELL特殊变量

上一篇:将数据库select出来的数据转化为与相应databean对应的字典


下一篇:Python+Django+SAE系列教程13-----MySQL记录的添\删\改