文档章节

Linux环境变量

浮躁的码农
 浮躁的码农
发布于 2015/04/25 15:57
字数 3073
阅读 12
收藏 0

1. 用户自定义变量

(1)变量设置规则

① 变量名称可由字母、数字和下划线组成,但不能以数字开头

② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型

③ 变量用等号连接值,且等号两侧不能有空格

④ 变量的值如果有空格,需使用单引号或双引号括起

⑤ 变量的值中,可使用"\"转义符;

⑥ 如果需要增加变量的值,可以进行变量值的叠加,不过变量需要用双引号包含,即"$变量名",或者用${变量名}包含

⑦ 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令

⑧ 环境变量名建议大写,便于区分

(2)变量分类

① 用户自定义变量

② 环境变量:主要保存与系统操作环境相关的数据;

③ 位置参数变量:用于向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的;

④ 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量的作用也是固定的。

(3)本地变量

① 变量定义:

[root@localhost ~]# name="ws" [root@localhost ~]# echo "$name" ws

② 变量叠加:

复制代码
[root@localhost ~]# aa=123 [root@localhost ~]# aa="$aa"456 [root@localhost ~]# aa=${aa}789 [root@localhost ~]# echo $aa 123456789
复制代码

③ 变量查看:

复制代码
[root@localhost ~]# set

aa=123456789 colors=/etc/DIR_COLORS

name=ws
复制代码

④ 变量删除

[root@localhost ~]# unset name

2. 环境变量

1)用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和该shell的所有子shell中生效。如果把环境变量写入相应的配置文件中,那么该环境变量就会在所有的shell中生效

父shell中创建子shell,可在当前shell中通过命令bash或csh来创建。可通过pstree命令(功能:确定进程数)来查看父shell与子shell的关系

例:

复制代码
[root@localhost ~]# bash

[root@localhost ~]# pstree

........

sshd───sshd───bash───bash───pstree
复制代码

其中,sshd为远程连接工具,第一个bash为父shell,第二个bash是子shell,退出子shell只需输入命令exit即可。

2)设置环境变量

格式为:export 变量名=变量值

例:

#将age和sex变量设置为环境变量

复制代码
[root@localhost ~]# name=ws

[root@localhost ~]# export age=26 [root@localhost ~]# sex=male

[root@localhost ~]# export sex
复制代码

#然后在当前shell和子shell中进行查看

复制代码
[root@localhost ~]# set

name=ws

age=26 sex=male

[root@localhost ~]# bash

age=26 sex=male
复制代码

3)查询环境变量的命令为:env,删除变量的命令为:unset 变量名

4)系统常见环境变量

① PATH:系统查找命令的路径,系统命令并没有写路径就可执行,如ls,是由于PATH环境变量的作用。因此自己写的脚本拷贝到PATH指定的路径中,无需写路径即可直接执行

例:

复制代码
[root@localhost ~]# env | grep PATH

PATH=/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

#PATH变量叠加

PATH="$PATH":/root/sh
复制代码

② PS1:定义系统提示符的变量

提示符

含义

\d

显示日期,格式为"星期 月 日"

\h

显示简写主机名

\T

显示12小时制时间,格式为"HH:MM:SS"

\A

显示24小时制时间,格式为"HH:MM"

\u

显示当前用户名

\w

显示当前所在路径的完整名称

\W

显示当前所在目录的最后一个目录

\#

执行的第几个命令

\$

提示符,root用户为"#",普通用户为"$"

例:

复制代码
[root@localhost ~]# PS1='[\u@\t \w]\$ ' [root@05:46:29 ~]# PS1='[\u@\h \# \W]\$ ' [root@localhost 12 ~]# PS1='[\u@\h \W]\$ ' [root@localhost ~]#
复制代码

3. 位置参数变量

1)

位置参数变量

作用

$n

n为数字,$0代表命令本身,$1-$9代表第一道第九个参数,十以上的参数需要用大括号包含,如${10}

