Chinaunix首页 | 论坛 | 博客
  • 博客访问: 380364
  • 博文数量: 181
  • 博客积分: 215
  • 博客等级: 民兵
  • 技术积分: 313
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 19:39
个人简介

王的男人

文章分类

全部博文(181)

文章存档

2016年(2)

2015年(35)

2014年(17)

2013年(84)

2012年(49)

我的朋友

分类: LINUX

2013-03-29 22:20:37


Abstract:
1)Linux shell 的变量在使用前不需要进行类型声明就可以直接赋值;
2)Linux shell 里面所有变量都是以字符串的形式保存;
3)Linux shell 里面有许多特殊的隐藏变量,他们被 shell 或者操作系统自身所引用,被称之为环境变量;

1, 查看与系统相关的环境变量:
每一个进程在启动的时候,系统会把环境变量传递给这个进程。
1.1 在 linux shell 中查看系统环境变量可以使用 env 命令:
1.2 在 linux shell 中查看与指定进程相关的环境变量:

  1. #启动一个进程 gedit
  2. gedit&
  3. #查看该进程的进程号 (PID)
  4. pgrep gedit
  5. #查看与该进程相关的环境
  6. ls /proc/$PID/
  7. #查看与该进程相关的环境变量
  8. cat /proc/$PID/environ


由上面的操作可以看到与进程相关的环境变量以 name=value 的格式输出,并且所有的变量都没有换行地接连输出;
事实上每个环境变量都是一个以'\0'结尾的字符串;

如果我们把 '\0' 替换成 '\n' , 每个环境变量输出的结束都会换行;
我们可以使用 'tr' 命令完成替换的操作:

2,Shell 变量的赋值:
2.1 Shell 变量的赋值:
变量的赋值操作方式如下:

  1. var=value
var 是变量名,value 为变量值;
如果变量值不包含任何空格字符,可以直接赋值给变量;
如果变量值包含空格字符,则必须包括在双引号 "" 或者单引号 '' 内;
如:

  1. var="Hello world."
3, Shell 变量的引用:

1)$var ,在变量前面加 "$" 符号;
2)${var} ,使用 "$" 符号prefix的同时,使用 {} 把变量包括起来;
3.1 experiment:

  1. var="value";
  2. echo $var;
  3. echo ${var};

  4. var="\$HOME:$HOME \$UID:$UID";
  5. echo ${var};

如红框所示,如果变量值里面包括有空格,则必须使用双引号或者单引号把变量包起来在对变量赋值;
note :
var=value 与 var = value 是不一样的操作;
前者是赋值操作,后者则是比较操作;
3.2 在 printf 或者 echo 的双引号输出信息中引用变量:

  1. fruit=apple;
  2. count=5.12345;
  3. echo "There are $count $fruit(s)";
  4. printf "\e[1;31mThere are %-5.2f %ss.\e[0m\n" $count $fruit;


3.3 在通过变量获取变量值的字符串长度:

  1. echo -e "\e[1;32mLength of PATH is: ${#PATH} .\e[0m";
  2. printf "\e[1;33mPrintf the length of PATH is: %5d .\e[0m\n" ${#PATH};
  3. printf "\e[1;33mPrintf the length of PATH is: ${#PATH} .\e[0m\n";

通过在 ${#var} 的形式引用变量,获取变量值的字符串长度

4,隐藏的环境变量:
4.1 查看当前使用的 shell :

  1. echo "\$SHELL == $SHELL";
  2. echo "\$BASH == $BASH";
  3. echo "\$0 == $0";
  4. echo "\$UID == $UID";
note:
1)$SHELL 与 $BASH 是系统环境变量标识当前使用的 shell 是什么,如图所示,当期使用的是 bash ;
2)$0 是系统传入当前 shell 的第一个变量,也即是当前 shell 的执行程序;
    如上图所示,因为是在一个名为 “01variables.sh” 的脚本文件里面执行,所以 $0 为  “01variables.sh”
    如果在 shell 中直接执行 echo $0 则输出为当前的 shell 程序的名称,如下图所示:
4.2 校验当前用户是否超级用户:

  1. if [ $UID -ne 0 ]; then
  2. printf "\e[1;31mRunning as %s,please run as root!\e[0m\n" $UID;
  3. else
  4. printf "\e[1;32mRunning as root.\e[0m\n";
  5. fi

note:
1)因为 $UID 是当前 shell 用户的用户 ID ,并且 root 用户的用户ID是 0 ,所以只要校验当前shell的 $UID 环境变量就可以知道当前shell的用户是否超级用户。



阅读(342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~