Bash 基本功能
快捷键
ctrl+A | 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。 |
ctrl+E | 把光标移动到命令行结尾 |
ctrl+C | 强制终止当前的命令 |
ctrl+L | 清屏,相当于 clear 命令 |
ctrl+U | 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便 |
ctrl+K | 删除或剪切光标之后的内容。 |
ctrl+Y | 粘贴 ctrl+U 或 ctrl+K 剪切的内容 |
ctrl+R | 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
ctrl+D | 退出当前终端 |
ctrl+Z | 暂停,并放入后台。这个快捷键牵扯工作管理的内容, |
ctrl+S | 暂停屏幕输出。 |
ctrl+Q | 恢复屏幕输出 |
输入输出重定向
Bash的标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
输出重定向
类 型 | 符 号 | 作用 |
标准输出重定向 | 命令 >文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。 |
标准输出重定向 | 命令>>文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 |
标准错误重定向 | 错误命令 2>文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。 |
标准错误重定向 | 错误命令 2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 >>文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
正确输出和错误输出同时保存 | 命令&>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令&>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
正确输出和错误输出同时保存 | 命令>>文件 1 2>>文件 | 2把正确的输出追加到文件 1 中,把错误的输出追加到文件 2 中 |
多命令顺序执行
多命令执行符 | 格式 | 作用 |
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令 1&&命令 2 | 当命令 1 正确执行($?=0),则命令 2才会执行当命令1执行不正确($?≠0),则命令2不会执行 |
|| | 命令|| 1命令 2 | 当命令1执行不正确($?≠0),则命令2才会执行当命令1正确执行($?=0),则命令2不会执行 |
管道符
grep
-A 数字 列出符合条件的行,并列出后续的n行列出符合条件的行
-B 数字 列出符合条件的行,并列出前面的n行列出符合条件的行
-C 统计找到的符合条件的字符串的次数
-i 忽略大小写
-n 输出行号
-v 反向查找
--color=auto 搜索出的关键字用颜色显示
find 和 grep 的区别
find命令是在系统当中搜索符合条件的文件名,如果需要模糊查询,使用通配符进行匹配,搜索时文件名是完全匹配。
注意:find 命令是可以通过-regex 选项识别正则表达式规则的,也就是说 find 命令可以按照正则表达式规则匹配,而正则表达式是模糊匹配。
grep命令是在文件当中搜索符合条件的字符串,如果需要模糊查询,使用正则表达式进行匹配,搜索时字符串是包含匹配。
通配符
通配符 | 作用 |
? | 匹配一个任意字符 |
* | 匹配 0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c。 |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[ ^0-9 ]代表匹配一个不是数字的字符。 |
Bash中的其他特殊符号
符号 | 作用 |
'' | 单引号。在单引号中所有的特殊符号,如"$”和“"”(反引号)都没有特殊含义。 |
"" | 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义 |
·· | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$0作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
() | 用于一串命令执行时,()中的命令会在子Shell中运行 |
{} | 用于一串命令执行时,{}中的命令会在当前Shell中执行。也可以用于变量变形与替换。 |
[] | 用于变量的测试。 |
# | 在Shel1脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。 |
Bash 的变量和运算符
在定义变量时,有一些规则需要遵守:
变量名称可以由字母、数字和下 线组成,但基不能以数字开头。如果变量名是“2name”则是错误的。
在Bash中,变餐的,认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
变量用等号连接值,等号左右两侧不能有空格。
变量的值如果有空格,需要使用单引号或双引号包括。如:"test="hello world!"”。其中双引号括起来的内容"","\”和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符。
在变量的值中,可以使用“\”转义符。
如果需要增加变量的值,那么可以进行变量值的叠加
变量的分类
用户自定义变量:这种变量是最常见的变量,由用户自由定义变量名和变量的值。
环境变量:这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
PATH变量 系统查找命令的路径
PATH变量的值是用“:”分割的路径,这些路径就是系统查找命令的路径。也就是说当我们输入了一个程序名,如果没有写入路径,系统就会到PATH变量定义的路径中去寻找,是否有可以执行的程序。如果找到则执行,否则会报“命令没有发现”的错误。
PS1 变量:命令提示符设置
可以按照我们自己的需求来定义自己喜欢的提示符。PS1可以支持以下这些选项:
\d:显示日期,格式为“星期 月 日”
\H:显示完整的主机名。如默认主机名"localhost.localdomain"
\h:显示简写主机名。如默认主机名“localhost”
\t:显示 24 小时制时间,格式为“HH:MM:SS”
\T:显示 12小时制时间,格式为“HH:MM:SS”
\A:显示 24 小时制时间,格式为“HH:MM”
\@:显示12小时制时间,格式为“HH:MM am/pm”
\u:显示当前用户名
\٧:显示 Bash 的版本信息
\w:显示当前所在目录的完整名称
\W:|显示当前所在目录的最后一个目录
\#:|执行的第几个命令
LANG 变量
LANG 变量定义了 Linux 系统的主语系环境,这个变量的默认值是:zh_CN. UTF-8
这是因为我们 Linux 安装时,选择的是中文安装,所以默认的主语系变量是“zh_CN.UTF-8”。
那么 Linux 中到底支持多少语系呢?我们可以使用以下命令查询:
locale -a more
位置参数变量
位置参数变量 | 作用 |
$n | n为数字,$0 代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
预定义变量
预定义变量 | 作用 |
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
接受键盘输入
read [选项] [变量名]
提示
-p 提示信息: 在等待read输入时,输出提示信息
-t 秒数: read 命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read 命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
变量名:
量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY如果只提供了一个变量名,则整个输入行赋予该变量如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量
shell 运算符
数值运算的方法
那如果我需要进行数值运算,可以采用以下三种方法中的任意一种:
使用 declare 声明变量类型
read [选项] [变量名]
提示
-p 提示信息: 在等待read输入时,输出提示信息
-t 秒数: read 命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read 命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
变量名:
量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY如果只提供了一个变量名,则整个输入行赋予该变量如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上
使用expr 或 let 数值运算工具
read [选项] [变量名]
提示
-p 提示信息: 在等待read输入时,输出提示信息
-t 秒数: read 命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read 命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
变量名:
量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY如果只提供了一个变量名,则整个输入行赋予该变量如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上
变量的测试与内容的置换
变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量 y 设置值 |
x=${y-新值} | x=新值 | x为空 | x=$y |
x=$ ly:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x 为空 | x 为空 | x=新值 |
x=${y=新值} | x=新值,y=新值 | x 为空,y 值不变 | x=$y,y 值不变 |
x=$ {y:=新值} | x=新值,y=新值 | x=新值,y=新值 | x=$y,y 值不变 |
x=${y?新值} | 新值输出到标准错误输出(就是屏幕) | x 为空 | x=$y |
x=${y:?新值} | 新值输出到标准错误输出 | 新值输出到标准错误输出 | x=$y |
环境变量配置文件
source 命令
source 配置文件
. 配置文件
环境变量配置文件
登录时生效的环境变量配置文件
在Linux系统登录时主要生效的环境变量配置文件有以下五个
/etc/profile
/etc/profile.d/*. sh
~/.bash_profile
~/. bashrc
/etc/bashrc
在这个环境变量配置文件中会定义这些默认环境变量:
USER变量:根据登录的用户,给这个变量赋值(就是让USER变量的值是当前用户)。
LOGNAME变量:根据USER变量的值,给这个变量赋值。
MAIL变量:根据登录的用户,定义用户的邮箱为/var/spool/mail/用户名
PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包含/sbin、/usr/sbin和/usr/local/sbin这三个系统命令目录。
HOSTNAME变量:更加主机名,给这个变量赋值。
HISTSIZE变量:定义历史命令的保存条数。
umask:定义umask默认权限。注意/etc/profile文件中的umask权限是在“有用户登录过程(也就是输入了用户名和密码)”时才会生效。
调用/etc/profile.d/*.sh文件,也就是调用/etc/profile.d/目录下所有以.sh结尾的文件。
注销时生效的环境变量配置文
在用户退出登录时,只会调用一个环境变量配置文件,就是~/.bash_logout,这个文件默认没有写入任何内容,可是如果我们希望再退出登录时执行一些操作,比如清除历史命令,备份某些数据,就可以把命令写入这个文件。
Shell 登录信息
/etc/issue我们在登录ttyl-tty6这六个本地终端时,会有几行的欢迎界面.在/etc/issue文件中,我们查看下这个文件:
Kernel \r on an \m
转义符 | 作用 |
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\1 | 显示登录的终端号,这个比较常用。 |
\m | 显示硬件体系结构,如i386、i686等 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登录用户的序列号 |
/etc/issue.net
/etc/issue是在本地终端登录是显示欢迎信息的,如果是远程登录(如ssh远程登录,或telnet远程登录)需要显示欢迎信息,则需要配置/etc/issue,net这个文件了。使用这个文件时由两点需要注意
首先,在/etc/issue文件中支持的转义符,在/etc/issue.net文件中不能使用。
其次,ssh远程登录是否显示/etc/issue.net文件中的欢迎信息,是由ssh的配置文件决定的。
/etc/motd
/etc/motd文件中也是显示欢迎信息的,这个文件和/etc/issue及/etc/issue.net文件的区别是:/etc/issue及/etc/issue.net是在用户登录之前显示欢迎信息,而/etc/motd是在用户输入用户名和密码,正确登录之后显示欢迎信息。在/etc/motd文件中的欢迎信息,不论是本地登录,还是远程登录都可以显示。
定义 Bash 快捷键
stty -a
#查询所有的快捷键
笔记PDF版:https://pan.baidu.com/s/14mLfdfJ8jk2zH9N6oMa7pg
提取码:wt3v