什么是shell?

Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的。

8.1-13 Linux shell 基础

我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。

CentOS7 默认shell 为 bash (Bourne Agin Shell)、zsh 、ksh 等。

Linux shell 分类:

bourne shell (/usr/bin/sh 、/bin/sh)

bourne again shell (/bin/sh)

C shell (/usr/bin/csh)

K shell (/usr/bin/ksh)

shell for root (/sbin/sh)

命令历史:

Bash拥有自动记录命令历史的功能,用户所执行的命令会在注销时自动记录到自己的家目录下的.bash_history 隐藏文件中。

查看这些命里历史记录的方法有很多,可以通过直接打开文件来查看,也可以通过键盘上下键进行上翻与下翻历史记录,还可以

通过history命令查看历史记录,所有的命令历史都有记录编号。命令历史能够记录的信息数量由HISTSIZE变量所决定。

CentOS7 默认通过/etc/profile 文件来定义HISTSIZE=1000,也就是最多可以记录最近所使用的1000条命令,当有第1001条命令执行时,第一条命令会被覆盖,可以通过 命令 history -c 清空所有命令历史记录。

①  上下键翻阅历史命令,找到合适的命令后直接按回车键就可以执行。

②  输入 !+ 【命令历史的关键字】 调用 历史记录中的命令

③  输入 !+ n 调用  命令历史中第 几条命令 

④  通过 Ctrl + r 快捷键 打开搜索功能,接着 输入 关键字,即可在命令历史中搜索相关命令,按回车完成执行操作,如果没有没有搜索到合适的命令,可以通过ESC 键 退出 搜索。

⑤ !! 类似 上翻一次执行上一条命令。

命令补全及别名:

命令补全:tab 键 敲一下  敲两下 显示匹配的命令

参数补全:安装 bash-completion

别名:

查看系统的所有名别:命令alias

•各用户都有自己配置别名的文件 ~/.bashrc

• ls /etc/profile.d/

• 自定义的alias放到~/.bashrc

设置一个别名:alias vimens33='vim /etc/sysconfig/network-scripts/ifcfg-ens33' (临时性)

取消一个别名:unalias vimens33

永久性:echo "alias vimens33='vim /etc/sysconfig/network-scripts/ifcfg-ens33' " >> /etc/profile | ~/.bashrc(需要重启)

通配符与输入输出重定向:

通配符:

    *      代表【0个或无穷个】任意字符

    ?    代表【一定有一个】任意字符

    []     代表【有一个在括号内】的字符(非任意字符)例如:[abcd] 表示 【一定有一个字符,可能是a、b、c、d、这四个字符中的一个】

    [-]    若有-减号在中括号内时,表示[在编码顺序内的所有字符] 例如[0-9] 代表0-9之间的所有数;[a-z] 代表a-z之间所有字母。

    [^]   若中括号内第一个字符为符号 (^) ,那表示 [反向选择],例如 [^abc] 代表 一定有一个字符,要是非 a, b, c 的其他字符就行。

    {}    表示符合括号内包含的多个文件

8.1-13 Linux shell 基础

8.1-13 Linux shell 基础

输出输入重定向:

8.1-13 Linux shell 基础

输入输出标准说明

STDIN 标准输入       默认的设备是键盘    文件编号为:0 

STDOUT 标准输出   默认的设备是显示器  文件编号为:1  ,也可以重定向到文件

STDERR 标准错误   默认的设备是显示器  文件编号为:2  ,也可以重定向到文件

输出定义:将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上

重定向输出使用”>” “>>” 操作符号

语法: > 文件名 #表示将标准输出的内容,写到后面的文件中,如果此文件名已经存在,将会覆盖原文件中的内容

          >> 文件名  #表示将标准输出的内容,追加到后面的文件中。若重定向的输出的文件不存在,则会新建该文件

输入定义:命令中接收输入的途径由默认的键盘改为其他文件.而不是等待从键盘输入

例如:grep root /etc/passwd  等价于 grep root < /etc/passwd

8.1-13 Linux shell 基础

EOF

EOF本意是 End Of File,表明到了文件末尾。”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。(右边跟一对终止符。终止符是可以自定义)

例如:

8.1-13 Linux shell 基础

错误重定向

将命令执行过程中出现的错误信息 (选项或参数错误) 保存到指定的文件,而不是直接显示到显示器

作用:错误信息保存到文件

操作符: 错误重定向符号:2>    ;  标准输出: 1< 或简写 <  ;  标准输入: 0> 或 >

