目录
命令:
1.env 查看环境变量
2.set 显示系统中已经存在的shell变量,以及设置变量的新变量值
1、变量定义规定:
2、变量的分类:
1.用户自定义变量:
2.环境变量:
3.位置参数变量:
4.预定义变量:
用户自定义变量详解:
1)变量定义:
2)变量调用:
3)变量查看:
环境变量详解:
1)环境变量设置与删除:
2)系统默认环境变量:
查询PATH环境变量的值:
LANG语系变量
位置参数变量详解:
演示$定义变量:
演示$$预定义变量效果:
接收键盘输入:read
read命令实例演示:
命令:
1.env 查看环境变量
2.set 显示系统中已经存在的shell变量,以及设置变量的新变量值
-u 如果设定此选项,调用未声明的变量时会有提示 (-u开启,+u关闭)
-x 如果设定此选项,在命令执行之前,会吧命令先输出一次(-x 开启 +x关闭)
unset 变量名:关闭变量
用某个特定字符串代表不固定的内容就是变量。
(变量使用的是内存使用空间)
在shell中定义变量的格式为:
name=[value]
如果value没有指定,变量将被赋值为空字符串。
1、变量定义规定:
1)变量名称可以由字母、数字和下划线组成,但不能以数字开头。
2)在bash中,变量的默认类型都是字符串型。 如果要进行数值运算,则 必须修改指定变量类型为数值型。
3)变量用等 连接值,等 左右两边不能有空格。
4)变量的值如果有空格,需要使用单引 或双引 包括。 其中双引 括起 来的内容“$” “” “`”(反引 )都拥有特殊含义,而单引 括起 来的内容都是普通字符。
5)在变量的值中,可以使用转义符。
6)如果需要增加变量的值,那么可以进行变量值的叠加,不过变量需要用 双引 包含”$变量名”或用${变量名}包含变量名。
例:
7)如果是把命令的结果作为变量值赋予变量,则需要使用反引 或$()包含 命令。
例:
(把test的变量设置为date的值,unset是关闭变量的命令。)
8)在字符串中调用变量的值,需要加花括 。
2、变量的分类:
1.用户自定义变量:
这种变量是最常见的变量,由用户自由定义变量命名和变量的值。
2.环境变量:
在bash中预设了很多环境变量,在工作中我们可以直接调用这些变量。
环境变量的变量名可以自由定义,但一般对系统起作用的环境变量名是系统预先设定好的。 比如当前用户ID (UID)、当前用户家目录(HOME)、前一个工作目录(OLDPWD)、还有最常用的PATH。
这里我们重点解释一下PATH变量,在Linux系统中,我们输入cd可以切换目录。 Linux系统是通过PATH变量来搜索命令的,系统会按照PATH变量里目录的顺序查找该命令,如果所有目录都没找到命令,则提示命令未找到(排除别名的情况下)。
3.位置参数变量:
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
4.预定义变量:
是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
用户自定义变量详解:
1)变量定义:
(上列截图中分别演示了:变量名不能以数字开头:在等 的两边不能有空格:变量的值如果有空格则要使用引 包含)
2)变量调用:
定义变量name,输出变量name的值)
3)变量查看:
命令:set :显示系统中已经存在的shell变量,以及设置shell变量的新变量值。
set 【选项】
子选项:
-u:如果设定此选项,调用未声明的变量时会有提示(-u开启,+u关闭)。
-x:如果设定此选项,在命令执行之前,会把命令先输出一次(-x开启,+x关闭)。
例:
(用set命令,然后用grep命令找出name行。如果直接用set命令,会查询系统中所有变量,包含用户自定义变量和环境变量)
file是没定义过变量的,因此用echo输出的时候,输出结果为空。但如果我们定义一个变量为空的话。那么就会和未定义变量混淆。所以我们用set -u命令。命令执行后,如果确实没有定义变量的话那么就会 错)(如果想关闭此功能用set +u命令)
(如果设定了-x选项,会在每个命令执行之前,先把命令输出一次。)
变量删除:unset 变量名
环境变量详解:
1)环境变量设置与删除:
(以上截图中,首先声明了变量age=18.然后用export命令声明为环境变量。之后用env命令找到age=18。证明环境变量声明成功。然后用【unset 变量名】格式删除变量。再次查找发现未找到age相关环境变量。)(env和set的区别是,set命令可以查看所有变量,而env命令只能查看环境变量。)(还可以使用export age=18的方式在声明环境变量的同时赋值,两种赋值方式都会在env和set中找到赋值变量,命令执行结果并无差别。)
2)系统默认环境变量:
[root@localhost ~]# env
HOSTNAME=localhost.localdomain #主机名
TERM=xterm #终端环境
SHELL=/bin/bash #当前shell
HISTSIZE=1000 #历史命令条数
SSH_CLIENT=192.168.21.251 2761 22 #当前操作环境。用ssh连接,这里标记了客户端IP。
QTDIR=/usr/lib64/qt-3.3 #环境变量相关配置
QTINC=/usr/lib64/qt-3.3/include #环境变量相关配置
SSH_TTY=/dev/pts/1 #ssh连接的终端是pts/1
USER=root #当前登录的用户LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;0。。。。。。。。。。。。。。。。
pf=01;36: #颜色相关设置
MAIL=/var/spool/mail/root #用户邮箱
PATH=/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #PATH变量,系统查找命令的路径
PWD=/root #当前用户所在目录
LANG=zh_CN.UTF-8 #语系
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass #SSH相关配置
HISTCONTROL=ignoredups #此条目会删除历史命令中的重复命令。连续重复的命令,在历史命令中只会识别成一条。
SHLVL=1 #当前在第一层shell中。
HOME=/root #当前用户家目录
LOGNAME=root #当前用户名称
QTLIB=/usr/lib64/qt-3.3/lib #桌面相关环境变量
CVS_RSH=ssh #远程连接方式
SSH_CONNECTION=192.168.21.251 2761 192.168.21.44 22 #SSH连接的客户端IP和端口
LESSOPEN=|/usr/bin/lesspipe.sh %s #压缩包过滤相关环境变量
G_BROKEN_FILENAMES=1 #让GTK2使用LOCALES中的编码方式处理文件名
_=/bin/env #上次使用命令的最后一个参数或命令本身
env命令可以查询到所有的环境变量。 可是还有一些变量虽然不是环境变量,却是和bash操作接口相关的变量。 这些变量只能用set命令来查看了。
下面我们列出
set中重要内容:
[root@localhost ~]# set
BASH=/bin/bash #bash的位置
BASH_VERSINFO=([0]=”4″ [1]=”1″ [2]=”2″ [3]=”1″ [4]=”release” [5]=”x86_64-redhat-linux-gnu”) #bash的版本
BASH_VERSION=’4.1.2(1)-release’ #bahs版本
COLORS=/etc/DIR_COLORS #颜色记录文件
HISTFILE=/root/.bash_history #历史文件保存位置
HISTFILESIZE=1000 #在文件中记录的历史命令 最大条数
HISTSIZE=1000 #在缓存中记录的历史命令最大 条数
HOME=/root #家目录位置
HOSTNAME=localhost.localdomain #主机名
HOSTTYPE=x86_64 #主机类型
ID=0 #用户ID
IFS=$’ tn’ #内部域分隔符
LANG=zh_CN.UTF-8 #语系环境
LESSOPEN=’|/usr/bin/lesspipe.sh %s’ #压缩包过滤相关环境变量
LINES=35
LOGNAME=root
MACHTYPE=x86_64-redhat-linux-gnu #软件类型是i386兼容类型
MAIL=/var/spool/mail/root #邮箱位置
MAILCHECK=60 #每60秒去扫描新邮件
PATH=/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PPID=2543 #父shell的PID
PS1='[u@h W]$ ‘ #命令提示符
PS2=’> ‘ #如果第一行命令没有输入完成,第二行命令的提示符
PS4=’+ ‘ #“set -x”用来修改跟踪输出的前缀。(Shell脚本中使用select时的提示符)
PWD=/root #当前所在目录
UID=0 #当前用户的UIDPATH变量:系统查找命令的路径
查询PATH环境变量的值:
【】# echo $PATH
/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PATH变量的值是用:分割的路径,这些路径就是系统查找命令的路径。就是说当我们输入了一个命令后,如果没写路径,系统就会到PATH变量定义的路径中去寻找是否有可执行的程序。如果没有写入路径,则会返回“命令没有发现”的错误。那么也就就是说我们把自己的脚本拷贝到PATH变量定义的路径中,我们自己定义脚本也可以不输入路径而直接运行!
【】# vim hb.sh
[】# chmod 755 hb.sh
【】# cp /root/hb.sh /bin/
【】# cd /tmp/
【】]# hb.sh
ROUSHANN!!
(在上面实验中,我创建了一个hb.sh的脚本。然后赋予权限,复制到/bin/。切换目录之后,仍然能直接执行脚本。说明cp的方式可以直接将脚本添加至环境变量中。)
那么接下来,我们用变量叠加的方法试着修改PATH变量的值。达到相同的效果。(删除之前/bin/hb.sh)
【】# rm -rf /bin/hb.sh
【】# PATH=”$PATH”:/root/
[】# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/
[root@localhost tmp]# hb.sh
ROUSHANN!!
(首先删除了之前复制进/bin/目录的脚本。然后用变量叠加的方式在PATH中添加了/root/目录。接下来执行hb.sh成功。)
当然,我们这种定义PATH变量的方式只是临时生效,一旦重启或注销就会消失,如果想要永久生效,需要写入环境变量配置文件,我们在之后的课程中会详细介绍。
PS1变量:命令提示符设置
PS1变量是用来定义命令行提示符的,看可以按照我们自己的需求来定义自己喜欢的提示符。PS1支持的选项有:
d:显示日期,格式为“星期 月 日”
H:显示完整的主机名。如默认主机名:localhost.localdomain
h:显示简写主机名。默认为:localhost
T:显示12小时制时间,格式为HH:MM:SS
t:显示24小时制时间,格式为HH:MM:SS
A:显示24小时制时间,格式为HH:MM
@:显示12小时制时间,格式为HH:MM am/pm
u:显示当前用户名
v:显示Bash的版本信息
W:显示当前所在目录的最后一个目录
w:显示当前所在目录的完整路径
#:执行的第几个命令
$:提示符。如果是root会显示提示符为“#”如果是普通用户会显示提示符为“$”
选项应用实例:
[root@localhost ~]# echo $PS1
[u@h W]$
[root@localhost ~]# PS1='[u@t w]$’
[root@22:5
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!