自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

原创 shell_59.Linux控制命令输出

shell 输出到 null 文件的任何数据都不会被保存,全部会被丢弃。在 Linux 系统中,null 文件的标准位置是/dev/null。要解决这个问题,可以将 STDERR 重定向到一个名为 null 文件的特殊文件。跟它的名字很像,null 文件里什么都没有。1.如果在后台运行的脚本出现错误消息,那么 shell 就会将其通过邮件发送给进程属主。3.也可以在输入重定向中将/dev/null 作为输入文件。这会很麻烦,尤其是当运行的脚本生成很多烦琐的小错误时。

2023-10-30 07:50:15 218

原创 shell_58.Linux列出打开的文件描述符

1.能用的文件描述符只有 9 个,你可能会觉得这没什么复杂的。在脚本运行 lsof 命令时,你会在输出中看到新的文件描述符。我们去掉了输出中的第一部分,这样就能看到最终的文件名了。文件名显示了文件描述符所使用文件的完整路径。每个文件都显示为 REG 类型,说明这些是文件系统中的常规文件。lsof 命令会列出整个 Linux 系统打开的所有文件描述符,这包括所有后台进程以及登录用户打开的文件。个脚本创建了 3 个替代性文件描述符,两个用作输出(3 和 6),一个用作输入(7)。列出打开的文件描述符。

2023-10-30 07:47:57 307

原创 shell_57.Linux创建自己的重定向

接下来,使用分配好的文件描述符,通过 read 命令读取文件中的第一行,然后将其显示在 STDOUT 中。第一个 exec 命令将文件描述符 3 重定向到了文件描述符 1(STDOUT)的当前位置,也就是显示器。如果创建了新的输入文件描述符或输出文件描述符,那么 shell 会在脚本退出时自动将其关闭。这意味着可以将 STDOUT 的原先位置重定向到另一个文件描述符,然后再利用该文件描述符恢复 STDOUT。当 echo 语句将数据输出到文件时,会将数据写入文件指针的当前位置,覆盖该位置上的已有数据。

2023-10-29 09:16:24 180

原创 shell_56.Linux永久重定向

2.exec 命令会启动一个新 shell 并将 STDOUT 文件描述符重定向到指定文件。脚本中送往STDOUT 的所有输出都会被重定向。1.脚本中有大量数据需要重定向,那么逐条重定向所有的 echo 语句会很烦琐。

2023-10-29 09:13:14 175

原创 shell_55.Linux临时重定向

如果有意在脚本中生成错误消息,可以将单独的一行输出重定向到 STDERR。这只需要使用输出重定向符号将输出重定向到 STDERR 文件描述符。记住,在默认情况下,STDERR 和 STDOUT 指向的位置是一样的。

2023-10-28 09:55:33 139

原创 shell_54.linux重定向错误

ls 命令尝试列出了 3 个文件(test、badtest 和 test2)的信息。正常输出被送往默认的 STDOUT文件描述符,也就是显示器。由于该命令将文件描述符 2(STDERR)重定向到了一个输出文件,因此 shell 会将产生的所有错误消息直接送往指定文件。3.如果愿意,也可以将 STDERR 和 STDOUT 的输出重定向到同一个文件。混合使用 STDOUT和 STDERR 错误消息。2.重定向错误消息和正常输出。

2023-10-28 09:53:33 87

原创 shell_53.理解Linux输入和输出

STDIN 文件描述符代表 shell 的标准输入。STDERR 文件描述符代表 shell 的标准错误输出。文件描述符是一个非负整数,唯一会标识的是会话中打开的文件。STDOUT 文件描述符代表 shell 的标准输出。shell的所有输出(包括 shell 中运行的程序和脚本)会被送往标准输出,也就是显示器。通过输出重定向符(>),原本应该出现在屏幕上的所有输出被 shell 重定向到了指定的文件。shell 或运行在 shell 中的程序和脚本报错时,生成的错误消息都会被送往这个位置。

