201808162138
201912301609

目录

  • gnu工具链
  • gdb
  • make
  • shell
  • 线程编程

文件与目录命令

  • chmod [-R]
  • chown
  • groups [-R]
  • chgrp [-R]
  • grep
  • whereis command
  • mount/umount

shell

关于命令

  • 多命令的间隔符号:

    • &同时执行;
    • 分号表示分别执行;
    • &&前面成功才执行后面;
    • |前面的结果传给后面;
    • ||前面的成功后面不执行,否则后面执行;

      关于脚本文件

  • 脚本文件格式:通常以.sh为后缀;脚本首行为 #!/bin/bash指定使用哪个shell/interpreter,#!(读作 [ʃə’bæŋ])后是解释器的路径;

    • 除了使用常用的bash解释器(如[(/usr/bin/sh或/bin/sh)(/bin/bash)(/usr/bin/csh)(/usr/bin/ksh)(/sbin/sh)]),还可以使用例如#!/usr/bin/env python3,利用env命令找到python解释器;
    • 提醒:在linux下执行的脚本通常需要是unix格式的,(而不是dos),可通过vim内命令set fileformat=dos|unix|mac转换;在执行前也常用chmod +x添加执行权限;

      变量

  • 用户变量:使用’=’定义,使用’$’读取

    • 使用’=’定义,必须紧跟在变量后,不能有空格,否则会识别为一个命令;
  • 环境变量:使用export定义,使用set命令查看当前上下文的环境变量
    • 使用unset删除变量
  • 位置变量:$0~$9
  • 左移命令shift

    预定义变量

    1. $#参数个数;
    2. $*或$@参数内容;
    3. PS$*和$@的不同:在双引号中体现出来。
    4. 假设在脚本运行时写了三个参数1,2,3,则 "*" 等价于 "1 2 3"(传递了一个参数)
    5. "@" 等价于 "1" "2" "3"(传递了三个参数)。printf $@时,如果$@包含多个参数,则只会打出第一个值;
    6. $0当前脚本名,值得注意的是它没有包含在$*和$@
    7. $?上一命令的执行状态;
    8. $$当前 Shell 进程 ID

数组变量

  1. 使用array=(a b c)定义数组,元素用空格分隔;通过${array[index]}访问元素;
  2. 通过array[index]=value单独赋值或扩充使用
  3. 通过unset array[index]删除数组元素或者unset array删除全部数组;
  4. 特殊符号${array[@]},${array[*]}输出所有符号;仅支持1维数组;

通配符

[abc][*?][!except]

条件判断

  • if表达式:if then … else … fi;if要有自己的fi,elif不需要有自己的fi,下一个else或者上一层if的fi就标识它的结束;
    • 注意:else等流程控制的程序块不可以为空;
  • test和[ expression ]命令
    • test expr或者[ expr ]
    • test命令后参与比较的参数,如果不用空格分隔,即识别为一个参数;例如test ‘1’=’2’ 的结果是0,shell实际是在回答:the length of STRING(‘1’=’2’) is nonzero,等价于test -n ‘1’=’2’
    • 操作符:
      • 整数比较:-eq, -ge, -gt, -le, -lt;
      • 字符串:=, !=, -z, -n;
        • 字符串操作补充:${#str}获取字符串长度,${str: 2: 5}截取字符串
      • 文件操作符:-f
  • [[ expression ]]关键字:增强版的test命令
    • 可以直接使用比较符号;变量不需要加双引号;支持逻辑运算符;
    • 支持正则表达式[[ str =~ ]]
  • case-in语句:case test_string in case_string1) …;; case_string2) …;; … esac

    • shell的case表达式不存在穿透,即每个分支是自带break的效果;

      循环

  • for do done

    • C风格的for循环
      • for ((i=1; i<=100; i++)) do ((sum += i)) done
    • Python风格的for-in
      • for args 等价于 for args in $@
  • while do done
  • break和continue命令
  • until do done

    shell注释

    Shell脚本注释写法linux shell脚本之家

    reference

  • Shell脚本:Linux Shell脚本学习指南(超详细)

linux学习资源

cheatsheet补充

一些命令的历史、迭代、发展

其他

20180816 iptables