Neo Anderson's Blog

Linux 语法

字数统计: 1.4k阅读时长: 5 min
2018/08/01

什么原因导致了字符串变特殊? 如果一个字符所代表的含义 超出了其原有的字面含义(\) 我们就会把它作为特殊字符处理 , bash脚本就是由各种命令\关键字\特殊字符等各种结构块构成

  • 脚本及其他一些场景中用到的字符串

    • # 符号 : 注释.

      1 一般注释的行都是以# 开始的(当然#!除外), 而且程序执行的时候,不会执行注释内容

      1
      # 这是一个注释

      2, 命令行的结尾也可以添加注释

      1
      2
      echo "后面会添加一段注释." # 注释在这里
      # 注意之前有空格可以存在#

      3, 一行的注释的#开头前可以添加空格

      1
      2
      3
      4
      5
      6
      7
      8
                    # 之前有一个TAB的空格设置
      ```
      4, 注释也可以添加在管道符之间
      ```bash
      inital=(`cat "$startFile" | sed -e '/#/d' | tr -d '\n' | \
      #删除包含'#'注释字符的内容行
      sed -e 's/\./\. /g' -e 's/_/_ /g'` )
      # 脚本内容摘录自 life.sh

    • ; 符号: 命令分割[分号] 允许一行中书写多条命令
      1
      2
      3
      4
      5
      6
      echo hello; echo world
      if [ -X "$filename" ]; then #分号后面记得留有空格
      echo success; cp $filename ${filename}.bak
      else
      echo fail
      fi; echo "copy file successfully."

      Note that the “;” sometimes needs to be escaped.

    • ;; 符号: case命令选项后需要添加的字符[双分号]
      1
      2
      3
      4
      case "$variable" in
      abc) echo "\$variable=abc";;
      bcd) echo "\$variable=bcd";;
      esac
    • ;;& , ;& 符号: 在bash4.0+版本中 case命令的选项后使用的字符
    • .符号:

      1, 等同于source命令,是一个bash内置命令[用法一]
      "dot" command [period]. Equivalent to source (see Example 15-22). This is a bash builtin.

      1
      2
      3
      4
      #!/bin/env bash
      . data-file # 加载一个位于当前同一目录下 data-file文件,等同于 'source data-file' 方式
      echo "variable1 (from data-file) = $variable1"
      echo "variable3 (from data-file) = $variable3"

      2, 作为文件名的一部分,是一个隐藏文件的前缀
      3, 作为目录名时,是指当前目录, 两个 . 代表上级父目录

      1
      2
      cd . # cd $PWD
      cd ..

      4, 作为正则规则内容时,一个.可以匹配一个单字符or空格

    • “ 符号: 一般主要用于特殊字符串的特殊标识[见第五章]
    • ` 符号: 一般主要标注特殊字符串,优先级由于”
    • , 符号: 逗号运算符,

      1, 作为赋值运算符分界

      1
      let "t2 = ((a= 9, 15/3))" # 设置a=9, t2=15/3

      2, 作为字符串链接符

      1
      2
      3
      4
      5
      6
      7
      for file in /{,usr/}bin/*sh 
      do
      if [ -x "$file" ]
      then
      echo $file
      fi
      done
    • “ ‘ 符号:
    • \ 符号: 转义[反斜线], //todo
    • / 符号: 文件路径分隔符/或者运算符除法
    • ` 符号: 命令替换 命令 意味着将命令执行结果赋予一个变量
    • : 符号: 空命令行[冒号],等同于”NOP”(no op, 不进行任何操作), 一般被认为等同于shell内置 true,

      1, 作为无限循环使用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      while :
      do
      operation-1
      ...
      done
      #等同于
      #while true
      #do
      # operation-1
      # ...
      #done

      2, 在if/then 判断中使用

      1
      2
      3
      4
      5
      if condition
      then :
      else
      echo else
      fi

      3, 与?配合 可做变量的值检查

      1
      : ${USER?} ${HOSTNAME?} ${MAIL?} #做USER,HOSTNAME,MAIL赋值检查, 如果变量不存在会输出错误信息

      4, Provide a placeholder where a binary operation is expected, see Example 8-2 and default parameters.

      1
      2
      3
      4
      5
      : ${username=`whoami`}
      # ${username=`whoami`} Gives an error without the leading :
      # unless "username" is a command or builtin...

      : ${1?"Usage: $0 ARGUMENT"} # From "usage-message.sh example script.

      5, 与>符号配合,可以清空文件

      1
      : > xxx.txt # 将文件xxx.txt清空

      6, 与>>符号配合,可以用于文件存在检查,不存在自动创建

      1
      : >> xxx.txt # 如果文件存在,不做任何处理,如果文件不存在,自动创建他

      7, 作为字段分隔符

      1
      echo $PATH # /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games
    • ! 符号: 取反
    • * 符号: 通配符[星号]

      1, 文件通配符

      1
      echo * # 输出当前目录下的所有文件名

      2, 算术运算符(乘法)

    • ? 符号:

      1, 测试运算符(三元运算符)

      1
      (( varNew=varOld<0?1:2))
    • $ 符号:

      1, 变量替换

      1
      2
      3
      4
      var1=5
      var2=23kkjl
      echo $var1 #5
      echo $var2 #223kkjl

      2, 在正则匹配规则中作为内容结束符

    • ${} 符号: 变量替换
    • $’…’ 符号:
      1
      2
      $' ... '
      Quoted string expansion. This construct expands single or multiple escaped octal or hex values into ASCII [3] or Unicode characters.
    • $*, $@ 符号: 位置参数,shell函数中,代表输入函数的参数内容

      1, $* :
      2, $@

    • $? 符号: 标识当前shell 退出后返回的状态值
    • $$ 符号: 在脚本中标识当前进程ID
    • () 符号: 表示以子进程进行,子进程与父进程不相互影响
      1
      2
      3
      a=123
      (a=321)
      echo $a #123
    • {} 符号:

      1, 文案替换 ,在 xargs -i 命令中使用时, {}符号就代表输出内容的替换

      1
      ls . | xargs -i -t cp ./{} $1
    • {} ; 符号: 绝对路径名; 一般用于在find命令中, 这里的 \; 是为了转义; 并表示结束
      1
      find . -name '*.php' -exec ls -l "{}" \;
    • {xxx,yyy,zzz} 符号: 花括号字符串扩展
      1
      2
      echo \"{aaa,bbb,ccc}\" # "aaa" "bbb" "ccc"
      cp file22.{txt, txt.backup} # 拷贝file22.txt 文件到file22.txt.backup中
    • [ ] 符号: [ 是shell内置命令,等同于test, 一般用于if判断是包裹条件 ]符号只是为了表示条件结尾
      1
      2
      3
      4
      if [ -n $name ]
      then
      echo "Good $name"
      fi
    • [[ ]] 符号: 比起[] ,这个shell关键字中的表达式更灵活;

      原文链接