2023-10-27 07:55:49 252

原创 shell_52.Linux测试与其他网络主机的连通性脚本

ping 命令或 ping6 命令可以快速测试网络主机是否可用。这个命令很有用,经常作为首选工具。如果只是检查单个主机,那么直接使用该命令即可。本节将展示一个实用脚本,该脚本在处理用户输入的同时,使用 ping 命令或 ping6 命令来测试与其他网络主机的连通性。这个脚本通过两种方法来选择要检查的主机:一是使用命令行选项,二是使用文件。但是如果有数个甚至数百个主机需要检查,则 shell 脚本可以助你一臂之力。

2023-10-27 07:50:38 1012

原创 shell_51.Linux获取用户输入_无显示读取,从文件中读取

最常见的方法是对文件使用 cat 命令,将结果通过管道直接传给含有 read 命令的 while 命令。-s 选项可以避免在 read 命令中输入的数据出现在屏幕上(其实数据还是会被显示,只不过 read 命令将文本颜色设成了跟背景色一样)。while 循环会持续通过 read 命令处理文件中的各行,直到 read 命令以非 0退出状态码退出。我们也可以使用 read 命令读取文件。每次调用 read 命令都会从指定文件中读取一行文本。当文件中没有内容可读时,read 命令会退出并返回非 0 退出状态码。

2023-10-26 08:25:42 215

原创 shell_50.Linux获取用户输入_超时

本都必须继续执行,你可以用-t 选项来指定一个计时器。-t 选项会指定 read 命令等待输入的。使用 read 命令时要当心。脚本可能会一直苦等着用户输入。如果不管是否有数据输入,脚。可以不对输入过程计时,而是让 read 命令统计输入的字符数。当字符数达到预设值时,

2023-10-26 08:20:10 157

原创 shell_49.Linux获取用户输入_基本的读取

【代码】shell_48.Linux获取用户输入_基本的读取。

2023-10-25 20:52:02 82

原创 shell_47.Linux选项标准化

选用哪些选项字母以及选项的具体用法,完全由你掌握。-o 将所有输出重定向至指定的文件。-f 指定读入数据的文件。-h 显示命令的帮助信息。-q 以静默模式运行。-s 以静默模式运行。-a 显示所有对象。-v 生成详细输出。-d 指定目录。

2023-10-25 07:51:34 59

原创 shell_46.Linux使用 getopts 命令

getopts 每次只处理一个检测到的命令行参数。在处理完所有的参数后,getopts 会退出并返回一个大于 0 的退出状态码。这使其非常适合用在解析命令行参数的循环中。getopt 与 getopts 的不同之处在于,前者在将命令行中选项和参数处理后只生成一个输出,而后者能够和已有的 shell 位置变量配合默契。OPTIND 环境变量保存着参数列表中 getopts 正在处理的参数位置。这样在处理完当前选项之后就能继续处理其他命令行参数了。getopts 命令有几个不错的特性。

2023-10-25 07:49:40 191

原创 shell_45.Linux在脚本中使用 getopt

getopt 命令并不擅长处理带空格和引号的参数值。它会将空格当作参数分隔符,而不是根。目前看起来相当不错。但是,getopt 命令中仍然隐藏着一个小问题。据双引号将二者当作一个参数。好在还有另外的解决方案。在脚本中使用 getopt。

2023-10-24 09:09:45 186

原创 shell_44.Linux使用 getopt 命令

getopt 命令可以接受一系列任意形式的命令行选项和参数,并自动将其转换成适当的格式。getopt 命令在处理命令行选项和参数时非常方便。它能够识别命令行参数,简化解析过程。使用 getopt 命令。

2023-10-24 09:03:49 201

原创 shell_43.Linux三种在 shell 脚本中处理选项的方法

