Shell 基础笔记

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系统登录时主要生效的环境变量配置文件有以下五个

  1. /etc/profile

  1. /etc/profile.d/*. sh

  1. ~/.bash_profile

  1. ~/. bashrc

  1. /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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值