【Linux】Shell概念、命令、操作(重定向、管道、变量)-三、操作篇

时间:2024-10-25 08:43:36

1、自动补全

shell提供自动补全功能,按一次Tab补全,两次列出所有匹配项。
在这里插入图片描述

2、查看历史命令

  • history命令
    在这里插入图片描述
  • 键盘上下键,可逐条查看命令行历史记录

3、命令替换

命令替换有两种方式:反引号` (esc下面的按键) 和$()
作用:将命令字符替换为命令的执行结果。
例:

ls 命令的作用是显示当前文件路径下的文件名
那么,它的执行结果就是:当前文件路径下的文件名,即为`ls`
这时我们将其与echo联用

在这里插入图片描述
此时,两个命令作用相同。
使用$()也是一样:
在这里插入图片描述

4、重定向

shell默认接收用户输入到终端的命令,在执行后打印错误信息和输出结果。

标准输入文件标识符 0
标准输出文件标识符 1
标准错误文件标识符 2

4.1、输入重定向

命令 0<文件名/路径    #0可被省略

#以下这段命令为例
wc -l < /usr/share/hwdata/oui.txt

在这里插入图片描述
wc -l 作用:统计文件中的行数
将/usr/share/hwdata/oui.txt中的内容,作为wc命令的输入,即统计/usr/share/hwdata/oui.txt文本中的行数。

4.2、输出重定向

命令 1>文件名/路径    #1可被省略

#以下这段命令为例
cat 文件1 > 文件2

将文件1中的内容以覆盖的形式打印到文件2中,若想保留文件2的内容,可用>>,将文件1中的内容追加到文件2中。
(cat:打印文件内容)

4.3、错误重定向

命令 2>文件名/路径    #2不可被省略

将错误信息重定向到文件中。
也可用>>,将错误信息追加到文件中。

5、管道

符号“|”,可将多个简单命令连接起来,使一个命令的输出,作为另一个命令的输入
格式:

命令1 | 命令2 | 命令3

以ls命令和grep命令为例:

ls -l /etc | grep init    #搜索并打印/etc目录下,包含关键字符init的行

将ls -l /etc 的输出(/etc目录下的文件),作为grep的输入,即在/etc目录下的文件中搜索包含init的行。
在这里插入图片描述
在这里插入图片描述

6、shell中的变量

shell提供了一些变量,这些变量可以保存路径名、文件名或数值等,shell中常用的变量有四种:本地变量、环境变量、位置变量、特殊变量。

6.1、本地变量

相当于C语言中的局部变量,只在本shell中有效,退出本shell后将被销毁。
如果变量未被指定,将被赋值为空字符串。在使用变量时,要在变量前加上“$”符号。
在这里插入图片描述
还可以连续输出多个变量
在这里插入图片描述
使用read命令,作用和(scanf/gets)相似。
从标准输入中读取变量值。

-p     #设置输入提示信息

在这里插入图片描述

read -p "please input an int number:" ADD

在这里插入图片描述
删除变量(unset)

echo $ADD
unset ADD	  #删除本地变量ADD
echo $ADD

在这里插入图片描述

6.2、环境变量

环境变量一般用来存储路径列表。用export定义的环境变量只在本shell和其子shell中有效,shell重启后将丢失。

格式:

export 变量名=变量值

export是环境变量的关键字,用于声明该变量为环境变量。

export APP=/usr/local

在这里插入图片描述
查看所有环境变量(env)

env
unset 变量名

删除环境变量(unset)

6.3、位置变量

用于接收传入shell脚本的参数,故位置变量也称为位置参数。
格式:

$n			#用于接收传递给shell脚本的第n个参数

6.4、特殊变量

用来查看脚本的运行信息。

常用特殊变量:

$#  传递脚本的参数数量
$*$@  传递到脚本的所有参数
$?   命令退出状态,0正常退出,非0异常退出
$$   表示进程的PID

7、shell中的符号

7.1、单引号

可将它中间的字符还原成字面意义,屏蔽shell元字符。
例,

'$NUM'  #NUM为本地变量。
NUM=100
echo $NUM
echo '$NUM'

在这里插入图片描述

7.2、双引号

具有屏蔽功能,但不会屏蔽$、\、``符号
例,

NUM=100
echo $NUM
echo "$NUM"

在这里插入图片描述

7.3、反引号

进行命令替换
例,

date    #显示系统时间
echo "Today is `date`"

在这里插入图片描述

7.4、通配符

*     #与0个或多个字符匹配#与任何单个字符匹配
[]    #与[]中的任一字符匹配
[!]   #与[]外的任一字符匹配
1、*

例,列出/etc目录下的以sys开头的所有文件,

ls -d /etc/sys*     #-d选项,只对目标目录本身处理,不做递归处理。

在这里插入图片描述
匹配以sys开头的所有文件。

2、?

每次只能匹配一个字符。
例,查找/etc目录下文件名是由两个字符组成的文件

ls -d /etc/??
ls -d ??   #在/etc路径下

在这里插入图片描述
在这里插入图片描述

3、[]

表示与[]中任一字符匹配,通常是一个范围。
例,在/etc目录下,列出以f~h开头,以.conf结尾的文件

ls /etc/[f-h]*.conf

在这里插入图片描述

4、[!]

表示除了[]里面的字符,与其它任一字符匹配。
例,查找以y开头,不以.conf结尾的文件

ls -d /etc/y*[!conf]

在这里插入图片描述