Chinaunix首页 | 论坛 | 博客
  • 博客访问: 637514
  • 博文数量: 227
  • 博客积分: 8017
  • 博客等级: 中将
  • 技术积分: 2069
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-08 22:50
文章分类

全部博文(227)

文章存档

2011年(10)

2010年(55)

2009年(28)

2008年(134)

我的朋友

分类: LINUX

2008-05-11 19:09:33

第二部分 进阶

1. 变量重游
  • 内建变量:
    • $BASH :Bash的二进制程序文件的路径
    • $BASH_VERSION: bash version
    • $DIRSTACK: 在目录栈中最顶端的值.
    • $EDITOR :脚本所调用的默认编辑器, 通常情况下是vi或者是emacs.
    • $EUID :euid
    • $GROUPS :目前用户所属的组
    • $HOME :用户的home目录, 一般是/home/username
    • $HOSTNAME: hostname放在一个初始化脚本中, 在系统启动的时候分配一个系统名字.
    • $HOSTTYPE: 主机类型
    • $IFS: Internal Field Separator,这个变量用来决定Bash在解释字符串时如何识别域, 或者单词边界.
    • $IGNOREEOF :忽略EOF: 告诉shell在log out之前要忽略多少文件结束符(control-D).
    • $LINENO :这个变量用来记录自身在脚本中所在的行号.
    • $OLDPWD :之前的工作目录("OLD-print-working-directory", 就是之前你所在的目录)
    • $OSTYPE :操作系统类型
    • $PATH :可执行文件的搜索路径, 一般为/usr/bin/,/usr/local/bin
    • $PPID :进程的$PPID就是这个进程的父进程的进程ID
    • $PS1 :prompt string,这是主提示符, 可以在命令行中见到它.
    • $PS2 :第二提示符, 当你需要额外输入的时候, 你就会看到它. 默认显示">". 还有PS3/4...
    • $PWD :工作目录(你当前所在的目录)
    • $TMOUT :如果$TMOUT环境变量被设置为非零值time的话, 那么经过time秒后, shell提示符将会超时. 这将会导致登出(logout).
    • $*: 所有的位置参数都被看作为一个单词.
    • $@: 与$*相同, 但是每个参数都是一个独立的引用字符串, 参数是被完整传递的
    • $! :运行在后台的最后一个作业的PID(进程ID)
    • $_ :这个变量保存之前执行的命令的最后一个参数的值
    • $$: 脚本自身的进程ID.
    • 其他的通过 man bash查吧。

  • 操作字符串
    • 字符串长度: ${#string}; expr length $string; expr "string":'.*'
    • 匹配字符串开头的子串长度:
      • expr math "$string" '$substr'
      • expr "$string":'$substr' ##substr是正则表达式
    • 索引: expr index $string $substr: 在字符串$string中所匹配到的$substr第一次所出现的位置.
    • 提取子串:
      • ${string:position} :在$string中从位置$position开始提取子串.
      • ${string:(-position)}: 从右边开始提取子串,()不能少!
      • ${string:position:length}: 在$string中从位置$position开始提取$length长度的子串.
      • ${*:position:length} :如果$string参数是"*""@", 那么将会从$position位置开始提取$length个位置参数, 但是由于可能没有$length个位置参数了, 那么就有几个位置参数就提取几个位置参数.
    • 字串消除:
      • ${string#substr} :从$string开头位置截掉最短匹配的$substr.
      • ${string##substr} :从$string开头位置截掉最长匹配的$substr.
      • ${string%substr} :从$string结尾位置截掉最短匹配的$substr.
      • ${string%%substr} :从$string结尾位置截掉最长匹配的$substr.
    • 字串替换:
      • ${string/substring/replacement}: 使用$replacement来替换第一个匹配的$substring.
      • ${string//substring/replacement}: 使用$replacement来替换所有匹配的$substring.
      • ${string/#substring/replacement}: 如果$substring匹配$string开头部分, 那么就用$replacement来替换$substring.
      • ${string/%substring/replacement}:如果$substring匹配$string结尾部分, 那么就用$replacement来替换$substring.
    • Bash脚本也可以调用awk的字符串操作功能来代替它自己内建的字符串操作.

  • 参数替换
    • 参数扩展(替换):
      • ${parameter} : 等同于$parameter
      • ${parameter-default} :如果变量parameter没被声明, 那么就使用默认值. eg: echo ${username-`whoami`} 当username没有定义时输出`whoami`的值,但是要注意的是,只是username的值还是为空
      • ${parameter:-default} :如果变量parameter没被设置, 那么就使用默认值. ${parameter-default}${parameter:-default}在绝大多数的情况下都是相同的. 只有在parameter已经被声明, 但是被赋null值得时候, 这个额外的:才会产生不同的结果.
      • ${parameter=default} :如果变量parameter没声明, 那么就把它的值设为default.
      • ${parameter:=default} :如果变量parameter没设置, 那么就把它的值设为default.
      • ${parameter+alt_value} :如果变量parameter被声明了, 那么就使用alt_value, 否则就使用null字符串.
      • ${parameter:+alt_value} :如果变量parameter被设置了, 那么就使用alt_value, 否则就使用null字符串.
    • 变量扩展/子串替换 (跟字符串的操作一样)

  • 指定变量类型:
    • declare/typeset选项
      • -r 只读 (declare -r var1与readonly var1是完全一样的)
      • -i 整型
      • -a 数组
      • -f 函数 :如果在脚本中使用declare -f, 而不加任何参数的话, 那么将会列出这个脚本之前定义的所有函数.
      • -x export :这句将会声明一个变量, 并作为这个脚本的环境变量被导出.
      • -x var=$value :declare命令允许在声明变量类型的同时给变量赋值.

  • 变量的间接引用:
    • 假设一个变量的值是第二个变量的名字. 那么我们如何从第一个变量中取得第二个变量的值呢? 比如, 如果a=letter_of_alphabet并且letter_of_alphabet=z, 那么我们能够通过引用变量a来获得z么? 这确实是可以做到的, 它被称为间接引用. 它使用eval var1=\$$var2这种不平常的形式.

  • $RANDOM产生随机数:
    • $RANDOM是Bash的内部函数(并不是常量), 这个函数将返回一个伪随机整数, 范围在0 - 32767之间.
    • /dev/urandom设备文件提供了一种比单独使用$RANDOM更好的, 能够产生更加"随机"的随机数的方法. dd if=/dev/urandom of=targetfile bs=1 count=XX能够产生一个很分散的伪随机数序列.然而, 如果想要将这个数赋值到一个脚本文件的变量中, 还需要可操作性, 比如使用od命令或者dd命令

  • ((...))
    • 与let命令很相似, ((...))结构允许算术扩展和赋值. 举个简单的例子, a=$(( 5 + 3 )), 将把变量"a"设为"5 + 3", 或者8. 然而, 双圆括号结构也被认为是在Bash中使用C语言风格变量操作的一种处理机制.
阅读(825) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~