
shell
文章平均质量分 69
lang20150928
stay hungry stay foolish
展开
-
批量格式文件名中的数字
find可以用于查找目录下的文件,awk根据输入内容生成想要的命令,再通过管道符传递给sh执行原创 2023-09-11 22:00:00 · 324 阅读 · 0 评论 -
sed进阶之创建sed实用工具
该地址模式能够匹配只含一个换行符的行,如果找到这样的行,而且是最后一行,删除命令就会删除它,如果不是最后一行,那么N命令会将下一行附加到它后面,然后分支命令会跳到循环起始位置重新开始。删除连续的空行的关键在于创建包含一个非空行和一个空行的地址区间,如果sed编辑器遇到了这个区间,它不会删除行,但对于不属于这个区间的行(两个或更多的空行),则执行删除操作。指定的区间是/./到/^$/,区间的开始地址会匹配任何至少含有一个字符的行,区间的结束地址会匹配一个空行,在这个区间内容的行不会被删除。原创 2023-05-01 16:13:29 · 673 阅读 · 1 评论 -
sed进阶之模式替换
符号代表替换命令中指定模式所匹配的字符串,如果只是想获取字符串的一部分,则需要通过正则表达式的子模式和反向引用。sed编辑器使用圆括号来定义替换模式中的子模式,随后使用特殊的字符组合来引用每个子模式匹配到的文本。反向引用由反斜线和数字组成,数字表明子模式的序号,第一个子模式为\1,第二个子模式为\2,以此类推。&符号可以代表替换命令中的匹配模式,不管模式匹配到了什么样的文本,都可以使用&符号代表这些内容。这样就能处理匹配模式的任何单词了。通过模式替换和测试命令在大数中插入逗号。原创 2023-05-01 16:04:36 · 150 阅读 · 0 评论 -
sed进阶之改变执行流程
如果替换命令成功匹配并完成了替换,测试命令就会跳转到指定的标签,如果替换命令未能匹配指定的模式,测试命令就不会跳转。如果某行匹配分支address(包含First单词),那么sed编辑器就会跳转到带有分支标签jump1的那一行,执行后面的命令,而其他行,则沿用脚本中原有的命令处理。address参数决定了哪些行会触发分支命令,label参数定义了要跳转的位置,如果没有label参数,则跳过触发分支命令的行,继续处理余下的文本行。除了可以跳转到sed脚本下方的标签,也可以跳转到靠前的标签,达到循环的效果。原创 2023-05-01 16:00:40 · 159 阅读 · 0 评论 -
sed进阶之保留空间和排除命令
模式空间(pattern space)是一块活跃的缓冲区,在sed编辑器执行命令时保存着待检查的文本,但它并不是sed编辑器保存文本的唯一空间。sed编辑器可以将命令应用于数据流中的每一行或是由单个地址或地址区间指定的多行。)命令用于排除(negate)命令,也就是让原本会起作用的命令失效。正常情况p命令只会打印匹配规则的行,加了感叹号之后,情况反过来了,除了包含单词Header的那一行,文件中的其他行都被打印出来了。对于sed命令在多行模式中没法匹配最后一行的情况,使用排除命令也可以解决。原创 2023-05-01 15:53:38 · 860 阅读 · 0 评论 -
sed进阶之多行命令
前面使用sed编辑器的基础命令时,所有的命令都是针对单行数据执行操作的。在sed编辑器读取数据流时,它会根据换行符的位置将数据分成行。sed编辑器会根据定义好的脚本命令,一次处理一行数据,然后移到下一行重复这个流程。但是有可能查找的短语出现在两行当中,此时普通的sed编辑器命令是无能为力的。所以,sed编辑器提供了3个可用于处理多行文本的特殊命令。原创 2023-04-30 22:38:09 · 1533 阅读 · 0 评论 -
sed编辑器基础命令
sed是一款流编辑器,可以在读取数据时快速地即时进行处理原创 2023-04-29 20:49:54 · 867 阅读 · 0 评论 -
在函数中使用变量
全局变量是在shell脚本内任何地方都有效的变量,如果在脚本的主体部分定义了一个全局变量,那么就可以在函数内读取它的值。类似的,在函数内定义了一个全局变量,那么也可以在脚本的主体部分读取它的值。无需在函数中使用全局变量,任何在函数内部使用的变量都可以被声明为局部变量。只需要在变量前面加上local关键字即可,local关键字可以保证变量仅仅在该函数中有效,如果函数之外有同名变量,那么shell会保持这两个变量的值互不干扰。即使在函数内部使用了$1和$2变量,但它们和脚本主体中的$1和$2变量不是一回事。原创 2023-04-26 21:27:51 · 658 阅读 · 0 评论 -
脚本函数基础
函数是一个脚本代码块,可以为其命名并在脚本中的任何位置重用它。每当需要在脚本中使用该代码块时,直接写函数名即可。称作调用函数。原创 2023-04-26 20:22:48 · 442 阅读 · 0 评论 -
shell脚本控制
Linux系统允许使用信号来控制shell脚本。bash shell可以接收信号并将其传给由shell进程生成的所有进程。Linux信号可以轻而易举地杀死失控的进程或暂停耗时的进程。可以在脚本中用trap命令捕获信号并执行特定命令。这个功能提供了一种简单的方法来控制脚本运行时用户能够将其中断。在默认情况下,当在终端会话shell中运行脚本时,交互式shell会被挂起,直到脚本运行完毕。你可以在命令后加上一个&符号使脚本或命令以后台模式运行。原创 2023-04-22 22:52:47 · 601 阅读 · 0 评论 -
shell呈现数据
使用exec命令分配用于输出的文件描述符,比如exec 3> test13out将文件描述符3重定向到了另一个文件,当执行echo语句后面有 >&3时重定向到文件描述符3的输出会进入另一个文件,当然也可以通过 exec 3>>test13out进行追加写入。lsof命令可以使用-p指定进程ID,-d指定要显示的文件描述符编号。可以采用和重定向输出文件描述符同样的办法来重定向输入文件描述符,在重定向到文件之前,先将STDIN指向的位置保存到另一个文件描述符,然后在读取文件之后将STDIN恢复到原先的位置。原创 2023-04-22 00:12:45 · 476 阅读 · 0 评论 -
处理用户输入
命令行参数是在命令/脚本名之后出现的各个单词,其中,以连字符或双连字符起始的参数,因其能够改变命令的行为,被称为命令行选项。所以,命令行选项也是一种特殊形式的命令行参数。原创 2023-04-15 22:09:53 · 412 阅读 · 0 评论 -
循环结构化命令小结
shell脚本的目标是减轻系统管理员的工作负担,如果要创建一堆的用户账号,通过while循环可以降低工作的难度。bash shell还允许使用标准的命令重定向和管道来改变循环的输出,你可以将循环的输出重定向至文件或是通过管道将循环的输出传给另一个命令。也可以通过输入重定向读取文件的内容。until命令提供了迭代命令的另一种方式,但它的迭代建立在命令(或条件)产生非0退出状态码的基础上。for命令允许遍历一系列的值,无论是在命令行中提供的,还是包含在变量中的,或是通过文件名通配符匹配获得的文件名和目录名。原创 2023-04-15 11:13:05 · 386 阅读 · 0 评论 -
shell脚本编程系列
系列文章目录系列文章目录。原创 2023-04-15 10:34:30 · 136 阅读 · 0 评论 -
处理shell循环的输出
在shell脚本中,可以对循环的输出使用管道或进行重定向。这可以通过在done命令之后添加一个处理命令来实现。原创 2023-04-14 21:58:54 · 157 阅读 · 0 评论 -
Shell中的while和until循环
只要test命令退出状态码为0,就循环执行一组命令。如果test命令返回非0退出状态码,while命令就会停止执行循环。允许使用多个测试命令,但是只有最后一个测试命令的退出状态码会用于决定是否结束循环。原创 2023-04-14 20:59:05 · 121 阅读 · 0 评论 -
shell结构化命令中for命令
可以使用for命令来自动遍历目录中的文件,但是必须在文件名和路径名中使用通配符,这会强制文件名通配符匹配(file globbing)。单词中包含了单引号会导致一团糟,比如this’ll,此时要么使用转义字符来转义单引号,要么使用双引号来定义含有单引号的值。在最后一次迭代结束后,变量的值在shell脚本的剩余部分依然有效,会一直保留最后一次迭代时的值,当然可以修改。使用命令替换来执行任何能产生输出的命令,然后使用for命令使用该命令的输出。修改IFS的值,需要注意恢复原来的值,保证安全。原创 2023-04-12 20:52:00 · 475 阅读 · 0 评论 -
shell结构化命令if和case
结构化命令允许改变shell脚本的正常执行流程,包括if-then、if-then-else、case等原创 2023-04-12 19:42:46 · 127 阅读 · 0 评论 -
构建基础脚本
使用多个命令;创建脚本文件;echo显示消息;使用变量;重定向输入(追加);管道(1);数学运算(expr、$[]、bc)、退出脚本(exit)原创 2023-04-09 11:49:55 · 95 阅读 · 0 评论