在 Linux 中,处理这个问题的标准做法是使用特殊字符将两者分开,该字符会告诉脚本选项何时结束,普通参数何时开始。在双连字符之后,脚本就可以放心地将剩下的部分作为参数处理了。"case" 语句会检查每个参数,确认是否为有效的选项。由于要处理的选项位于$1,因此额外的参数值就应该位于$2(因为所有的参数在处理完之后都会被移出)。在这个例子中,"case" 语句定义了 3 个要处理的选项。(2)当命令行选项要求额外的参数时,脚本必须能够检测到并正确地加以处理。3种在 shell 脚本中处理选项的方法。

2023-10-23 22:14:35 329

原创 shell_42.Linux移动参数

bash shell 工具箱中的另一件工具是 shift 命令,该命令可用于操作命令行参数。跟字面上的意思一样,shift 命令会根据命令行参数的相对位置进行移动。在使用 shift 命令时,默认情况下会将每个位置的变量值都向左移动一个位置。因此,变量$3 的值会移入$2,变量$2 的值会移入$1,而变量$1 的值则会被删除。也可以一次性移动多个位置。注意:变量$0 的值,也就是脚本名,不会改变。

2023-10-23 22:08:52 510

原创 shell_41.Linux获取所有的数据

跟字面上的意思一样,shift 命令会根据命令行参数的相对位置进行移动。因此,变量$3 的值会移入$2,变量$2 的值会移入$1,而变量$1 的值则会被删除。$*变量会将所有的命令行参数视为一个单词。基本上,$*变量会将这些参数视为一个整体,而不是一系列个体。这时无须先用$#变量判断有多少个命令行参数,然后再进行遍历,用两个特殊变量即可解决这个问题。$@变量会将所有的命令行参数视为同一字符串中的多个独立的单词,以便你能遍历并处理全部参数。注意,从表面上看,两个变量产生的输出相同,均显示了所有命令行参数。

2023-10-22 10:28:41 188

原创 shell_40.Linux特殊参数变量

(1)特殊变量$#含有脚本运行时携带的命令行参数的个数。重要的是要注意,当命令行中没有任何参数时,$#的值即为 0,但${!#}会返回命令行中的脚本名。(4)显然,这种方法不管用。这说明不能在花括号内使用$,必须将$换成!

2023-10-22 10:26:42 210

原创 shell_39.Linux参数测试

在 shell 脚本中使用命令行参数时要当心。当脚本认为位置变量中应该有数据,而实际上根本没有的时候,脚本很可能会产生错误消息。这种编写脚本的方法并不可取。

2023-10-21 10:03:49 299

原创 shell_38.Linux读取脚本名

(3)如果你编写的脚本中只打算使用脚本名,那就得做点儿额外工作,剥离脚本的运行路径。好在有个方便的小命令可以帮到我们。

2023-10-21 10:02:22 833

原创 shell_37.Linux参数传递和读取

(1)bash shell 会将所有的命令行参数都指派给称作位置参数(positional parameter)的特殊变量。位置变量的名称都是标准数字:$0 对应脚本名,$1 对应第一个命令行参数,$2 对应第二个命令行参数,以此类推,直到$9。(6)如果脚本需要的命令行参数不止 9 个,则仍可以继续加入更多的参数,但是需要稍微修改一下位置变量名。(5)参数之间是以空格分隔的,所以 shell 会将字符串包含的空格视为两个参数的分隔符。(2)如果需要输入更多的命令行参数,则参数之间必须用空格分开。

2023-10-20 08:07:42 218

原创 shell_36.Linux处理循环的输出

shell 会将 for 命令的结果重定向至文件 output.txt,而不再显示在屏幕上。1.在 shell 脚本中,可以对循环的输出使用管道或进行重定向。实战2: 创建多个用户账户。实战1:查找可执行文件。

2023-10-20 08:03:03 315

原创 shell_35.Linux循环控制continue 命令

