bash学习记录(一) 初识和bash中的特殊字符

bash学习记录(一)初识bash和特殊字符

初识Bash

鉴于本人的表达能力,不适合想要去系统学习bash的人来查看,提前分享两个不同阶段,不同人群学习的资料。

  1. 想要学习bash但是不想学习太深的人: bash-handbook

  2. 想要系统学习bash的人:Advanced Bash-Scripting Guide

其实bash很难,要考虑的东西很多,但现在学到的只是皮毛,希望能够多看多实践,才能更进一步。

Starting Off With a Sha-Bang

sha-bang(#!)在起始的位置来告诉你的系统这个文件是命令的集合,能够使用哪个命令解释器来执行(/bin/bash)->path,这个命令路径必须正确

如果系统默认解释器是/bin/bash 或者其他 则不用使用 #! /bin/bash 来放到开头

Special Characters

下面来简单总结一下有特殊意义的字符

  1. ‘#‘ 跟在#号后面的相当与是注释,不会被解释器执行,可以出现单行,也可以出现在命令后作注释用

  2. ; 分号 允许将多条命令放到单行用

  3. ;; 两个分号,在case的场景下使用 如

    1
    2
    3
    4
    5
    6
    7
    case "$variable" in

    abc) echo "\$variable = abc" ;;

    xyz) echo "\$variable = xyz" ;;

    esac
  4. . dot

    相当与linux的内建命令source

    作为文件名的一部分 如 .vimrc等

    作为目录导向 如 ./表示当前目录 ../相当与父目录

    正则表达式中可以表示为1个字符

  5. “ 双引号 部分引用字符串,大部分还是字符串,但是能够引用变量 ‘$value’,并且特殊字符需要转义

  6. ‘ 单引号 可以保存全部特殊字符,不能引用变量

  7. , 逗号 表示连接多个计算表达式,多个表达式都会执行,但是只有最后一个计算式会返回值 。也做链接字符串

    1
    2
    let "t2 = ((a = 9, 15 / 3))"
    # Set "a = 9" and "t2 = 15 / 3"
  8. \ 反斜杠 escape [backslash] 可是实现对单个字符的转义

  9. / 斜杠 Filename path separator [forward slash]本身就叫做文件分割符可以明了做什么用的了

  10. ` command substitution 命令替换 如 a=`echo “hello world” `;echo $a 等 或者 a=`date` ; echo $a

  11. : 冒号 空命令等价与‘NOP’ do-nothing operation 也是有状态的相当与内建函数 true 比如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while :
    do
    operation-1
    operation-2
    ...
    operation-n
    done

    # Same as:
    # while true
    # do
    # ...
    # done

    作if判断的分支

    1
    2
    3
    4
    5
    if condition
    then : # Do nothing and branch ahead
    else # Or else ...
    take-some-action
    fi

    放在必须要有两元操作的地方作为分隔符,如:: ${username=`whoami`}

    配合管道命令 :> :>>如果文件没有存在则创建

    做分割符 如 echo $PATH 会出现很多以:作为分割符的字符串

    在函数里可以作为站位符防止函数提为空

  12. !叹号 作为 出现 如 !null 或者退出码 exit code。在不同的语境下可以作为间接变量引用。

  13. * 星号 可以作为全匹配来使用 如 echo * 。 表示乘法 1*2

  14. ? 问号 test operator. Within certain expressions, the ? indicates a test for a condition. 还可以作为匹配任意单个字符。

  15. $ 变量引用 正则表达式中表示行尾

  16. ${} 变量引用

  17. $(…) 多个变量同时引用

    1
    2
    3
    file1="file"
    file2="nofile"
    echo $'file1,file2'

    输出内容:file1,file2

  18. $* $@ 位置参数 $*是将所有参数作为一个整体返回(字符串),而$@是将每个参数作为单元返回一个参数列表

  19. () 小括号

  • 操作组(a=hello; echo $a)
  • 数组初始化
  1. {} 花括号扩展 用来扩展参数 如 abou{t,y,u}

  2. [] 中括号

  • shell内建测试的一部分
  • 表达数组的部分如array[1]
  • 表示字符集的范围,在正表达式中,方括号表示该位置可以匹配的字符集范围。
  1. [[]] 双中括号(double brackets)。

    这个结构也是测试,测试[[]]之中的表达式(Shell的关键字)。这个比单中括号更能防止脚本里面的逻辑错误

  2. $[ … ] and (()) 都表示Integer计算 integer expansion.

1
2
3
4
a=3
b=7
echo $[$a+$b]
echo (($a+$b))
  1. | 管道 非常基础的概念 如 ls|grep .. 。

  2. &:后台执行 && 和 || :逻辑操作符

  3. + - * % 各自意义就不详细解释了

资料引用 Advanced Bash-Scripting Guide 文章特别详尽,有兴趣非常鼓励看原文。这里我只做了部分比较常用的比较容易理解的部分做了精简(原谅我英文不好 :) 破产版总结 - - )。

作为bash学习总结的第一篇文章,篇幅不大,尽量做到简单,详尽易懂。当遇到问题能够回头看一看,希望能够起到好的作用!!

-------------本文结束感谢您的阅读-------------

本文标题:bash学习记录(一) 初识和bash中的特殊字符

文章作者:NanYin

发布时间:2018年04月10日 - 15:04

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2018/04/10/2018-04-10-bash%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。