• 输出当前使用 shell:
  1. echo $SHELL
  2. /bin/bash
  • 输出支持的 shell:
  1. cat /etc/shells

脚本执行方式输出命令: echo

  1. echo [选项] [输出内容]
  • 选项:

    • -e: 支持反斜线控制的字符转换, 比如\n

所有的 Linux 命令都可以在 shell 中执行;

脚本执行

  • 赋予执行权限, 直接运行

    • chmod 755 hello.sh

    • ./hello.sh

  • 通过 bash 调用执行脚本

    • bash hello.sh

常用快捷键

  • ctrl + c 强制终止当前命令

  • ctrl + l 清屏

  • ctrl + a 光标移动到命令行首

  • ctrl + e 光标移动到命令行尾

  • ctrl + u 从光标所在未知删除到行首

  • ctrl + z 把当前执行命令放入后台

  • ctrl + r 在历史命令中搜索

历史命令

  1. history [选项] [历史命令保存文件]
  • 选项:

    • -c: 清空历史命令

    • -w: 把缓存中的历史命令写入历史命令保存文件 ~.bash_history

输出, 输入重定向标准输入输出:

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

标准输出重定向:

  • 命令 > 文件: 以覆盖的方式, 把命令的正确输出输出到指定的文件或设备中

  • 命令 >> 文件: 以追加的方式, 把命令的正确输出输出到指定的文件或设备中

  • 错误命令 2>文件: 覆盖, 把错误输出输出到指定的文件或设备中

  • 错误命令 2>>文件: 追加

  • 注意错误追加 >> 左右两侧没有空格

正确输出和错误输出同时保存:

  • 命令 > 文件 2>&1 以覆盖的方式, 把正确输出和错误输出都保存到同一文件中

  • 命令 >> 文件 2>&1 追加

  • 命令 &>文件 覆盖 正确与错误输出都保存到同一文件

  • 命令 &>>文件 追加

  • 命令>>文件一 2>>文件二__: 把正确的输出追加到文件一, 错误的追加到文件二

输入重定向

  1. wc [选项] [文件名]
  • 选项:

    • -c: 统计字节数

    • -w: 统计单词数

    • -l: 统计行数

多命令顺序执行

多命令执行符 格式 作用
; 命令1; 命令2 多个命令顺序执行, 命令之间没有任何逻辑关系
&& 命令1&&命令2 逻辑与 当命令1正确执行, 则命令2才会执行 当命令1执行不正确, 则命令2不会执行
|| 命令1 || 命令2 逻辑或 当命令1执行不正确, 则命令2才会执行,当命令1正确执行, 则命令2不会执行

管道符

  1. 命令1 | 命令2

命令 1 的正确输出作为命令 2 的操作对象

  • 例如, 查询建立连接的端口数量
  1. netstat -an | grep ESTABLISHED | wc -l

通配符

通配符 作用
? 匹配一个任意字符
* 匹配 0 各或多个任意字符, 也就是可以匹配任何内容
[] 匹配中括号中任意一个字符. 例如: [abc]代表匹配 a, 或 b, 或 c
[-] 匹配中括号中任意一个字符, -代表一个范围. 例如: [a-z]代表匹配一个小写字母
[^] 逻辑非, 表示匹配不是中括号内的一个字符. 例如: [^0-9]代表匹配一个不是数字的字符

Bash 中其他特殊符号

符号 作用
'' 单引号, 在单引号中所有的特殊符号, 如 $ 和 ` 都没有特殊含义
“" 双引号, 在双引号中特殊符号都没有特殊含义, 但是 $ ` 是例外, 拥有 调用变量的值, 引用命令, 和 转义字符 含义.
`` 反引号, 反引号括起来的内容是系统命令, 在 bash 中会先执行它. 和 $() 作用一样, 不过推荐使用$(), 因为反引号非常容易看错
$() 和反引号一样, 用来引用系统命令
# 在Shell脚本中, #开头的行代表注释
$ 用于调用变量的值, 如需要调用变量name的值时, 需要用$name的方式得到变量的值
\ 转义符, 跟在\之后的特殊符号将失去特殊含义, 变为普通字符. 如\$将输出$字符.