Linux笔记总结

Linux笔记(二)

Linux echo详解:输出命令

选项:
-e:支持反斜线控制的字符转换(具体参见表 1)
-n:取消输出后行末的换行符号(内容输出后不换行)
其实 echo 命令非常简单,命令的输出内容如果没有特殊含义,则原内容输出到屏幕;如果输出内容有特殊含义,则输出打印其含义。

所有的 Linux 命令都可以直接在 Shell 脚本中调用。这种特性使得 Shell 脚本和 Linux 系统结合得更加紧密,也更加方便了 Shell 脚本的编写

Shell history详解:查看历史命令

Bash 有完善的历史命令,这对于简化管理操作、排查系统错误都有重要的作用,而且使用简单方便,建议大家多使用历史命令。系统保存的历史命令可以使用 history 命令查询,
选项:
-c:清空历史命令;
-w:把缓存中的历史命令写入历史命令保存文件中。如果不手工指定历史命令保存文件,则放入默认历史命令保存文件 ~/.bash_history 中;

Shell alias命令详解:给命令设置别名

命令别名的优先级要高于命令本身。所以,一旦给 vim 命令设置了别名 vi,那么原始的 vi 命令就不能使用了。
命令执行时的顺序是这样的:

  1. 第一顺位执行用绝对路径或相对路径执行的命令
  2. 第二顺位执行别名
  3. 第三顺位执行 Bash 的内部命令
  4. 第四顺位执行按照 $PATH 环境变量定义的目录査找的第一条命令

执行 unalias命令 就可以方便地删除别名

Bash常用快捷键及其作用

在这里插入图片描述

Shell的输入重定向和输出重定向(超详细)

在 Linux 中,标准输入设备指的是键盘,标准输出设备指的是显示器。
在 Linux 中,所有的内容都是文件,计算机硬件也是文件,标准输入设备(键盘)和标准输出设备(显示器)也是文件。这些设备的设备文件名如下表所示。
在这里插入图片描述

输出重定向

在这里插入图片描述

输入重定向

输入重定向是改变输入的方向,不再使用键盘作为命令的输入,而是使用文件作为命令的输入
选项:
-c:统计字节数;
-w:统计单词数;
-l:统计行数;
可以统计我们通过键盘输入的数据。如果使用输入重定向符"<",则可以统计文件的内容
wc 表示统计文件(即输入)的行数,字节数
还有一个输入重定向符号"<<",**这个符号的作用是使用字符关键字作为命令输入的结束,**而不使用 Ctrl+D 快捷键。

Shell(Bash)多命令顺序执行方法详解

在这里插入图片描述

Shell grep命令详解:提取符合条件的字符串行

grep 的作用是在文件中提取和匹配符合条件的字符串行
选项:
-A 数字:列出符合条件的行,并列出后续的 n 行;
-B 数字:列出符合条件的行,并列出前面的 n 行;
-c:统计找到的符合条件的字符串的次数
-i:忽略大小写
-n:输出行号
-v:反向査找
–color=auto:搜索出的关键字用颜色显示
注意:grep 是行提取命令,所以只要一行数据中包含"搜索内容",就会列出整行的数据

Shell find和grep命令的区别(超详细)

find命令

find 命令用于在系统中搜索符合条件的文件名,如果需要模糊査询,则使用通配符进行匹配。搜索时文件名是完全匹配的。
完全匹配的意思就是:搜索的内容必须和原始文件一模一样,才能被搜索到。
grep 命令用于在文件中搜索符合条件的字符串,如果需要模糊査询,则使用正则表达式进行匹配。搜索时字符串是包含匹配的。

grep 命令和 find 命令不一样,使用 grep 命令在文件中査找符合条件的字符串时,只要搜索的内容包含在数据行中,就会列出整行内容。

Shell(Bash)管道符用法详解