$*

代表命令行中所有的参数,$*把所有的参数看成一个整体

$@

也代表命令行中所有的参数,不过$@把每个参数区分对待

$#

代表命令行中所有参数的个数

例1:写param.sh脚本

复制代码
[root@localhost sh]# vim param.h

#!/bin/sh echo $0 echo $1 echo $2 echo $3
复制代码

验证$n,向脚本中传递参数

复制代码
[root@localhost sh]# ./param.h 11 12 13 1 2 ./param.h 11 12 13
复制代码

例2:param1.sh脚本

复制代码
[root@localhost sh]# vim param1.h

#!/bin/bash

 

num1=$1 num2=$2 sum=$(( $num1 + $num2 )) echo $sum
复制代码

验证:

[root@localhost sh]# ./param1.sh 1 2 3

例3:写param3.sh

复制代码
[root@localhost tmp]# vim param3.sh #!/bin/bash

 

#使用$#代表所有参数个数 echo "A total of $# parameters" #使用$*代表所有的参数 echo "The parameter is:$*" #使用$@也代表所有参数 echo "The parameter is:$@"
复制代码

验证:

复制代码
[root@localhost tmp]# ./param3.sh 1 2 3 4 5 A total of 5 parameters

The parameter is:1 2 3 4 5 The parameter is:1 2 3 4 5
复制代码

例4:$*与$@的区别

复制代码
[root@localhost sh]# vim param4.sh #!/bin/bash

 

# $*中所有参看成是一个整体,所以for只执行一次 for i in "$*" do echo "The parameter is:$i" done # $@中每个参数都看成是独立的,会循环多次

x=1 for y in "$@" do echo "The parameter $x is:$y" x=$(( $x + 1 )) done
复制代码

验证:

复制代码
[root@localhost sh]# ./param4.sh 1 2 3 4 5 The parameter is:1 2 3 4 5 The parameter 1 is:1 The parameter 2 is:2 The parameter 3 is:3 The parameter 4 is:4 The parameter 5 is:5
复制代码

4. 预定义变量

1)

预定义变量

作用

$?

shell中最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确

$$

当前进程的进程号(PID)

$!

后台运行的最后一个进程的进程号(PID)

逻辑"&&"和"||"可以通过$?来判断是否正确。

例:编写variable.sh脚本

复制代码
[root@localhost sh]# vim variable.sh #!/bin/bash

 

#输出当前进程PID,该PID即为variable.sh脚本执行时,生成的进程的PID echo "The current process is $$" # &可以将命令放入后台 find /root -name hello.sh & echo "The last one Daemon process is $!"
复制代码

验证:

[root@localhost sh]# ./variable.sh The current process is 1617 The last one Daemon process is 1618

2)read:接收键盘的输入,其格式为:

read [选项] [变量名]

其中,-p "提示信息":在等待read输入时,输出提示信息;

-t 秒数:read命令会一直等待用户输入,使用此选项,可指定等待时间;

-n 字符数:read命令只接受指定的字符数;

-s:隐藏输入的数据,适用于机密信息的输入。

例:

复制代码
[root@localhost sh]# vim readtest.sh #!/bin/bash

 

# 提示"请输入姓名"并等待30s,把用户的输入保存入变量

read -t 30 -p "Please input your name:" name echo "name is $name" # 使用-s选项隐藏输入年龄

read -t 30 -s -p "Please enter your age:" age echo -e "\n" echo "age is $age" # 使用-n 1选项只接收一个输入字符就会执行(不用输入回车)

read -n 1 -t 30 -p "Please select your gender [M/F]:" gender echo -e "\n" echo "sex is $gender"
复制代码

验证:

复制代码
[root@localhost sh]# ./readtest.sh Please input your name:ws

name is ws

Please enter your age:

 

age is 26 Please select your gender [M/F]:M

 

sex is M

5. Bash的运算符

(1)数值运算与运算符

1)declare声明变量类型,其格式为:

declare [+/-] [选项] 变量名

其中,"-"选项表示给变量设定类型属性,"+"选项表示取消变量的类型属性,-i选项表示将变量声明为整数型,-x选项表示将变量声明为环境变量,-p选项显示指定变量被声明的类型

例1:

复制代码
# 定义变量aa和bb

[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 # 声明变量cc,并保存aa和bb的和

[root@localhost ~]# declare -i cc="$aa"+"$bb" # 显示cc的类型

[root@localhost ~]# declare -p cc declare -i cc="33" # 取消cc的类型属性

[root@localhost ~]# declare +i cc [root@localhost ~]# declare -p cc declare -- cc="33"
复制代码

例2:expr或let数学运算工具(使用较少)

复制代码
# 给变量aa和bb赋值

[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 # dd为aa和bb的和,且注意"+"左右两侧必须有空格

[root@localhost ~]# dd=$(expr "$aa" + "$bb")

[root@localhost ~]# echo $dd 33
复制代码

例3:"$(( 运算式 ))"或"$[ 运算式 ]"(使用较多)

复制代码
[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 [root@localhost ~]# ee=$(( $aa+$bb ))

[root@localhost ~]# echo $ee 33 [root@localhost ~]# ff=$[ $aa+$bb ]

[root@localhost ~]# echo $ff 33
复制代码

(2)运算符

优先级

运算符

说明

13

-,+

单目负、单目正

12

!,~

逻辑非、按位取反或补码

11

*,/,%

乘、除、取模

10

+,-

加、减

9

<<,>>

按位左移、按位右移

8

<=,>=,<,>

小于等于,大于等于,小于,大于

7

==,!=

等于、不等于

6

&

按位与

5

^

按位异或

4

|

按位或

3

&&

逻辑与

2

||

逻辑或

1

=,+=,-=,*=,/=,%=,

&=,^=,|=,<<=,>>=

赋值、运算且赋值

例:

复制代码
# 虽然乘和除的优先级高于加,但通过小括号可调整运算的优先顺序

[root@localhost ~]# aa=$(( (11+3)*3/2 ))

[root@localhost ~]# echo $aa 21 # 14不能被3整除,余数是2

[root@localhost ~]# bb=$(( 14%3 ))

[root@localhost ~]# echo $bb 2 # 逻辑与运算

[root@localhost ~]# cc=$(( 1&&0 ))

[root@localhost ~]# echo $cc 0
复制代码

(3)变量测试与内容替换

变量置换方式

变量y没有设置

变量y为空值

变量y设置值

x=${y-新值}

x=新值

x为空

x=$y

x=${y:-新值}

x=新值

x=新值

x=$y

x=${y+新值}

x为空

x=新值

x=新值

x=${y:+新值}

x为空

x为空

x=新值

x=${y=新值}

x=新值

y=新值

x为空

y值不变

x=$y

y值不变

x=${y:=新值}

x=新值

y=新值

x=新值

y=新值

x=$y

y值不变

x=${y?新值}

新值输出到标准错误输出(即屏幕)

x为空

x=$y

x=${y:?新值}

新值输出到标准错误输出

新值输出到标准错误输出

x=$y

例:变量测试:x=${y-新值}

复制代码
[root@localhost ~]# x=${y-new}

[root@localhost ~]# echo $x

new

[root@localhost ~]# y="" [root@localhost ~]# x=${y-new}

[root@localhost ~]# echo $x

 

[root@localhost ~]# y=234 [root@localhost ~]# x=${y-new}

[root@localhost ~]# echo $x 234
复制代码

6. 环境变量配置文件

(1)简介

1)source命令--环境变量配置文件的内容需要重新登录才能生效,source命令的作用是让其直接生效,无需重新登录。其格式为:

source 配置文件 或 . 配置文件

注意:.与配置文件中间有空格,且.的作用即为source的作用

2)环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,如:PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。

系统中的环境变量配置文件主要有:

/etc/profile  ;  /etc/profile.d/*.sh  ;  ~/.bash_profile  ;  ~/.bashrc  ;  /etc/bashrc

(2)作用

环境变量配置文件的先后调用顺序如下图所示:

 

1)/etc/profile的作用有:USER变量;LOGNAME变量;MAIL变量;PATH变量;HOSTNAME变量;HISTSIZE变量;umask;调用/etc/profile.d/*.sh文件;

2)~/.bash_profile的作用: 调用了~/.bashrc文件;在PATH变量后面加入了":$HOME/bin"目录;

3)~/.bashrc的作用:定义默认别名;调用/etc/bashrc;

4)/etc/bashrc的作用:PS1变量;umask变量;PATH变量;调用/etc/profile.d/*sh文件。注意:与/etc/profile不同,/etc/bashrc针对的是没有登录的shell,即不用输入用户名、密码,直接在shell中进行用户切换的情景。

(3)其他配置文件和登录信息

1)注销时生效的环境变量配置文件:~/.bash_logout;

2)其他配置文件:~/bash_history,当系统出现错误时,一个重要的排错手段;

3)shell登陆信息:

对于本地终端欢迎信息:/etc/issue

转义符

作用

\d

显示当前系统日期

\s

显示操作系统名称

\l

显示登录的终端号,比较常用

\m

显示硬件体系结构,如i386,i686等

\n

显示主机名

\o

显示域名

\r

显示内核版本

\t

显示当前系统时间

\u

显示当前登录用户的序列号

Linux本地支持6个本地字符终端,用Alt+F1~F6进行切换,则可通过\l显示当前登录的是哪个终端

注意:/etc/issue只对本地登录有效,对远程登录没有作用

远程终端的欢迎信息:/etc/issue.net,转义符在该文件中不能使用,是否显示此欢迎信息,是由ssh的配置文件(/etc/sshd/sshd_configure)决定的,在该文件中找到"Banner"子串,然后加入"Banner /etc/issue.net"行才能显示。写完之后记得输入service sshd restart命令进行重启ssh服务。

© 著作权归作者所有

共有 人打赏支持
浮躁的码农

浮躁的码农

粉丝 62
博文 727
码字总数 142435
作品 0
松江
程序员
解决“C compiler cannot create executables”的错误

可能你的环境变量被修改了: vi ~/.bashrc 最后可能的环境变量被改变。。。 if [ -f /etc/bash_completion ] && ! shopt -oq posix; then . /etc/bash_completion fi #######下面的加#注释掉...

胃病医生
2013/11/10
0
0
Ubuntu下设置adb环境变量

我的adb已经拷贝到ubuntu下了,但是还没有配置环境变量,那么只能在那个文件夹下使用,所以: $gedit .bashrc 最后一行添加了 export PATH=$PATH:/home/username/platform-tools 保存退出 $s...

雨焰
2012/11/09
0
0
linux RZSZ RZSZ 安装

Linux系统的文件传输工具 系统的文件传输工具系统的文件传输工具 系统的文件传输工具RZSZ RZSZ简介 简介简介 简介 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的, 使用...

brucema
2012/04/14
0
0
Linux环境变量设置命令export(转)

Linux export命令用于设置或显示环境变量。 在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。 ...

easonjim
2017/07/08
0
0
Linux 环境变量和source命令

可能是班门弄斧了,仅share给尚不知道的童鞋。 1. 问题的来源: 为什么我们编译Android代码时,需要输入: source ./build/envsetup.sh 或者 . ./build/envsetup.sh哪? (这里的source和.的...

eastwake
2013/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 种族不同,禁止交往

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《苏菲小姐》- 鱼果 《苏菲小姐》- 鱼果 手机党少年们想听歌,请使劲儿戳(这里) @貓夏:下大雨 正是睡觉的好时候 临睡前...

小小编辑
34分钟前
32
5
Python 搭建简单服务器

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文...

代码打碟手
37分钟前
0
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部