CATALOG
  1. 1. 脚本及其他一些场景中用到的字符串
    1. 1.1. # 符号 : 注释.
    2. 1.2. ; 符号: 命令分割[分号] 允许一行中书写多条命令
    3. 1.3. ;; 符号: case命令选项后需要添加的字符[双分号]
    4. 1.4. ;;& , ;& 符号: 在bash4.0+版本中 case命令的选项后使用的字符
    5. 1.5. .符号:
    6. 1.6. “ 符号: 一般主要用于特殊字符串的特殊标识[见第五章]
    7. 1.7. ` 符号: 一般主要标注特殊字符串,优先级由于”
    8. 1.8. , 符号: 逗号运算符,
    9. 1.9. “ ‘ 符号:
    10. 1.10. \ 符号: 转义[反斜线], //todo
    11. 1.11. / 符号: 文件路径分隔符/或者运算符除法
    12. 1.12. ` 符号: 命令替换 命令 意味着将命令执行结果赋予一个变量
    13. 1.13. : 符号: 空命令行[冒号],等同于”NOP”(no op, 不进行任何操作), 一般被认为等同于shell内置 true,
    14. 1.14. ! 符号: 取反
    15. 1.15. * 符号: 通配符[星号]
    16. 1.16. ? 符号:
    17. 1.17. $ 符号:
    18. 1.18. ${} 符号: 变量替换
    19. 1.19. $’…’ 符号:
    20. 1.20. $*, $@ 符号: 位置参数,shell函数中,代表输入函数的参数内容
    21. 1.21. $? 符号: 标识当前shell 退出后返回的状态值
    22. 1.22. $$ 符号: 在脚本中标识当前进程ID
    23. 1.23. () 符号: 表示以子进程进行,子进程与父进程不相互影响
    24. 1.24. {} 符号:
    25. 1.25. {} ; 符号: 绝对路径名; 一般用于在find命令中, 这里的 \; 是为了转义; 并表示结束
    26. 1.26. {xxx,yyy,zzz} 符号: 花括号字符串扩展
    27. 1.27. [ ] 符号: [ 是shell内置命令,等同于test, 一般用于if判断是包裹条件 ]符号只是为了表示条件结尾
    28. 1.28. [[ ]] 符号: 比起[] ,这个shell关键字中的表达式更灵活;