在 Bash 中,管道符使用"丨"代表。管道符也是用来连接多条命令的,如"命令1丨命令2"。不过和多命令顺序执行不同的是,用管道符连接的命令,命令 1 的正确输出作为命令 2 的操作对象。这里需要注意,命令 1 必须有正确输出,而命令 2 必须可以处理命令 1 的输出结果;而且命令 2 只能处理命令 1 的正确输出,而不能处理错误输出

注意:ll 命令操作的是文件名,所以匹配时使用的是通配符。但是一旦加入管道符,管道符之后的内容相当于操作的是文件内容,所以匹配时使用的是正则表达式。

Shell通配符用法分析

在 Bash 中,如果需要模糊匹配文件名或目录名,就要用到通配符。通过表 1 介绍一下常用的通配符。
在这里插入图片描述
注意:? 表示匹配任何一个字符
* 表示匹配0个或者多个任意字符

Shell(Bash)单引号、双引号和反引号用法详解

引号有单引号和双引号之分,二者的主要区别在于,被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义;而被双引号括起来的字符中,"KaTeX parse error: Can't use function '\"' in math mode at position 4: "、"\̲"̲和反引号是**拥有特殊含义**…"代表引用变量的值,而反引号代表引用命令。
所以,如果需要在双引号中间输出"$“和反引号,则要在符号前加入转义符”"。

反引号

如果需要调用命令的输出,或把命令的输出赋予变量,则命令必须使用反引号包含,这条命令才会执行,反引号的作用和 $(命令) 是一样的,但是反引号非常容易和单引号搞混,所以推荐大家使用 $(命令) 的方式引用命令的输出。

Shell(Bash)小括号和大括号用法及区别

关于父 Shell 和子 Shell,可以理解为在一个操作界面中又开启了一个操作界面。
小括号和大括号主要区别在:
() 执行一串命令时,需要重新开启一个子 Shell 来执行
{} 执行一串命令时,在当前 Shell 中执行
() 和 {} 都是把一串命令放田括号里面,并且命令之间用";"隔开。
() 最后一条命令可以不用分号
{} 最后一条命令要用分号
{} 的第一条命令和左括号之间必须有一个空格
() 里的各命令不必和括号有空格
() 和 {} 中括号里面的某条命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的所有命令

Shell(Bash)变量及定义规范

在定义变量时,有一些规则需要遵守。

  1. 变量名可以由字母、数字和下画线组成,但是不能以数字开头。如果变量名是"2name",则是错误的。

  2. 在 Bash 中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。比如:
    [root@localhost ~]# aa=1+2
    [root@localhost ~]# echo $aa
    1+2
    3)变量用等号"=“连接值,”="左右两侧不能有空格。如果在"="左右两侧加入空格,那么 Linux 会误以为这是系统命令,是会报错的。

  3. 变量值中如果有空格,则需要使用单引号或双引号包含,如 test=“hello world!”。双引号括起来的内容"$"和反引号者都拥有特殊含义,而单引号括起来的内容都是普通字符。

  4. 在变量值中,可以使用转义符""。

  5. 如果需要増加变量值,那么可以进行变量叠加。
    注意:变量叠加可以使用两种格式:"$变量名"或 ${变量名}。

  6. 如果要把命令的执行结果作为变量值赋予变量,则需要使用反引号或 $() 包含命令。

  7. 环境变量名建议大写,便于区分。

Shell(Bash)用户自定义变量使用方法详解

这里要小心,在进行变量叠加时,变量名需要用双引号或 ${} 包含。

变量调用

name=“TOM”
echo $name

变量查看

如果不知道变量名,那么可以查询系统中已经存在的变量吗?只需使用 set 命令即可。set 命令可以用来查看系统中的所有变量(用户自定义变量和环境变量)和设定 Shell 的执行环境
选项:
-u:如果设定此选项,则在调用未声明的变量时会报错(默认无任何提示);
-x:如果设定此选项,则在命令执行之前会先把命令输出一次;

当设置了**-u选项后,如果调用没有设定的变量则会报错。默认是没有任何输出的**
set -u;#无任何输出
echo $name #会输出系统中包含的name的值