(2)也可以在 while 循环和 until 循环中使用 continue 命令,但要特别小心。记住,当 shell执行 continue 命令时,它会跳过剩余的命令。continue 命令可以提前中止某次循环,但不会结束整个循环。你可以在循环内部设置 shell不执行命令的条件。其中 n 定义了要继续的循环层级。continue 命令。

2023-10-19 08:43:46 239

原创 shell_34.Linux循环控制break 命令

break 命令是退出循环的一种简单方法。你可以用 break 命令退出任意类型的循环,包括while 循环和 until 循环。其中 n 指定了要跳出的循环层级。在默认情况下,n 为 1,表明跳出的是当前循环。有时你位于内层循环,但需要结束外层循环。1.break 命令。

2023-10-19 08:41:35 207

原创 shell_33.Linux循环处理文件数据

典型的例子是处理/etc/passwd 文件。这要求你逐行遍历该文件,将 IFS 变量的值改成冒号,这要求综合运用已经讲过的两种技术。(2)修改 IFS 环境变量。以便分隔开每行中的各个字段。(1)使用嵌套循环。

2023-10-18 09:07:16 100

原创 shell_32.Linux嵌套循环

【代码】shell_32.Linux嵌套循环。

2023-10-18 09:04:40 278

原创 shell_31.Linux使用until命令

只要测试命令的退出状态码不为 0,bash shell 就会执行循环中列出的命令。一旦测试命令返回了退出状态码 0,循环就结束了。与 while 命令工作的方式完全相反,until 命令要求指定一个返回非 0 退出状态码的测试命令。shell 会执行指定的多个测试命令,仅当最后一个命令成立时才停止。

2023-10-17 07:53:12 105

原创 shell_30.Linux使用while命令

while 命令在某种程度上糅合了 if-then 语句和 for 循环。while 命令允许定义一个要测试的命令,只要该命令返回的退出状态码为 0,就循环执行一组命令。它会在每次迭代开始时测试 test 命令,如果 test 命令返回非 0 退出状态码,while 命令就会停止执行循环。while 命令允许在 while 语句行定义多个测试命令。只有最后一个测试命令的退出状态码会被用于决定是否结束循环。(1)while 的基本格式。(3)使用多个测试命令。

2023-10-17 07:51:22 116

原创 shell_29.Linux之C语言风格的 for 命令

这个例子在 bash shell 程序中使用了仿 C 语言的 for 命令。注意,有些地方与 bash shell 标准的 for 命令并不一致。(3)迭代过程的算式不使用 expr 命令格式。(2)迭代条件中的变量不以美元符号开头。这种 for 命令看起来如下所示。C语言风格的 for 命令。C 语言中的 for 命令。(1)变量赋值可以有空格。

2023-10-16 07:47:12 77

原创 shell_28.Linux使用for命令

在这些命令中,$var 变量包含着此次迭代对应的列表中的当前值。每次遍历值列表时,for 命令会将列表中的下一个值赋给$test 变量。在处理代码量较大的脚本时,可能在一个地方需要修改 IFS 的值,然后再将其恢复原状,而脚本的其他地方则继续沿用 IFS 的默认值。在最后一次迭代结束后,$test 变量的值在 shell 脚本的剩余部分依然有效。(9)在 test 命令中,bash shell 会将额外的单词视为参数,引发错误。一种安全的做法是在修改 IFS 之前保存原来的 IFS 值,之后再恢复它。

2023-10-16 07:43:44 81

原创 shell_27.Linux结构化命令实验案例

该脚本会检查基于 Red Hat 的标准软件包管理器(rpm、dnf 和 flatpak)。软件包管理器使用 which 命令,并在 if 条件语句中使用单括号。

2023-10-15 08:30:40 54

原创 shell_26.Linux使用case命令

2.case 命令会将指定变量与不同模式进行比较。如果变量与模式匹配,那么 shell 就会执行为该模式指定的命令。1.有了 case 命令,就无须再写大量的 elif 语句来检查同一个变量的值了。你可以通过竖线运算符在一行中分隔出多个模式。星号会捕获所有与已知模式不匹配的值。

