码迷,mamicode.com
首页 > 系统相关 > 详细

shell 变量

时间:2016-10-26 19:20:54      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:性问题   权限   标准   包含   logo   用户创建   variable   多个   column   

一、shell 变量简介

定义:变量是用来存储非固定值的载体,它具有一个值,以及零个或多个属性
语法:name=[value]   //如果value没有指定,变量将被赋值为空字符串

 

二、shell 变量的分类

1.  环境变量

环境变量又称全局变量,环境变量是全局的,它适用于所有当前shell以及其派生出来的任意子进程,有些变量是用户创建的,其他的则是专用的shell变量。环境变量的配置文件是/etc/profile

我们可以使用env命令来查看环境变量:

[root@root ~]# env
HOSTNAME=root
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.230.1 56923 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
.....

也可以用set命令来查看环境变量:

[root@root ~]# set    //set比env显示的信息更全,包括用户自定义的变量
BASH=/bin/bash
BASH_VERSION=‘4.1.2(1)-release‘
COLORS=/etc/DIR_COLORS
COLUMNS=80
DIRSTACK=()
EUID=0
ID=0
IFS=$‘ \t\n‘
LANG=zh_CN.UTF-8
LESSOPEN=‘|/usr/bin/lesspipe.sh %s‘
LINES=24
LOGNAME=root
......

 

如何查看环境变量的值:

[root@root ~]# echo $HOSTNAME
root
[root@root ~]# echo $USER
root


2.  局部变量

局部变量只适用于当前shell,子进程不会继承这样的变量

如何自定义局部变量:

[root@root ~]# a=1         //定义局部变量
[root@root ~]# echo $a     //查看局部变量
1
[root@root ~]# unset a     //删除局部变量

我们可以通过typeset把变量设置成只读,这样变量的值就不会被随意修改了:

[root@root ~]# a=1            //定义局部变量
[root@root ~]# typeset–r a    //添加readonly只读属性
[root@root ~]# a=2            //再尝试修改变量的值是不可以的
bash:a:readonly variable

我们可以通过read命令来设置变量,read从标准输入中读取变量值,使用-p可以添加相应的提示信息:

[root@root ~]# read var        //回车后输入要赋值给变量var的值
100
[root@root ~]# echo $var       //查看var的值
100
[root@root ~]# read -p "Please input a number: " var
Please input a number: 99      //在提示符后面输入要赋值给变量var的值
[root@root ~]# echo $var
99

我们也可以把局部变量做相互运算:

[root@root ~]# a=1
[root@root ~]# b=2
[root@root ~]# c=$a+$b
[root@root ~]# echo $c        //得出来的结果不是3而是1+2,并不是我们想要的
1+2

[root@root ~]# c=$[$a+$b]     //应该这样写
[root@root ~]# echo $c
3

 

变量名规则:

1.变量名只能由英文、数字、下划线组成且不能以数字开头
2.变量名不要使用大写字母,避免与系统中的环境变量混淆
3.变量名不要使用系统的命令,如ls、which、cd等
4.变量名不要使用关键字,如if、for、do、done等
5.变量内容有特殊字符时要用单引号引起来,如空格、#、*等
6.变量内容含有变量时要用双引号引起来

[root@root ~]# a_2=0    //以字母开头
[root@root ~]# _a2=0    //以下划线开头
[root@root ~]# 2_a=0    //不能以数字开头
-bash: 2_a=0: command not found

 

3.  参数变量

注:这里的参数变量一般用在shell脚本中

#!/bin/bash
echo $0
echo $1
echo $2
echo $3

执行结果:

[root@root ~]# sh test.sh a b c
test.sh     //$0接收脚本名作为参数
a           //$1接收第一个参数
b           //$1接收第二个参数
c           //$1接收第三个参数 

 

三、变量相关的命令

1.  bash命令

BASH是Shell的一种,bash命令可以进入一个全新的子shell环境,之前定义的变量都会失效,如果想要定义的变量有效,必须把变量声明为全局变量(命令为export)

[root@root ~]# a=123            //定义一个变量
[root@root ~]# bash             //执行bash命令之后定义的变量失效
[root@root ~]# echo $a

[root@root ~]# export a=123     //通过export命令声明为全局变量
[root@root ~]# bash             //执行bash命令之后定义的变量仍有效
[root@root ~]# echo $a
123

 

2.  export命令

使用name=[value]的形式定义的变量默认仅在当前shell中有效,子进程不会继承这样的变量,使用export命令会将变量放入环境中,这样新的进程会从父进程那里继承环境,export可以直接定义环境变量并赋值,也可以先定义一个普通的用户变量,再通过export转换为环境变量。

[root@root ~]# a=1          //定义一个变量
[root@root ~]# bash         //在当前shell下开启新进程bash
[root@root ~]# echo $a      //查看变量值为空
[root@root ~]# a=1          //定义一个变量
[root@root ~]# export a     //用export将变量添加至环境
[root@root ~]# bash         //在当前shell下开启新进程bash
[root@root ~]# echo $a      //再查看变量值就不是空值了
1
[root@root ~]# export a=1   //也可以直接定义环境变量
[root@root ~]# bash
[root@root ~]# echo $a
1 

 

扩展:如何自定义环境变量

方法1:控制台中

只是临时使用,因为换个shell,你的设置就无效了,这种方法只针对特定的shell
配置:$PATH="$PATH:/my_new_path"

方法2:修改/etc/profile文件

设置系统全局环境变量和启动程序,当用户登录Linux时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。预设的系统全局变量包括PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等。该设置永久有效,所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。这里是针对所有的用户的,所有的shell(如果你的计算机仅仅作为开发使用时推荐使用这种方法)
配置:vim /etc/profile
export PATH="$PATH:/my_new_path"
配置完后执行source /etc/.bashrc使配置生效

方法3:修改~/.bash_profile文件

定义用户专有的环境变量和启动程序。当用户登录时,该文件仅仅执行一次。默认情况下,它设置了一些环境变量,执行用户的.bashrc文件。针对某一个特定的用户,把使用这些环境变量的权限控制到用户级别,这里是如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了,这种方法更为安全
配置:vim ~/.bash_profile
export PATH="$PATH:/my_new_path"
配置完后执行source /root/.bashrc使配置生效

方法4:修改/etc/bashrc文件

为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。默认情况下,这个文件主要预设umask以及PS1等。/etc/bashrc不需要重启生效,重新打开一个bash即可生效,/etc/bashrc对所有用户新打开的bash都生效

方法5:修改~/.bashrc文件

该文件包含专用于用户的shell的bash信息,当用户登录时以及每次打开新的shell时,该该文件被读取。可以将用户自定义的alias和变量写到这个文件中。~/.bashrc只对当前用户新打开的bash生效,~/.bashrc中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

方法6:修改~/.bash_logout文件

当每次退出系统(退出bash shell)时,执行该文件

 

shell 变量

标签:性问题   权限   标准   包含   logo   用户创建   variable   多个   column   

原文地址:http://www.cnblogs.com/pzk7788/p/6001181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!