如果设定了-x选项,则会在每条命令执行之前先把命令输出一次

变量删除

要想删除自定义变量,可以使用 unset 命令。

注意:这里只是清空变量,而不是调用变量的值,所以在变量名前不需要加入符号
例如:unset name

Shell环境变量设置方法详解

环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的 Shell 中生效

这是有区别的,如果环境变量不写入配置文件,那么当前 Shell 一旦终止,这个环境变量就会消失,而只有写入配置文件才会永久地在所有 Shell 中生效。

Linux 中一般通过环境变量配置操作系统的环境,如提示符、查找命令的路径、用户家目录等,这些系统默认的环境变量的变量名是固定的,我们只能修改变量的值。

当然,我们也可以手工定义环境变量,不过这些自定义的环境变量不能修改操作系统环境,其只是一个全局变量而已。

环境变量设置

环境变量和用户自定义变量的设置方法相比,只需通过 export 命令将变量声明为环境变量即可。

环境变量查询和删除

查看环境变量:set 和env。env 和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量
删除环境变量:环境变量的删除方法和用户自定义变量是一样的,都使用 unset 命令。

Shell PATH变量用法详解:系统查找命令的路径

我们只要把程序脚本复制到 PATH 变量定义的任意路径中,比如 /bin/ 目录下,以后这个脚本就可以直接执行了不用再指定绝对路径或相对路径

Shell PS1变量:命令提示符设置

变量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:显示当前用户名。
\v:显示 Bash 的版本信息。
\w:显示当前所在目录的完整名称。
\W:显示当前所在目录的最后一个目录。
#:执行的第几条命令。
$:提示符。如果是 root 用户,则会显示提示符为"#";如果是普通用户,则会显示提示符为"$"。

在 PS1 变量中,如果是可以解释的符号,如"\u"、"\h"等,则显示这个符号的作用;如果是不能解释的符号,如"@“或"空格”,则原符号输出。我们可以修改PS1 变量。

Linux LANG变量设置:定义系统的主语系环境

LANG 是定义系统主语系的变量,LC_ALL 是定义整体语系的变量,一般使用 LANG 变量来定义系统语系。
默认语系下次重启之后系统所使用的语系;而当前系统语系当前系统所使用的语系
如果系统重启,则会从默认语系配置文件 /etc/sysconfig/i18n 中读出语系,**然后赋予变量 LANG,**让这个语系生效。也就是说,LANG 变量定义的语系只对当前系统生效;要想永久生效,就要修改 /etc/sysconfig/i18n 文件。

如果是纯字符界面(本地终端 tty1~tty6),是不能显示中文的,因为 Linux 的纯字符界面是不能显示中文这么复杂的编码的。

Shell(Bash)位置参数变量用法详解

在这里插入图片描述
注意:在 Shell 中,数值运算是必须使用特殊格式的
$* 会把接收到的所有参数当成一个整体对待,而 $@ 则会区别对待接收到的所有参数。

Shell预定义变量用法详解

预定义变量是在 Shell 一开始时就定义的变量,这一点和默认环境变量有些类似。不同的是,预定义变量不能重新定义,用户只能根据 Shell 的定义来使用这些变量。

严格来说,位置参数变量也是预定义变量的一种,知识位置参数变量的作用比较统一,所以我们把位置参数变量单独划分为一类数量。

在这里插入图片描述
**注意:**一般情况下使用" ? &quot; 变 量 来 判 断 上 一 条 命 令 是 否 正 确 执 行 , 我 们 后 面 要 讲 的 t e s t 测 试 命 令 也 是 通 过 &quot; ?&quot;变量来判断上一条命令是否正确执行,我们后面要讲的test测试命令也是通过&quot; ?"test"?“变量来判断上一条命令是否正确执行的。使用”$$"变量来给临时文件命名,以保证临时文件名不会重复。

