Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75106
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-19 16:49
文章分类

全部博文(44)

文章存档

2018年(2)

2017年(1)

2016年(41)

我的朋友

分类: 系统运维

2016-04-29 17:26:49

原文地址:Shell 的变量 作者:w787815


  1. Shell 的变量()
  2. 变量的取用: echo
  3. [root@www ~]# echo $variable
  4. [root@www ~]# echo $PATH
  5. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  6. [root@www ~]# echo ${PATH}
  7.  

  8. 变量的配置
  9. [root@www ~]# echo $myname
  10.        <==这里并没有任何数据~因为这个变量尚未被配置!是空的!
  11. [root@www ~]# myname=VBird
  12. [root@www ~]# echo $myname
  13. VBird <==出现了!因为这个变量已经被配置了!
  14. 变量的配置守则

  15. 变量与变量内容以一个等号『=』来连结,如下所示:
  16. 『myname=VBird』

  17. 等号两边不能直接接空格符,如下所示为错误:
  18. 『myname = VBird』或『myname=VBird Tsai』

  19. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
  20. 『2myname=VBird』

  21. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
  22. 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
  23. 『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
  24. 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
  25. 『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
  26. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;

  27. 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:
  28. 『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』

  29. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
  30. 『PATH="$PATH":/home/bin』

  31. 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
  32. 『export PATH』

  33. 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;

  34. 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:
  35. 『unset myname』
  36. 底下让鸟哥举几个例子来让你试看看,就知道怎么配置好你的变量啰!

  37. 复制代码
  38. 范例一:配置一变量 name ,且内容为 VBird
  39. [root@www ~]# 12name=VBird
  40. -bash: 12name=VBird: command not found <==屏幕会显示错误!因为不能以数字开头!
  41. [root@www ~]# name = VBird <==还是错误!因为有空白!
  42. [root@www ~]# name=VBird <==OK 的啦!

  43. 范例二:承上题,若变量内容为 VBird's name 呢,就是变量内容含有特殊符号时:
  44. [root@www ~]# name=VBird's name
  45. # 单引号与双引号必须要成对,在上面的配置中仅有一个单引号,因此当你按下 enter 后,
  46. # 你还可以继续输入变量内容。这与我们所需要的功能不同,失败啦!
  47. # 记得,失败后要复原请按下 [ctrl]-c 结束!
  48. [root@www ~]# name="VBird's name" <==OK 的啦!
  49. # 命令是由左边向右找→,先遇到的引号先有用,因此如上所示,单引号会失效!
  50. [root@www ~]# name='VBird's name' <==失败的啦!
  51. # 因为前两个单引号已成对,后面就多了一个不成对的单引号了!因此也就失败了!
  52. [root@www ~]# name=VBird\'s\ name <==OK 的啦!
  53. # 利用反斜杠 (\) 跳脱特殊字符,例如单引号与空格键,这也是 OK 的啦!

  54. 范例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录
  55. [root@www ~]# PATH=$PATH:/home/dmtsai/bin
  56. [root@www ~]# PATH="$PATH":/home/dmtsai/bin
  57. [root@www ~]# PATH=${PATH}:/home/dmtsai/bin
  58. # 上面这三种格式在 PATH 里头的配置都是 OK 的!但是底下的例子就不见得啰!

  59. 范例四:承范例三,我要将 name 的内容多出 "yes" 呢?
  60. [root@www ~]# name=$nameyes
  61. # 知道了吧?如果没有双引号,那么变量成了啥?name 的内容是 $nameyes 这个变量!
  62. # 呵呵!我们可没有配置过 nameyes 这个变量吶!所以,应该是底下这样才对!
  63. [root@www ~]# name="$name"yes
  64. [root@www ~]# name=${name}yes <==以此例较佳!

  65. 范例五:如何让我刚刚配置的 name=VBird 可以用在下个 shell 的程序?
  66. [root@www ~]# name=VBird
  67. [root@www ~]# bash <==进入到所谓的子程序
  68. [root@www ~]# echo $name <==子程序:再次的 echo 一下;
  69.        <==嘿嘿!并没有刚刚配置的内容喔!
  70. [root@www ~]# exit <==子程序:离开这个子程序
  71. [root@www ~]# export name
  72. [root@www ~]# bash <==进入到所谓的子程序
  73. [root@www ~]# echo $name <==子程序:在此运行!
  74. VBird <==看吧!出现配置值了!
  75. [root@www ~]# exit <==子程序:离开这个子程序
  76. 复制代码
  77. 在一般的状态下,父程序的自定义变量是无法在子程序内使用的。但是透过 export 将变量变成环境变量后,就能够在子程序底下应用了!

  78.  

  79. 反单引号
  80. 如何进入到您目前核心的模块目录?
  81. [root@www ~]# cd /lib/modules/`uname -r`/kernel
  82. [root@www ~]# cd /lib/modules/$(uname -r)/kernel
  83.  

  84. 取消变量
  85. 取消刚刚配置的 name 这个变量内容
  86. [root@www ~]# unset name
  87.  

  88. 单引号与双引号
  89. 复制代码
  90. 单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。我们以底下的例子做说明:假设您定义了一个变量, name=VBird ,现在想以 name 这个变量的内容定义出 myname 显示 VBird its me 这个内容,要如何订定呢?
  91. [root@www ~]# name=VBird
  92. [root@www ~]# echo $name
  93. VBird
  94. [root@www ~]# myname="$name its me"
  95. [root@www ~]# echo $myname
  96. VBird its me
  97. [root@www ~]# myname='$name its me
转自 

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