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

shell 拾遗

时间:2015-07-17 23:04:07      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:shell高级

  • #号,可以出现在语句前,语句后,甚至语句中间,但是不能跟语句在同一行,同一行会出现问题。#号不会生效的情况是 “ ‘  \ 参数 或者运算符中 

  • ${} 参数

  • () 命令集

    • { } 大括号 (Block of code) 
      有时候 script 当中会出现,大括号中会夹着一段或几段以\"分号\"做结尾的指令或变数设定。 
      # cat ftmp-02#!/bin/basha=fsh{a=inbc ; echo -e \"\\n $a \\n\"}echo $a#./ftmp-02inbcinbc 
      这种用法与上面介绍的指令群组非常相似,但有个不同点,它在当前的 shell 执行,不会产生 subshell。 
      大括号也被运用在 \"函数\" 的功能上。广义地说,单纯只使用大括号时,作用就像是个没有指定名称的函数一般。因此,这样写 script也是相当好的一件事。尤其对输出输入的重导向上,这个做法可精简 script 的复杂度。 

      此外,大括号还有另一种用法,如下 
      {xx,yy,zz,...} 
      这种大括号的组合,常用在字串的组合上,来看个例子 
      mkdir {userA,userB,userC}-{home,bin,data} 
      我们得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data,这几个目录。这组符号在适用性上相当广泛。能加以善用的话,回报是精简与效率。像下面的例子 
      chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} 
      如果不是因为支援这种用法,我们得写几行重复几次呀

  • (( )) 
    这组符号的作用与 let 指令相似,用在算数运算上,是 bash 的内建功能。所以,在执行效率上会比使用 let指令要好许多。 
    #!/bin/bash(( a = 10 ))echo -e \"inital value, a = $a\\n\"(( a++))echo \"after a++, a = $a\" 

  • brace 大括号

  • {} 占位符

  • 【】判断式

  • 【【 】】 基本和【】相同,但可以直接在其中用 ||  && 判断

  • 技术分享

  • \<,\>单词边界

  • >| 强制覆盖存在文件

  • -  是重标准输入读取

    • tar cvf - `find . -mtime -1 -type f -print` > $archive.tar

      gzip $archive.tar

      echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."


  • b=${a/23/BB} # Substitute "BB" for "23". 

    • d=BB35

      d=${c/BB/23} # Substitute "23" for "BB".

      # This makes $d an integer.

      echo "d = $d" # d = 2334

      let "d += 1" # 2334 + 1

      echo "d = $d" # d = 2335

      echo


  • 双引号 除了变量 $ ' \ 外不在解释引号中其他所有特殊字符。双引号还能使句子不分开。

  • 单引号转义字符 \ 。也只是被局限于字面上的意思。在一个双引号中加单引号是不行的。使用单引号可以阻止shell解释器编辑指令中的特殊字符或空格(shell使用空格决定提交给程序的独立的参数,特殊的shell字符在调用之前被展开)

  • tar -p 保留权限

  • [[ ]]   和    (( ))  给出返回值

    • 技术分享

  • test

    • -s  zise 为零  -a 文件存在   -p file 为管道符 -S 文件为socket    -L 文件为链接符

    • f1 -nt f2     f1比f2更新

    • f1  -ot f2     f1 比 f2 更旧

    • f1 -ef f2       文件f1 和 f2 是硬链接到文件的

  • arithmetic operators

    • **  求幂次方运算

    • #!/bin/bash

      i=77

      let ‘i=i**6‘ # 77*77*77

      echo "$i"

      ~          

  • bitwise operator(按位运算)

    • ~op1              反运算符。把op1中的所有二进制为1变为0,0变1.

      op1<<op2      左移运算符。把op1中的二进制相左移动op2位,忽略最左端的移除的各位,最右端的各位补上0值,每做一次按位左移就有实现op1乘以2

      op1>>op2       右移运算符.把op1中的二进制向右移动op2位,忽略最右端移出的各位。最左端各位补上0值。每做一次按位左移就有实现op1除以2.

      op1&op2         与比较运算符,op1和op2对应位。对于每个二进制来说,如果二者该位都是1,则结果为1.否则为0

      op1~op2 异或运算符。比较op1和op2对应位。对于每个二进制来说,如果二者该位互补,则结果为1.否则结果为0

      op1|op2 或运算符 比较op1和op2对应位,对于每个二进制来说,如果二者该位有一个是1或者都是1,则结果为1,否则结果为0

      ^  bitwise XOR 

      ^=   bitwise XOR-equa



    • 技术分享

  • 内部变量

      • $PIPESTATUS (退出状态的编码)

        • 技术分享

      • 通过管道来分别输出退出状态

        • 技术分享

    • 特殊变量

      • $-    传递给脚本给set命令使用

      • $!     在后台运行最后的工作的pid

      • $_    保存之前执行的命令的最后一个参数

      • $?    保存之前执行的命令的最后一个参数

      • $?     函数或者脚本本身的推出状态

      • $$ 脚本自身的进程ID

  • 内部变量

      • declare -r 只读选项   强制指定制度

      • -i    整数

      • -a   array   把它看作数组

      • -f  功能

      • -x    export

      • -x var=$var 

  • 维护变量

    • 技术分享

    • 匹配

      • 技术分享

    • index (索引)

      • 技术分享

      • 技术分享

      • 技术分享

      • 技术分享

      • 技术分享

      • 技术分享

      • 高级比较

        • f1 -nt f2

          file f1 is newer than f2

          f1 -ot f2

          file f1 is older than f2

          f1 -ef f2

          files f1 and f2 are hard links to the same fil


      • 技术分享

      • 技术分享

      • - h 链接文件

      • declare -i  整数

        • 技术分享

        • 技术分享

      • $_  最后传递的参数

本文出自 “桂花香” 博客,请务必保留此出处http://1074963.blog.51cto.com/1064963/1675711

shell 拾遗

标签:shell高级

原文地址:http://1074963.blog.51cto.com/1064963/1675711

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