Shell read命令详解:接收键盘或其它文件描述符的输入

我们也可以使用 read 命令向脚本中传入数据。read 命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read 命令将数据放入一个标准变量中。
选项
-p “提示信息”:在等待read输入时,输出提示信息;
-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间;
-n 字符数:read命令只接收指定的字符数就会执行;
-s: 隐藏输入的数据,适用于机密信息的输入;

变量名:
变量名可以自定义。如果不指定变量名,则会把输入保存到默认变量REPLY中;
如果只提供了一个变量名,则将整个输入行赋予该变量;
如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字;

Shell数值运算方法(3种)

使用declare声明变量类型

选项:
-:给变量设定类型属性;
+:取消变量的类型属性;
-a:将变量声明为数组型
-i:将变量声明为整数型(integer);
-r:将变量声明为只读变量。注意,一旦设置为只读变量,既不能修改变量的值,也不能删除变量,甚至不能通过 +r 取消只读属性;
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型

注意:

  1. 数组的下标是从 0 开始的,在调用数组的元素时,需要使用"${数组[下标]}"方式来读取。

  2. 只要我们在定义变量时采用了"变量名 [下标]"的格式,这个变量就会被系统认为是数组型了,不用强制声明。

  3. 可以使用 declare 命令把变量声明为环境变量

  4. 一旦给变量设定了只读属性,那么这个变量既不能修改变量的值,也不能删除变量,甚至不能使用"+r"选项取消只读属性。

使用expr或let数值运算工具

进行数值运算的第二种方法是使用 exp 命令,这个命令就没有 declare 命令那么复杂了。

在使用 expr 命令进行运算时,要注意"+"号左右两侧必须有空格,否则运算不执行。

let 命令,和 expr 命令基本类似let 命令对格式的要求要比 exp 命令格式的要求宽松,所以推荐使用 let 命令进行数值运算。

使用" ( ( 运 算 式 ) ) &quot; 或 &quot; ((运算式))&quot;或&quot; (())""[运算式]"方式运算

不过我们推荐使用"$((运算式))",这种方式更加简单,也更加常用。
例子:

gg=$[ a a + aa+ aa+bb ]
gg= ( ( (( ((aa+$bb))

Shell常用运算符

在这里插入图片描述

Shell变量测试与内容置换

在脚本中,有时需要判断变量是否存在或是否被赋予了值,如果变量已经存在并且被赋予了值,则不改变变量;如果变量不存在或没有被赋值,则赋予其新值。这时我们就可以使用变量测试与内容置换
在这里插入图片描述
如果大括号内没有":",则变量 y 为空或没有被设置,处理方法是不同的;如果大括号内有":",则变量 y 不论是为空,还是没有被设置,处理方法是一样的。

如果大括号内是"-“或”+",则在改变变量 x 的值的时候,变量 y 的值是不改变的;如果大括号内是"=",则在改变变量 x 的值的同时,变量 y 的值也会改变。

如果大括号内是"?",则当变量 y 不存在或为空时,会把"新值"当成报错输出到屏幕上。

Shell source命令:使环境变量配置文件强制生效

source 命令会强制执行脚本中的全部命令,而忽略脚本文件的权限。该命令主要用于让重新配置的环境变量配置文件强制生效。
举个例子:
[root@localhost ~]# source -/.bashrc

[raot@localhost ~]#. ~/.bashrc

"."就是 source 命令,使用哪种方法都是可以的。原来修改了环境变量配置文件,如果要想让其生效,则必须注销或重启系统。现在只要使用 source 命令就可以省略注销或重启的过程,更加方便。

登录时生效的环境变量配置文件

在 Linux 系统登录时主要生效的环境变量配置文件有以下 5 个:
/etc/profile。
/etc/profile.d/*.sh。
~/.bash_profile。
-/.bashrc。
/etc/bashrc。

这 5 个环境变量配置文件(/etc/profile.d/.sh 是一系列的配置文件)在用户登录过程中会依次生效。不过需要注意,/etc/profile、/etc/profile_d/.sh 和 /etc/bashrc 这三个环境变量配置文件会对所有的登录用户生效;而 ~/.bash_profile 和 ~/.bashrc 这两个环境变量配置文件只会对当前用户生效(因为每个用户的家目录中都有这两个文件)。

用户登录过程中先调用 /etc/profile 文件。在这个环境变量配置文件中会定义如下默认环境变量。
-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/porfile.d/ 目录下所有以 .sh 结尾的文件。sh 结尾的文件都会被 /etc/profile 文件调用,这里最常用的就是 lang.sh 文件,而这个文件又会调用 /etc/sysconfig/i18n 文件。/etc/sysconfig/i18n 就是前面讲过的默认语系配置文件。

由 /etc/profile 文件调用 /.bash_profile文件。/.bash_profile 文件就没有那么复杂了,这个文件主要实现了两个功能:
调用了 ~/.bashrc 文件。
在 PATH 变量后面加入了":$HOME/bin"这个目录。也就是说,如果我们在自己的家目录中建立了 bin 目录,然后把自己的脚本放入"~/bin"目录中,就可以直接执行脚本,而不用通过目录执行了。

由 ~/.bash_profile 文件调用 -/.bashrc 文件。在 -/.bashrc 文件中主要实现了两个功能:
定义默认别名。笔者把自己定义的别名也放入了这个文件。
调用/etc/bashrc。

由 ~/.bashrc 文件调用 /etc/bashrc 文件。在 /etc/bashrc 文件中主要定义了如下内容。
PS1 变量:也就是用户的提示符。如果我们想要永久修示符,就要在这个文件中修改。
umask:定义 umask 默认权限。这个文件中定义的 umask 是针对"没有用户登录过程(不需要输入用户名和密码,比如从一个终端切换到另一个终端,或进入子Shell)“时生效的。如果是"有用户登录过程”,则 /etc/profile 文件中的 umask 生效。
PATH 变量:会给 PATH 变量追加值,当然也是在"没有用户登陆过程"时才调用的。
调用 /etc/profile.d/.sh 文件,这也是在"没有用户登录过程"时才调用的。在"有用户登录过程"时,/etc/profile_d/.sh 文件已经被 /etc/profile 文件调用过了。

这 5 个环境变量配置文件会被依次调用。如果是我们自己定义的环境变量,则应该放入哪个文件呢?如果你的修改是打算对所有用户生效的,那么可以放入 /etc/profile 环境变量配置文件;如果你的修改只是给自己使用的,那么可以放入 ~/.bash_profile 或 -/.bashrc 环境变量配置文件。

但是如果我们误删除了这些环境变量,比如删除了 /etc/bashrc 或 ~/.bashrc 文件,那么这些文件中的配置就会失效(~/.bashrc 文件会调用 /etc/bashrc 文件),我们的提示符就会变成下面这样:
-bash-4.1#

因为在 /etc/bashrc 文件中会设定 PS1 命令提示符,如果这个文件不存在或没有被调用,那么提示符就会是 Bash 最基本的样子。

注销时生效的环境变量配置文件

在用户退出登录时,只会调用一个环境变量配置文件,就是 ~/.bash_logout。这个文件默认没有写入任何内容,但是如果我们希望在退出登录时执行一些操作,比如清除历史命令、备份某些数据,就可以把命令写入这个文件。

其他的环境变量配置文件

还有一些环境变量配置文件,最常见的就是 ~/bash_history 文件,也就是历史命令保存文件。这个文件已经讲过了,在这里我们只把它归入环境变量配置文件小节而已。
在这里插入图片描述
在本地终端登录时,因为有 tty1~tty6 这 6 个本地终端(可以通过 Alt+F1 ~ F6 快捷键切换),有时我们会忘记在哪个终端中,所以笔者更习惯加入"\l"选项,例如:
[root@localhost ~]# cat /etc/issue
CentOS release 6.3 (Final)
Kernel \r on an \m \l
这样我们在本地登陆时,就可以看到到底是在哪个终端中。

Shell编程

Shell元字符(正则表达式)及其用法详解

基础元字符

在这里插入图片描述
注意:
"" 和通配符中的 " "含义不同,它代表前一个字符重复 0 次或任意多次。比如,"a"并不是匹配"a"后面的任意字符,而是可以匹配所有内容,包括空白行。所以"a"这样的正则表达式是没有任何意义的。

注意:" * "前一个字符匹配0次或任意多次"*"。

如果这样写正则表达式"aa*",则代表这行字符串一定要有一个 a,但是后面有没有 a 都可以。也就是说,会匹配至少包含一个 a 的行。

" . "匹配除换行符外的任意一个字符
正则表达式"."只能匹配一个字符,这个字符可以是任意字符

注意

  1. 如果文档是在 Windows 中写入的,那么"n &quot; 是 不 能 正 确 执 行 的 , 因 为 在 W i n d o w s 中 换 行 符 是 &quot; M &quot; 是不能正确执行的,因为在 Windows 中换行符是&quot;^M "Windows"M",而在 Linux 中换行符是"$"。因为换行符不同,所以不能正确判断行结尾字符串。

  2. 而"^$“则会匹配空白行。如果不加”-n"选项,空白行是没有任何显示的;加入了"-n"能看到空白行的行号。

"[]"匹配中括号中指定的任意一个字符,且只匹配一个字符

这里需要注意,如果"^“在 [] 外,则代表的是行首;如果在 [] 内,则代表的是取反。比如” ^ [a-z] "会匹配以小写字母开头的行,而 " ^ [A-z] "会匹配不以小写字母开头的行。

""转义符
转义符会取消特殊符号的含义。例如:如果想要匹配使用".“结尾的行,那么正则表达式是”.KaTeX parse error: Can't use function '\.' in math mode at position 49: …所以需要在前面加入转义符,如"\̲.̲"。(注意斜杠的方向)

"{n}"表示其前面的字符恰好出现 n 次

"{n,}"表示其前面的字符出现不少于 n 次

扩展正则表达式

熟悉正则表达式的人应该很疑惑,在正则表达式中应该还可以支持一些元字符,比如"+"、"?"、"|"、"()"。

其实 Linux 是支持这些元字符的,只是 grep 命令默认不支持而已。如果要想支持这些元字符,则必须使用 egrep 或 grep -E 命令,所以我们又把这些元字符称作扩展元字符。

如果査询 grep 命令的帮助,**对 egrep 的说明就是和 grep -E 一样的命令,所以我们可以把这两个命令当作别名来对待。**通过表 2 来看看 Shell 中支持的扩展元字符。

在这里插入图片描述

Shell cut命令:查找符合条件的行

grep 命令是在文件中提取符合条件的行,也就是分析一行的信息,如果行中包含需要的信息,就把该行提取出来。而如果要进行列提取,就要利用 cut 命令了

不过要小心,虽然 cut 命令用于提取符合条件的列,但是也要一行一行地进行数据提取。也就是说,先要读取文本的第一行数据,在此行中判断是否有符合条件的字段,然后再处理第二行数据。我们也可以把 cut 成为字段提取命令。
选项:
-f 列号:提取第几列;
-d 分隔符:按照指定分隔符分割列;
-c 字符范围:不依赖分隔符来区分列,而是通过字符范围(行首为 0)来进行字段提取。"n-"表示从第 n 个字符到行尾;“n-m"表示从第 n 个字符到第 m 个字符;”-m"表示从第 1 个字符到第 m 个字符;

注意:cut 命令的默认分隔符是制表符,也就是 Tab 键,
cut 命令也可以手工指定分隔符。例如:cut -d “:” -f 1,3 /etc/passwd

Shell printf格式化输出命令

需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print 会在每个输出之后自动加入一个换行符;而 printf 是标准格式输出命令,并不会自动加入换行符,如果需要换行,则需要手工加入换行符),但是在 Bash 中只能识别标准格式化输出命令 printf。所以我们在本小节中介绍的是标准格式化输出命令 printf。

输出类型:
%ns:输出字符串。n 是数字,指代输出几个字符;
%ni:输出整数。n 是数字,指代输出几个数字‘’
%m.nf: 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数。如 %8.2f 代表共输出 8 位数,其中 2 位是小数,6 位是整数;

输出格式:
\a: 输出警告声音;
\b:输出退格键,也就是 Backspaced 键;
\f:清除屏幕;
\n:换行;
\r:回车,也就是 Enter 键;
\t:水平输出退格键,也就是 Tab 键;
\v:垂直输出退格键,也就是 Tab 键;

如果不指定输出格式,则会把所有输出内容连在一起输出。其实文本的输出本身就是这样的,cat 等文本输出命令之所以可以按照格式漂亮地输出,那是因为 cat 命令已经设定了输出格式。

注意:在 printf 命令的单引号中输入的任何空格都不会反映到格式输出中,只有格式输出符号才能影响 printf 命令的输出结果。

Shell awk命令详解(格式+使用方法)

在这里插入图片描述
动作(Action):
格式化输出;
流程控制语句;

awk的条件

1) BEGIN
BEGIN 是 awk 的保留字,是一种特殊的条件类型。BEGIN 的执行时机是"在 awk 程序一开始,尚未读取任何数据之前"。

一旦 BEGIN 后的动作执行一次,当 awk 开始从文件中读入数据时,BEGIN 的条件就不再成立,所以 BEGIN 定义的动作只能被执行一次。
awk命令只要检测不到完整的单引号就不会执行

2) END
END 也是 awk 的保留字,不过刚好和 BEGIN 相反。END 是在 awk 程序处理完所有数据,即将结束时执行的。END 后的动作只在程序结束时执行一次。

3)关系运算符
在加入了条件之后,只有条件成立,动作才会执行;如果条件不满足,则动作不执行。
在 awk 中,只有使用"//“包含的字符串,awk 命令才会査找。也就是说,字符串必须用”//“包含,awk 命令才能正确识别。
4) 正则表达式
如果想让 awk 识别字符串,则必须使用”//"包含,例如:

awk流程制

在awk编程中,因为命令语句非常长,所以在输入格式时需要注意以下内容:
**多个条件{动作}可以用空格分隔,**也可以用回车分隔。
在一个动作中,如果需要执行多条命令,则需要用分隔,或用回车分隔。
在awk中,变量的赋值与调用都不需要加入"$“符号。
在条件中判断两个值是否相同,请使用”==",以便和变量赋值进行区分。

shell sed命令详解:选取、替换、删除、新増数据

sed 主要是用来将数据进行选取、替换、删除、新増的命令。
选项:
-n:一般 sed 命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过 sed 命令处理的行输出到屏幕上;
-e: 允许对输入数据应用多条 sed 命令编辑;
-f 脚本文件名:从 sed 脚本中读入 sed 操作。和 awk 命令的 -f 选项非常类似;
-r:在 sed 中支持扩展正则表达式;
-i:用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出动作;
a \:追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结
c \:行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结;
i \:插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
d:删除,删除指定的行;
P:打印,输出指定的行;
s:字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”(和Vim中的替换格式类似);
sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,则连文件都没有),而是把修改结果只显示到屏幕上,除非使用"-i"选项才会直接修改文件。

注意:当我们需要输出指定的行时,需要把"-n"选项和"p"动作一起使用。
所有的动作必须使用"单引号"包含;其次,在动作中可以使用数字代表行号,逗号代表连续的行范围。还可以使用" &quot; 代 表 最 后 一 行 , 如 果 动 作 是 &quot; 2 , &quot;代表最后一行,如果动作是&quot;2, ""2,d",则代表从第二行删除到最后一行。

"-n"只用于查看 sed 命令操作的数据,而并非查看所有的数据。
如果我确定需要让 sed 命令直接处理文件的内容,则可以使用"-i"选项。

字符串替换

“c"动作是进行整行替换的,如果仅仅想替换行中的部分数据,就要使用"s"动作了。
“-e"选项可以同时执行多个 sed 动作,当然,如果只执行一个动作,则也可以使用”-e"选项,但是这时没有什么意义。还要注意,多个动作之间要用”;"或回车分隔.

Linux sort命令详解:字符串排序

sort 是 Linux 的排序命令,而且可以依据不同的数据类型来进行排序。sort 将文件的每一行作为一个单位,相互比较。比较原则是从首字符向后,依次按 ASCII 码值进行比较,最后将它们按升序输出
选项:
-f:忽略大小写;
-b:忽略每行前面的空白部分;
-n:以数值型进行排序,默认使用字符串排序;
-r:反向排序;
-u:删除重复行。就是 uniq 命令;
-t:指定分隔符,默认分隔符是制表符;
-k [n,m]:按照指定的字段范围排序。从第 n 个字段开始,到第 m 个字(默认到行尾);

如果想要指定排序的字段,则需要使用"-t"选项指定分隔符,并使用"-k"选项指定字段号。

Linux wc命令:统计指定文件中的字节数、字数、行数

选项:
-l:只统计行数;
-w:只统计单词数;
-m:只统计字符数;

Shell test命令:条件判断,检查某条件是否成立

在这里插入图片描述

按照文件权限进行判断

在这里插入图片描述
在使用 test 命令判断权限时,并不能区分所有者、属组和其他人。只要文件拥有权限,test 判断就为真,而不能区分哪个用户身份拥有权限。

两个文件之间进行比较

在这里插入图片描述

两个整数之间进行比较

在这里插入图片描述

字符串判断

在这里插入图片描述

多重条件判断

在这里插入图片描述

Shell if条件判断语句用法详解

单分支 if 条件语句

if 语句使用 fi 结尾,和一般语言使用大括号结尾不同。

[条件判断式] 就是使用 test 命令判断,所以中括号和条件判断式之间必须有空格。
then 后面跟符合条件之后执行的程序,可以放在 [] 之后,用":“分隔;也可以换行写入,就不需要”:"了,

单分支 if 条件语句非常简单,但是千万不要小看它,这是流程控制语句最基本的语法。而且在实现 Linux 管理时,我们的管理脚本一般都不复杂,单分支 if 条件语句使用的概率还是很大的。

单分支 if 条件语句最为简单,就是只有一个判断条件,如果符合条件则执行某个程序,否则什么事情都不做

双分支条件语句

多分支条件语句

Shell case语句(多分支条件判断)

case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系

case 语句会取出变量中的值,然后与语句体中的值逐一比较。如果数值符合,则执行对应的程序;如果数值不符,则依次比较下一个值;如果所有的值都不符合,则执行")"("“代表所有其他值)中的程序。
case 语句以"case"开头,以"esac"结尾。
在每个分支程序之后要以”;;"(双分号)结尾,代表该程序段结束(千万不要忘记)
在这里插入图片描述

Shell for循环及用法举例

for 循环的语法有如下 2 种。

语法一

在这里插入图片描述
在这种语法中,for 循环的次数取决于 in 后面值的个数(以空格分隔),有几个值就循环几次,并且每次循环都把值赋予变量。也就是说,假设 in 后面有三个值,for 会循环三次,第一次循环会把值 1 赋予变量,第二次循环会把值 2 赋予变量,以此类推。

语法二

在这里插入图片描述

Shell exit流程控制语句及用法

系统中是有 exit 命令的,用于退出当前用户的登录状态。但是在 Shell 脚本中,exit 语句是用来退出当前脚本的。也就是说,在 Shell 脚本中,只要碰到了 exit 语句,后续的程序就不再执行,而直接退出脚本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值