• Bash中的特殊字符


      # 表示注释    

      #! 指定当前脚本的解析器

     #!/bin/bash

     echo "Hello World"

      ; 命令分隔符

     #!/bin/bash

     echo hello;echo there

     filename=ttt.sh

     if [ -r "$filename" ]; then

      echo "File $filename exists."; cp $filename $filename.bak

     else

      echo "File $filename not found."; touch $filename

     fi; echo "File test complete"

      ;; 终止case选项 

     #!/bin/bash

     varname=b 

     case "$varbname" in 

      [a-z]) echo "abc";;

      [0-9]) echo "123";;

     esac

      .  等价与source命令。source命令用于在当前bash环境下读取并执行filename.sh中的命令

     $ source test.sh #等价于  . test.sh

      "   String将会阻止解释Stirign中大部分特殊字符

      '   String将会阻止String中所有特殊字符的解释,比"更强烈的方式

      /   文件名路径分隔符,也可用作除法算术操作符

         一种单单字符的引用机制,X会转义成字符X

      `   命令替换 command结构可以将命令的输出赋值到另一个变量中去。``会优先执行
     $  cp `mkdir bak` test.sh bak  #先创建bak目录,然后复制test.sh到bak中去

      :空命令,相当于NOP(no option)。也被认为与shell的内建命令true作用相同。:是一个bash的内建命令,它的退出码是0

     #!/bin/bash                                                    

     while :                                                    

     do                                                    

      echo "endless loop"

     done

     #!/bin/bash

     condition=5

     if [ $condition -gt 0 ]

     then : #什么都不做,退出分支

     else

      echo "$condition"

     fi

      :在与重定向操作符>结合使用时,将会把一个文件清空,但不会修改这个文件的权限。若之前的文件不存在,就创建这个文件。

     $ : > test.sh #test.sh被清空了

      :在与重定向操作符>>结合使用时,将不会对预先存在的目标文件产生任何影响,若这个文件之前不存在,则创建这个文件。

      :还可以用来注释行当不会关闭错误检查,也可用来在/ect/passwd和$PATH变量中做分隔符。

      ? 在一个双括号结构中,?就是C语言的三元操作符

     #!/bin/bash

     a=10

     (( t=a<50?8:9 ))

     echo $t

      $变量替换、命令替换

     $ cd  $(echo Documents)

     $ pwd

      (())命令组:在括号中的命令列表,将会作为一个子shell来运行。在括号中的变量,由于是在子shell中所以对脚本剩下的部分是不可用的。父进程,也就是脚本本身,不能够读取在子进程中创建的变量,也就是在shell中创建的变量。

     #!/bin/bash

     a = 123 

     ( a = 321; )  #括号中的变量a相当于一个局部变量

     echo "a = $a"

     bash test.sh  #output a = 123 

      (())还可以初始化数组

     #!/bin/bash

     arr=(1 2 3 4 5 6) #不可以出现空格哦~ arr = ..是不行的哦

     echo ${arr[3]} 

      {}文件名扩展

     #!/bin/bash

     if [ ! -w 't.txt' ];

     then 

      touch t.txt

     fi

     echo 'test txt' >> t.txt

     cp t.{txt,back} 

      {{}}也可代表代码快,又被称为内部组,实际上是一个匿名函数。

     #!/bin/bash

     a=123

     { a=321; }  #中间一定要有空格哦~

     echo "a = $a"

     $ bash test.sh #output a = 321 #在{}中声明的变量,对于脚本其它部分的代码来说是可见的

      []条件测试,[是shell内建test命令的一部分,并不是/urs/bin/test中的外部命令的一个链接

     #!/bin/bash

     a=5

     if [ $a -lt 10 ]

     then 

      echo " a : $a "

     else

      echo "a > 10"

     fi

      []数组元素,在一个array结构的上下文中,中括号用来引用数组中的每个元素的编号。

     #!/bin/bash

     arr=(12 22 32)

     arr[0]=2 

     echo ${arr[0]}

      <>重定向

     test.sh > filename #重定向test.sh的输出到文件filename中。若filename存在的话,那么将会被覆盖

     test.sh &> filename  #重定向test.sh的stdout和stderr到filename中

     test.sh >&2 #重定向test.sh的stdout到stderr中

     test.sh >> filename #把test.sh的输出追加到文件filename中。若filename不存在的话,将会被创建

      | 管道,分析前边命令的输出,并将输出作为后边命令的输入。

     $ ps -ef | aux tomcat

      -选项,前缀,在所有的命令若想使用参数,前面都要加上-

     #!/bin/bash

     a=5 

     b=5

     if [ "$a" -eq "$b" ]

     then 

      echo " a is equal to b"

     fi

      -用于重定向stdin或stdou

     备份最后24小时当前目录下所有修改的文件

     #!/bin/bash

     BACKUPFILE=backup-$(date +%m-%d-%Y) #在备份文件中插入时间

     archive=${1:-$BACKUPFILE} 

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

     gzip $archive.tar

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

     exit 0

      ~表示home目录

     

      

  • 相关阅读:
    应用程序加载外部字体文件(使用AddFontResource API函数指定字体)
    动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)(调用ModifyStyle和ModifyStyleEx,然后调用SetWindowPos重新显示)
    输出进程相关联的环境变量信息(使用GetEnvironmentStrings取得信息,然后使用StringCchCopyN和StringCchPrintf保证字符串不会越界)
    基于QT的换肤整体解决方案(QSkinStyle)(提供Linux的XP风格)
    .NET代码自动编译发布
    c#写windows服务
    MVC——分页控件
    WCF入门教程(图文)VS2012
    MSDN官方XmlSerializer类导致内存泄漏和性能低
    学SpringMVC收藏
  • 原文地址:https://www.cnblogs.com/forerver-elf/p/4748521.html
Copyright © 2020-2023  润新知