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
环境变量
- 全局变量
- 局部变量
全局:对于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