在实际应用中,错误重定向可以用来收集执行的错误信息.为排错提供依据;对于shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁。

注:使用 2> 操作符时,会像使用 > 一样覆盖目标文件的内容,若追加而不覆盖文件的内容即可使用 2>> 操作符

管道符 与 作业控制:

管道符:可以将多条命令连接在一起使用,它的作用是将一个命令的标准输出重定向给下一个命令,并作为该命令的标准输入。

语法:command-a | command-b | command-c | ......

8.1-13 Linux shell 基础

注意:

1、管道命令只处理前一个命令正确输出,不处理错误输出

2、管道右边的命令,必须能够接收标准输入的数据流命令才行

3、管道符可以把两条命令连起来,它可以链接多个命令使用

作业控制:

概述:

Bash环境中通过命令开启进程的时候使用&符可以使该进程进入后台执行,或者一个命令执行后使用快捷键Ctrl +Z 将该进程放入后台暂停执行,以后随时可以使用jobs命令查看这些后台进程,并且会为每个这样的进程分配一个编号,通过fg<编号>的形式可以将这些后台的进程再次回调前台执行。

常用快捷键:

Ctrl + a     光标移动至首行

Ctrl + e    光标移动至行尾

Ctrl + f     光标右移一个字符

Ctrl + b    光标左移一个字符

Ctrl + l     清屏 等同命令 clear

Ctrl + u   删除光标至行首的字符

Ctrl + k    删除光标至行尾的字符

Ctrl + c    终止进程

Ctrl + z    挂起进程(jobs 命令查看挂起的进程)

Ctrl + w   删除光标前一个单词(以空格符为分隔符)

Alt  + d    删除光标后一个单词

Tab          自动补齐

8.1-13 Linux shell 基础

变量:

概述:变量使用存储非固定值得载体,它具有一个值,以及零个或多个属性。

语法:name=[value]

注意:

如果value没有指定,变量将被赋值为空字符串,变量定义后使用$变量名称来调用变量的值。变量名规则:字母、数字下划线,首位不能为数字,变量值有特殊符号时需要用单引号括起来。

shell 变量分为3中:系统变量、环境变量、用户变量。

作用:系统变量在对参数判断和命令返回值时使用,而环境变量则主要是在程序运行时需要设置,用户变量又称为局部变量,多使用在shell脚本内部或者临时局部。

常见的系统变量:

$0     当前脚本名称

$n     当前脚本的第n个参数

$*     当前脚本的所有参数(不包括程序本身)

$#    当前脚本的参数个数(不包括程序本身)

$?    命令或程序执行完后的状态,返回0 表示成功

$$    程序本身的PID号

常见的环境变量:

PATH                    命令所示路径,以冒号未分割

HOME                  打印用户家目录

SHELL                  显示当前shell类型

USER                   打印当前用户

ID                         打印当前用户id信息

PWD                    显示当前所在路径

TERM                  打印当前终端类型

HOSTNAME        显示当前主机名

环境变量配置文件:

• /etc/profile 用户环境变量,交互,登录才执行

• /etc/bashrc 用户不用登录,执行shell就生效

• ~/.bashrc

• ~/.bash_profile

• ~/.bash_history

• ~/.bash_logout

特殊符号:

# 超级用户提示符      或 注释

$ 普通用户提示符

* 任意个任意字符

?任意一个字符

\  脱义字符

| 管道符

•cut 分割,-d 分隔符  -f 指定段号   -c 指定第几个字符

• sort 排序, -n 以数字排序 -r 反序  -t 分隔符 -kn1/-kn1,n2

• wc -l 统计行数 -m 统计字符数 -w 统计词

• uniq 去重, -c统计行数

• tee 和>类似,重定向的同时还在屏幕显示

• tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'

• split 切割,-b大小(默认单位字节),-l行数

与shell 相关的特殊符号:

• $ 变量前缀,!$组合,正则里面表示行尾

• ;多条命令写到一行,用分号分割

• ~ 用户家目录,后面正则表达式表示匹配符

• & 放到命令后面,会把命令丢到后台

• > >> 2> 2>> &>

• [ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]

 || 和 && ,用于命令之间

 

 

 

相关文章:

  • 2022-01-05
  • 2021-04-20
  • 2021-11-22
  • 2021-12-20
  • 2021-08-28
  • 2021-05-11
  • 2021-10-06
  • 2022-12-23
猜你喜欢
  • 2021-11-23
  • 2021-10-28
  • 2021-06-22
  • 2021-11-18
  • 2022-01-27
  • 2021-08-22
相关资源
相似解决方案