shell编程之变量

来源:互联网 发布:淘宝买家提取神器 编辑:程序博客网 时间:2024/05/16 03:05

感谢原博主:http://sjk2013.iteye.com/blog/1861936


linux shell编程之变量_01

 

计算机硬件是由内核(kernel)管理的。我们能通过shell,KDE或者应用程序和内核通信,好让内核可以控制硬件来完成我们的工作。能够操作应用程序的接口都可以成为shell。shell是linux的任督二脉。只要打通了这二脉,任何武功都能随你运用了。

shell版本众多。有sh,csh等。你可以vim /etc/shells,瞧瞧当前你的linux有多少个可以使用的shell。linux默认是/bin/bash。当我们登入的时候,系统就会给我们一个shell,让我们来工作。而这个shell会记录在/etc/passwd文件内。你可以cat /etc/passwd。瞧瞧系统给你的shell是何方神圣。

我们可以通过tpye来查看bash的内置命令,如:type cd。在bash环境下,如果命令串太长,我们可以使用\,来转义回车键,借用两行来输出。如果我们经常需要知道所有文件及其属性,每次执行ls -al,会觉得有点麻烦,这时,我们可以使用别名,如:alias lm=‘ls -al’。你也可以vim .bash_history,查询曾经做过的操作,至于这一次则会被缓存。

变量是任何一门语言的“皇冠”。比如,y=ax+b。y就是变量,ax+b就是变量的内容。管理账号的时候,腾讯会建立一个变量y。当你申请QQ的时候,此时的x就取你。我们可用“echo $变量名”来显示变量的内容。在设置变量的时候,可借用双引号或单引号来控制,单引号与双引号必须成对。若是单引号,则其内的特殊字符仅为一般字符;若是双引号,则其内的特殊字符,如$,可以保有原本的特性。如,var=“lang is $LANG",则echo $var,可得 lang is en_US。若该变量要增加内容,则可以PATH="$PATH":/home/bin/think。若该变量需要在其他子程序执行,则需要export来使变量变成环境变量:export PATH.通常,大写字符为系统默认变量,用户变量可用小写。我们可以用"unset 变量"来取消变量的设置。

练习题:假设你定义了一个变量name=think,现在想以name这个变量的内容来定义出myname显示think is my English name这个内容,要如何设置呢?

Plain代码  收藏代码
  1. [root@localhost ~]# name=think  
  2. [root@localhost ~]# echo $name  
  3. think  
  4. [root@localhost ~]# myname="$name is my English name"  
  5. [root@localhost ~]# echo $myname  
  6. think is my English name  

练习题:如果你有一个常去的工作目录名称为"/u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/",请问该如何简化?
Plain代码  收藏代码
  1. work="/u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/"  
  2. cd $work  
  3. 同时,我们可以把这个变量写进.bash_profile里面,让你每次只要cd $work便可。  

在命令执行过程中,反单引号(`)之内的命令将会被先执行,而其执行出的结果将作为外部的输入信息。比如,cd /lib/modules/`uname -r`/kernel,进入你目前内核所在的模块目录。因为,反单引号容易出错,所以,通常我们会使用$(uname -r)来等价替代。

环境变量可以帮我们达到很多功能,包括主文件夹的变换,提示符的显示,执行文件查找的路径等。我们可以用env瞧瞧oracle用户的所有环境变量与其内容。

Plain代码  收藏代码
  1. [oracle@localhost ~]$ env  
  2. HOSTNAME=localhost.localdomain  
  3. SHELL=/bin/bash  
  4. TERM=xterm  
  5. HISTSIZE=1000  
  6. NLS_LANG=american_america.AL32UTF8  
  7. USER=oracle  
  8. CLASS_PATH=/u01/app/oracle/product/10.2.0/db_1/JRE:/u01/app/oracle/product/10.2.0/db_1/jlib:/u01/app/oracle/product/10.2.0/db_1/rdbms/jlib:/u01/app/oracle/product/10.2.0/db_1/network/jlib  
  9. LD_LIBRARY_PATH=/u01/app/oracle/product/10.2.0/db_1/lib:/usr/lib:/usr/X11R6/lib:/u01/app/oracle/product/10.2.0/db_1/jdk/jre/lib/i386:/u01/app/oracle/product/10.2.0/db_1/jdk/jre/lib/i386/server:/u01/app/oracle/product/10.2.0/db_1/rdbms/lib  
  10. LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:  
  11. ORACLE_SID=orcl  
  12. ORACLE_BASE=/u01/app/oracle  
  13. TNS_ADMIN=/u01/app/oracle/product/10.2.0/db_1/network/admin  
  14. MAIL=/var/spool/mail/oracle  
  15. PATH=/u01/app/oracle/product/10.2.0/db_1/bin:/u01/app/oracle/product/10.2.0/db_1/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin  
  16. INPUTRC=/etc/inputrc  
  17. PWD=/home/oracle  
  18. EDITOR=vi  
  19. LANG=en_US  
  20. ORACLE_TERM=xterm  
  21. SQLPATH=/u01/app/oracle/product/10.2.0/db_1/sqlplus/admin  
  22. SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass  
  23. SHLVL=1  
  24. HOME=/home/oracle  
  25. LOGNAME=oracle  
  26. CVS_RSH=ssh  
  27. LESSOPEN=|/usr/bin/lesspipe.sh %s  
  28. DISPLAY=:0.0  
  29. ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1  
  30. G_BROKEN_FILENAMES=1  
  31. _=/bin/env  

那么上面这些变量有些什么功能呢?下面我们挑几个来分析一下.

HOME:代表用户的主文件夹。cd就是使用这个变量的。

SHELL:告诉我们目前这个环境使用的shell是哪个程序。linux默认使用/bin/bash.

HISTSIZE:我们曾经执行过的命令可以被系统记忆,而记录的条数,则是由这个值来设置的。

PATH:查找可执行文件的路径,目录与目录中间以冒号分隔,目录的顺序也是文件的查找顺序。

LANG:语系数据。你可以用locale -a来查看你的系统所支持的语系有哪些。但其实你只要设置LANG,则其他的语系变量就会被他所替代。系统默认的语系,你可以cat /etc/sysconfig/i18n来看。无论如何,如果发生一些乱码问题,那么请设置LANG.

再来看三个变量。

PS1:借助变量PS1,我们可以定制自己喜欢的bash环境的提示符的显示。http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2124620,这个链接可以设置成彩色的tty。

$ :当前shell的进程号。你可以echo $$

?:表示上一个命令的回传值。一般,如果命令成功执行,则会回传一个0;如果失败,则回传一个非0的随机数。

环境变量(相当于全局变量)和自定义变量(相当于自定义变量)的差别在于,子进程仅会继承父进程的环境变量,而不会继承父进程的自定义变量。如果我们把自定义变量转成环境变量,那该变量就可以继续在子进程中存在了。这个任务由export完成。export 变量名称。那么这个变量就变成了环境变量。

原创粉丝点击