2023-10-15 08:28:47 46

原创 shell_25.Linux复合条件测试

expression 可以使用 test 命令中的标准字符串比较。除此之外,它还提供了 test 命令所不具备的另一个特性——模式匹配。如果任意条件为真,那么 then 部分的命令就会执行。要执行 then 部分的命令,两个条件都必须满足。如果命令成功结束,则退出状态码会被设为 0,then 部分的命令就会被执行。双方括号命令提供了针对字符串比较的高级特性。如果命令的退出状态码不为 0,则不执行 then 部分的命令。a.在子 shell 中执行命令的单括号。b.用于数学表达式的双括号。

2023-10-14 09:28:25 83

原创 shell_24.Linux文件比较

w 测试可以检查是否对文件拥有可写权限。脚本 can-I-write-to-it.sh 只是脚本 can-I-read-it.sh的修改版。这一章代码是比较多的,希望大家能够认真去看代码,然后根据代码了解文件比较,我总觉得如果干讲不结合实际代码的话,理解的终究不会很透彻。-d 测试会检查指定的目录是否存在于系统中。应该用-s 测试检查文件是否为空,尤其是当你不想删除非空文件时。-x 测试可以方便地判断文件是否有执行权限。1.test 命令的文件比较功能。8.检查文件是否可以执行。3.检查对象是否存在。

2023-10-14 09:23:32 101

原创 shell_23.Linux使用test 命令

如果 test 命令中列出的条件成立,那么test 命令就会退出并返回退出状态码 0。注意 字符串 soccer 小于 zorbfootball,因为在比较的时候使用的是每个字符的 Unicode编码值。如果条件不成立,那么 test 命令就会退出并返回非 0 的退出状态码,这使得 if-then 语句不会再被执行。这样 if-then 语句的工作方式就和其他编程语言中的if-then 语句差不多了。由于重定向顺利完成了,测试条件返回了退出状态码 0,if 语句便认为条件成立。但 sort 命令正好相反。

2023-10-13 07:42:13 167

原创 shell_22. Linux使用if-then 语句

如果该命令的退出状态码是其他值,则 then 部分的命令不会被执行,bash shell 会接着处理脚本中的下一条命令。elif 语句行提供了另一个要测试的命令,这类似于原始的 if 语句行。当 if 语句中的命令返回退出状态码 0 时,then 部分中的命令会被执行,这跟普通的 if-then语句一样。当 if 语句中的命令返回非 0 退出状态码时,bash shell 会执行 else 部分中的命令。如果 if 语句行命令的退出状态值为 0,那么代码块中所有的命令都会被执行;

2023-10-13 07:33:37 206

原创 shell练习1

将编写一个 shell 脚本来计算两个日期之间相隔的天数,允许用户以date 命令能识别的任何格式来指定日期。

2023-10-12 07:50:03 31

原创 shell_21.Linux退出脚本

按照惯例,对于成功结束的命令,其退出状态码是 0。使用这个功能时要小心,因为退出状态码最大只能是 255。Linux 退出状态码。

2023-10-12 07:46:55 344

原创 shell_20.Linux执行数学运算

如果打算尝试现实世界中的数学运算,那么这是一个巨大的限制。bash 计算器实际上是一种编程语言,允许在命令行中输入浮点数表达式,然后解释并计算该表达式,最后返回结果。(4)使用内联输入重定向,它允许直接在命令行中重定向数据。在 bash shell 脚本中执行数学运算有一个很大的局限。(5)可以将 bash 计算器涉及的各个部分放入脚本文件的不同行中。在 shell 脚本中使用 expr 命令也同样麻烦。(3)注释(以#或 C 语言中的/* */开始的行)(2)变量(简单变量和数组)

2023-10-12 07:43:47 40

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除