linux shell

1. linux shell 是什么

  • shell 系统的用户界面, 提供了用户与内核交互操作的一个接口, 用于收集用户的指令并将其反馈给内核, 同时也会将内核反馈的信息发送到指定的地方.
  • shell 的用处就是方便用户操作内核.
  • shell 简单理解就像是 安卓手机的系统, 每家手机厂商都有自己的操作系统, 但是底层都是linux 内核, 每家的系统都能够打电话, 发短信, 但是各自的界面, 操作可能都有所不同, 最终能实现同一种功能.
  • 常见的shell有 bash, sh, csh, ksh 等等.

2. bash 中的一些常用操作

2.1 tab 补全

  • 在 bash shell 中, 如果输入命令的开头部分, 然后按下tab 键, bash 将会自动补全后半部分, 如果有多个相同开头的命令, bash 将会把所有相同开头的 命令输出出来, 提供给用户选择.

android系统如何执行shell脚本 android linux shell_shell

2.2 bash 中 $ 的作用

  • bash 中所有的变量都是以$ 符号开头定义的, 如 $PATH 就是系统的环境变量命令的路径, $HOME 就是当前用户的家目录.
  • 用户可以自定义 变量, 只需要 $变量名=变量值 即可
  • bash 中也有一些特殊的变量
$?:         上一条命令的返回状态, 0表示成功
$#:         传递参数的个数
$*:         所有传递的参数
$@:         与$* 类似, 不过会在引号内返回每个参数
$0:         执行命令/文件名
$$:         shell 或脚本 的进程号
$_:         上一条命令的最后一个变量
$-:         显示当前shell的选项

android系统如何执行shell脚本 android linux shell_命令行_02

  • bash 常见返回状态
0:      正常结束
1:      通用执行错误
2:      调用shell错误
126:    命令不可执行
127:    命令未找到
128:    无效退出参数
139:    被ctrl-c 强制终止
255:    退出状态码越界

android系统如何执行shell脚本 android linux shell_环境变量_03

2.3 ! 的使用

# ! 是引用 History历史命令的值
!n:     表示引用history 中 第n 条命令
!!:     引用上一条 命令 , 等同于 !
!COMMAND:  引用上一条 command 开头的命令
!COMMAND:N      引用上一条COMMAND 命令的 第N 个参数
!COMMAND:$      引用上一个 COMMAND 命令的 最后一个参数
!^:             使用上一个命令的 第一个参数

android系统如何执行shell脚本 android linux shell_命令行_04

android系统如何执行shell脚本 android linux shell_操作系统_05

2.4 bash 常用快捷键

# 移动操作
Ctrl + a:       移动到命令 行首
Ctrl + e:       移动到命令 行尾
Ctrl + ←:       向左移动一个单词
Ctrl + →:       向右移动一个单词
Ctrl + x:       在命令行首和光标处切换


# 删除(剪切)操作 粘贴
Ctrl + a:       剪切光标处到 命令行首
Ctrl + w:       剪切光标处到 光标前一个空格
Ctrl + k:       剪切光标处到 命令行尾
Ctrl + d:       相当于 delete 键, 向后删除
Ctrl + y:       粘贴至光标后

# 搜素历史命令
Ctrl + r:       从下向上搜索历史命令
Ctrl + p:       上一条历史命令
Ctrl + n:       下一条历史命令
Ctrl + g:       停止搜索, 还原命令行

# 其他操作
Ctrl + l:       清屏

2.2 bash 中的通配符

  • bash 中的通配符原理和 正则里面的通配符类似.
  1. * 通配符
  • 代表任意多个字符
  1. ? 通配符
  • 表示统配任何单个字符

android系统如何执行shell脚本 android linux shell_操作系统_06

  1. [] 通配符
  • 通配 一个区间内的字符

android系统如何执行shell脚本 android linux shell_命令行_07

  1. [^] 通配符
  • 不取[] 内定义的字符, 取反
  1. { } 通配符
  • 表示包含多个文件

android系统如何执行shell脚本 android linux shell_操作系统_08

3. 输入输出重定向 以及管道

3.1 标准输入输出

  • linux 中有定义了标准输入输出
名称:   文件描述     含义       设备       说明
STDIN      0      标准输入      键盘       命令在执行时所要的输入数据通过它来取得
STDOUT     1      标准输出      屏幕       命令在执行后的输出结果从该端口送出
STDERR     3      标准错误      屏幕       命令执行时的错误信息通过该端口送出

3.1 输出重定向

  • 输出重定向符号为 >
  • 语法: COMMAND > FILE
  • 示例

android系统如何执行shell脚本 android linux shell_shell_09

android系统如何执行shell脚本 android linux shell_命令行_10

-- 如果不希望覆盖的话, 需要使用 >> 用于追加内容.

3.2 输入重定向

  • 输入出重定向 <
  • 一般在shell 脚本中用的较多

android系统如何执行shell脚本 android linux shell_bash_11

3.3 多命令顺序执行

  • ; 符号用作连接两个命令, 顺序执行, 第二个命令不受第一个命令的结果干扰
  • && 用作于连接两个命令, 如果第一个成功执行, 才会执行第二个命令
  • || 第一个如果成功执行了, 就不会执行第二个命令
  • | 管道符用作将第一个命令的结果传递 第二个命令 作为参数使用.

android系统如何执行shell脚本 android linux shell_bash_12

android系统如何执行shell脚本 android linux shell_bash_13

3. 环境变量

3.1 Linux 下变量分类

  1. 全局永久性变量
  • 定义在 /etc/profile 内, 对所有用户都生效, 且重启后任生效
  1. 用户级永久变量
  • 定义在 ~/.bash_profile 中, 对于单个用户生效, 重启后任存在
  1. 临时变量
  • 在 shell 中使用 export 声明的变量, 仅在用户当前登录的shell 中生效, 退出shell 或重启 均会失效.

3.2 变量设置方法

  • 变量声明使用 export ,
  • 可以直接声明, 或添加在 /etc/profile, 或~/bash_profile 中.

3.3 环境变量相关文件

  • /etc/profie 所有用户的环境变量, 全局的
  • /etc/bashrc 用户在非登录状态下执行的命令 就会使用这个配置文件
  • ~/bash_profile 用自己的环境变量配置文件
  • ~/bashrc 同上, 非登录状态下执行的操作, 就可以调用这个配置
  • ~/bash_history 用户所有操作命令 的历史文件
  • ~/bash_logout 用户退出时执行的配置

END