shell脚本
文章平均质量分 68
shell scripting
itachi-uchiha
哇~~哈哈
https://liuyuanlin.blog.csdn.net/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Bash Shell脚本札记(持续更新:2021-9-10)
for i in $(cat id-file);do echo $i| awk '{if (substr($1,17,1)%2==0) {print 2} else {print 1}}';done原创 2020-10-29 21:33:06 · 500 阅读 · 0 评论
-
AWK 各版本空白字符支持情况
本文对比了不同awk实现(gawk、mawk、nawk、busybox awk)对空白字符匹配方式的兼容性差异。关键点包括:1)[\t]在所有实现中兼容性最好;2)[[:space:]]在POSIX标准中定义,但mawk 1.3.3及更早版本存在bug;3)\s和\S仅在gawk 4.0+和mawk 1.3.4+中支持。建议优先使用[\t]确保最大兼容性,或根据具体环境选择[[:space:]]和\s。文章还提供了查看系统awk版本的方法,帮助用户判断适用的匹配方式。原创 2026-03-09 18:51:00 · 83 阅读 · 0 评论 -
Shell 命令查找顺序与调用方式详解
摘要:Shell命令执行遵循固定查找顺序:别名→关键字→函数→内置命令→哈希表→PATH路径。关键技巧包括:使用反斜杠\跳过别名,command命令跳过别名和函数,builtin强制使用内置命令,绝对路径完全绕过拦截。type命令可检测命令类型,编写脚本时应使用command或绝对路径确保安全性。最佳实践包括在脚本开头清理环境、使用严格模式、检测命令类型等。记忆口诀:"别名函数内置命令,哈希路径依次寻;反斜跳过别名快,command绕过函数稳"。原创 2026-02-24 10:11:35 · 670 阅读 · 0 评论 -
深入理解Shell中的[]和test:看似相同,实则大不同
本文深入探讨Shell脚本中条件测试命令[和test的异同。两者功能相似但本质不同:[是命令需要]作为参数,test是独立命令。分析显示它们都有内置和外部版本,sudo环境下test兼容性更好。文章对比了语法差异、性能表现及常见错误,推荐现代脚本使用更安全的[[ ]]结构。同时提供历史背景和最佳实践建议,强调理解这些细节对编写健壮Shell脚本的重要性。原创 2026-01-13 16:27:51 · 980 阅读 · 0 评论 -
AWK四大实现:oawk、nawk、mawk、gawk全解析
摘要:本文介绍了AWK语言的几种主要实现,包括oawk(原始版本)、nawk(增强版)、gawk(GNU功能扩展版)和mawk(高性能精简版)。文章梳理了AWK从1977年诞生到功能分化的演进历程,指出gawk因功能全面已成为Linux主流实现,而mawk则在处理大数据时更具性能优势。作者建议编写通用脚本时优先考虑gawk以确保兼容性,在性能敏感场景可选用mawk。文章还提醒开发者注意不同实现的特性差异,避免在跨平台脚本中使用特定实现的扩展功能。(149字)原创 2025-12-24 11:50:55 · 936 阅读 · 0 评论 -
Shell脚本中local赋值的陷阱
本文探讨了Shell脚本中获取系统版本信息的常见误区。通过示例展示了使用rpm -q命令时可能遇到的问题:1) 错误信息可能出现在标准输出而非标准错误;2) 中文字符编码差异导致过滤失败。文章指出最佳实践应通过状态码而非输出来判断软件包是否安装。重点揭示了local变量声明的陷阱:local var=$(command)实际包含声明和赋值两个操作,且$?仅反映local命令本身的状态而非赋值命令的状态。通过测试案例验证了这一点,强调理解Shell命令执行顺序的重要性。原创 2025-12-19 16:38:05 · 503 阅读 · 0 评论 -
论find -group和-gid的区别
摘要:在Linux账号权限检查时,发现find命令误报问题。经排查发现,问题出在-grouproot参数上,该参数依赖/etc/group文件解析组名。实际环境中root组的GID被错误配置为100而非0,导致命令失效。最终改用-gid0参数直接匹配GID,完美解决问题。这表明在特殊环境下,直接使用GID比依赖组名解析更可靠。原创 2025-11-11 18:20:26 · 635 阅读 · 0 评论 -
Shell高手必备:30字搞定XML注释过滤
摘要:文章介绍了两种处理XML/配置文件注释内容的方法。第一种使用awk的RS记录分隔符特性,将文本按注释标记分割,通过NR取模过滤注释块。第二种采用状态机方式,用变量标记注释状态,逐行判断处理。两种方法都能有效去除注释内容,适用于tomcat-users.xml等配置文件解析。文章最后留下思考题,让读者尝试用类似方法处理logrotate配置文件中的全局/局部配置区分问题。原创 2025-11-06 21:40:58 · 999 阅读 · 0 评论 -
head和tail命令使用
文章摘要:本文探讨如何用head和tail命令删除文件首行。常规用法只能查看开头/结尾内容,而高级技巧如tail -n+N(如tail -n+2)可直接从第N行输出至末尾,实现首行删除。对比sed和awk方案,tail -n+2在大文件处理中性能最优,因其直接定位行号无需流式处理。其他方案包括组合head|tail或使用sed -n 'N,Mp'截取指定行范围。 (字数:149)原创 2025-11-05 19:54:41 · 328 阅读 · 0 评论 -
xargs 命令在shell编程中的应用
摘要: 文章探讨了使用xargs命令处理Linux版本号时遇到的正则匹配问题,发现版本号为单数字时出错,并通过xargs去除空格解决。文中详细解析了xargs的功能与用法:它作为标准输入与命令行参数间的桥梁,支持参数转换、并行处理(-P)、安全删除(-0与find -print0搭配)等场景,并强调使用-p或-t测试破坏性操作。核心总结:xargs通过灵活选项(如-n、-I)高效处理参数,是Shell脚本中参数传递与批量操作的关键工具。 (字数:150)原创 2025-11-05 11:23:08 · 973 阅读 · 0 评论 -
关于Linux“\”多行拼接知多少
文章摘要:作者原本只知道shell脚本中行尾的""用于换行显示,后发现其实际作用是转义换行符,使多行代码被解析为一行。在解决公司Probe工具因发送两次回车导致""换行失效的问题时,选择了取消脚本中""换行的方案。文章解释了""作为转义字符的原理,并邀请读者分享Linux/shell使用中的经验技巧。全文从实际问题出发,深入浅出地讲解了转义字符的机制。原创 2025-10-27 21:28:02 · 427 阅读 · 0 评论 -
bash的“进程替换 + 重定向”和“传统管道”
进程替换(如 >(command))和传统管道的主要区别在于:1. 执行方式不同 - 进程替换异步执行,管道同步执行;2. 退出状态码不同 - 进程替换只反映前命令状态,管道反映整个管道状态;3. 变量作用域相同 - 都在子shell中运行不影响父shell。进程替换的优势在于无需临时文件、更简洁安全且性能更好,但它是Bash扩展功能而非POSIX标准。>>在>>(command)中第一个>是重定向,第二个是进程替换语法部分,表示将输出追加到进程替换创建的临时文件中。原创 2025-10-24 21:21:45 · 502 阅读 · 0 评论 -
普通用户执行ps兼容sudo和非sudo场景
文章摘要:针对Linux检查脚本中ps命令是否需要sudo权限的问题,作者提出了一种智能判断方案。通过一行命令(ps -ef | grep -qE '^[[:space:]]*root' && ps -ef || sudo ps -ef)自动检测系统权限情况:若能查看root进程则直接执行ps,否则自动添加sudo。该方案既兼容了需要sudo权限的加固系统,又满足普通系统的使用需求,避免了为不同环境维护多套脚本的困扰,成功解决了现场执行权限的两难问题。原创 2025-10-13 20:08:55 · 359 阅读 · 0 评论 -
关于shell中for循环读取字符串数组
文章摘要:本文讨论了Shell中遍历数组的几种方法及其注意事项。重点分析了IFS环境变量对字符串分割的影响(默认包含空格、制表符、换行符),比较了$get_ports、${get_ports[@]}和${get_ports[*]}三种遍历方式的区别。特别指出当变量定义为数组时,推荐使用for p in "${get_ports[@]}"方式以保证元素完整性。文章同时区分了字符串变量和数组变量的不同处理方式,最后通过端口号示例展示了正确用法。全文虽然涉及较多技术细节,但始终围绕数组遍历的核原创 2025-10-01 11:02:49 · 456 阅读 · 0 评论 -
Solaris上的命令行兼容性问题
Solaris系统提供多种awk实现:/usr/bin/oawk(原始AWK)、/usr/bin/awk(默认链接)、/usr/bin/nawk(增强版)和/usr/xpg4/bin/awk(POSIX兼容)。主要差异体现在正则表达式、转义序列、大文件支持等特性上。其中xpg4版本完全符合POSIX标准,支持UTF-8和大文件处理,是开发新脚本的首选。建议:新项目使用nawk或xpg4/awk,跨平台脚本优先选择xpg4/awk,大文件处理必须用xpg4/awk,遗留脚本明确指定oawk。可通过修改软链接调原创 2025-07-24 15:14:57 · 401 阅读 · 0 评论 -
shell中定义函数的最佳方式
在Shell脚本中,推荐使用function_name(){}方式定义函数,因其具有更好的POSIX兼容性、安全性及可移植性。这种标准语法在所有Shell环境中都能运行,不会意外覆盖系统命令,且必须显式声明局部变量。相比之下,function name{}语法仅适用于Bash/Ksh,缺乏跨平台支持,可能产生兼容性问题。最佳实践建议:坚持使用POSIX标准语法,配合local声明变量,特别在安全审计等需要跨平台运行的脚本中。仅在维护历史代码或特定Bash版本需求时,才考虑使用非标准语法。原创 2025-06-27 15:44:17 · 920 阅读 · 0 评论 -
Linux拼接/etc/passwd和/etc/shadow下的用户列
本文介绍了在Linux系统中合并处理/etc/passwd和/etc/shadow两个重要用户配置文件的方法。通过使用awk脚本,将两个文件的用户信息按用户名关联合并到同一行,便于后续查询处理。文中提供了两种实现方案:一是将合并结果输出到临时文件,二是直接过滤输出未被锁定且具有登录shell的普通用户。这种方法解决了传统分别查看两个文件的不便,实现了类似数据库表连接的功能,提高了用户管理的效率。原创 2025-06-13 11:22:26 · 329 阅读 · 0 评论 -
awk处理xml文件&&封装集合变量和调用
摘要:分析Hadoop配置本地存储路径的两种方式(单行/多行XML格式),说明file://前缀的可选性。重点讲解使用awk处理结构化配置数据的技巧:1) 通过模式匹配定位配置项 2) 处理单行/多行配置的逻辑 3) 数据清洗(去除标记/前缀)4) 路径分割处理。特别指出将分割结果转移到新数组的原因:保持数据顺序一致性,避免awk关联数组的无序性问题。最后展示了两种awk实现方案:直接输出和数组封装处理。原创 2025-06-06 19:31:49 · 611 阅读 · 0 评论 -
awk中定义和调用function
在编写awk脚本时,若遇到重复代码段,可以通过定义函数来简化代码并提高可复用性。例如,定义一个sort_list函数对数组进行排序,并在BEGIN块中调用该函数。通过这种方式,不仅减少了代码行数,还增强了代码的可读性和维护性。具体实现如下:定义sort_list函数,使用asort对数组排序并返回元素数量;在BEGIN块中初始化数组,调用sort_list函数,并输出排序后的数组。这种方法有效避免了代码重复,提升了脚本的简洁性和效率。原创 2025-05-13 13:46:13 · 311 阅读 · 0 评论 -
自定义Linux操作日志配置
lastcomm命令用来显示以前执行过的命令的信息。表面上,上述说法并无问题,其实质是有-p 参数决定的,默认输出级别为"user.notice",由于rsyslog.conf中默认并没有配置此级别的日志输出,故,只能输出到*.开头的日志文件中;logger输出日志发送给哪个文件是通过/etc/rsyslog.conf中*.开头的行决定的,默认情况下是任何日志日志发送给/var/log/messages里,也可以指定发送给其他文件里。dump-acct #输出acct或pacct文件内容。原创 2024-07-26 14:58:16 · 1000 阅读 · 0 评论 -
Bash Shell案例列表(持续更新:2023-03-07)
判断文件权限是否低于644#定义多变量if [ "$CONFIG_FILE" != "" ];then user_mod=$(sudo stat -c %a $CONFIG_FILE|awk '{print substr($1,1,1)}') group_mod=$(sudo stat -c %a $CONFIG_FILE|awk '{print substr($1,2,1)}') other_mod=$(sudo stat -c %a $CONFIG_FILE|awk '{print原创 2020-12-09 19:20:26 · 579 阅读 · 1 评论 -
linux sed命令使用说明
sed是一种流编辑器,用于对输入流(文件或来自管道的输入)执行基本的文本转换。虽然在某些方面类似于允许脚本编辑(如ed)的编辑器,sed的工作方式是只对输入进行一次传递,因此效率更高。sed在管道中过滤文本的能力是它与其他类型编辑器的特别之处。原创 2022-09-09 15:08:09 · 1380 阅读 · 0 评论 -
csh/tcsh脚本札记(持续更新:2021-8-24)
我这里总结了一些csh/tcsh编写脚本的注意点(相对于bash);但是,csh/tcsh建议大家尽量避免使用:如果无可避免要使用csh,处理逻辑能尽可能使用awk等。>> 能用sh(Bourne shell)不用csh/tcsh>> 能用bash不用sh。1、csh/tcsh没有function的概念,不能像bash一样定义function:function f_1 { }function f_1() {}2、定义变量非数字变量,需要使用set关键字进...原创 2021-08-24 11:09:55 · 6184 阅读 · 1 评论 -
局域网内部主机(无法接入外网)配置互联网镜像源
局域网某些安全域内的主机无法访问互联网,我们可以搭建一台局域网私有镜像库,但是如此即占用磁盘,还需要大量精力去维护。不如搭建中转服务器(192.168.15.110),这台中转服务器可以使用nginx、rinetd、firewalld等实现。只需要对该中转服务器放开访问互联网策略即可。我这里使用rinetd做的端口转发,并且做了源地址访问限制。# cat /etc/rinetd.confallow 192.168.16.*allow 192.168.17.*allow 192.168.18.*..原创 2021-01-13 17:10:40 · 1272 阅读 · 1 评论 -
Linux遍历目录查找大文件
本脚对指定目录进行遍历:1、降序展示指定目录下文件、目录大小2、对大于5GB的子目录进行递归查询,将子目录下文件和目录的资产占用情况一同打印。# ./list_store.sh /Size Path310G /u01/310G /u01/app/30G /opt/……# ./list_store.sh /u01/app/oracle/oradata/Size Path286G /u01/app/oracle/oradata/orcl/3...原创 2020-12-08 16:02:47 · 680 阅读 · 0 评论 -
Linux 安全删除脚本(避免删除重要文件)
#!/bin/bashdefine_safe_files="/etc/security/rm_file_ignore"args=$(echo "$*" | tr -s '/' | tr -d "\042\047")safe_files=$(find / -maxdepth 1 |tr '\n' '|')$(cat $define_safe_files | tr -s '/' | tr -d "\042\047"|tr '\n' '|')echo "$args"|grep -wqP "(?:^$.原创 2020-11-02 15:59:33 · 915 阅读 · 0 评论 -
禁用自动获取IPv4地址
据说,关闭NetworkManager服务可以禁用接口自动获取IP地址。未验证!但是,既然NetworkManager服务和接口自动获取IP地址有关系,那么使用nmcli命令应该也可以达到相同的效果。通过nmcli conn modify $CC ipv4.method disabled 可以禁用IPv4,自然就不会自动获取ipv4了;也可通过nmcli conn modify $CC ipv4.methodmanual ,改成手动配置IP地址,这里需要同时设置IP地址,否则报错。ipv4.原创 2020-08-14 14:35:27 · 3188 阅读 · 0 评论 -
分享一条shell命令:是否有更简洁的处理方法
一条命令写下来,感觉很酷~~IFS_OLD=$IFS ;IFS=$'\n';for conn in $(nmcli c show |grep Wired|cut -b 1-19);do nmcli c show "$(echo $conn |awk '{gsub(/^\s+|\s+$/, "");print}')"|grep 'ipv4.method';done;IFS=$IFS_OLD还是换行好看一些:IFS_OLD=$IFSIFS=$'\n'for conn in $(nmcl..原创 2020-08-14 14:24:43 · 307 阅读 · 0 评论 -
shell脚本:丢弃报错信息,保留正常输出
我们知道,shell中通过>/dev/null 2>&1 可以丢弃信息,但是标准输出和标准错误输出同时被丢弃了。怎么做可以把错误输出丢弃掉,不在输出打印,而标准输出保留呢?答案是通过赋值和错误信息重定向。将标准输出和错误输出都赋值给一个变量,然后通过if语句判断命令是否执行成功加以过滤:如下脚本list xxxx文件,如果不存在肯定会报错:ls: cannot access xxxx: No such file or directory。我们不想看到这个错,而是默默原创 2020-08-06 13:12:52 · 9892 阅读 · 2 评论 -
shell脚本:获取SR-IOV中PF和VF之间的关系
使用如下脚本可以获取到SR-IOV中,Physical Functions和Virtual Functions之间,清晰的关系。包括接口名称,domain、bus、slot、function的编号信息,接口mac地址信息,以及给VF是否被绑给了vm。#!/bin/bashfunction pf_vf(){ echo "<=============>PF:$1<==============" echo "`lspci|grep $(ls -l /sys/class/n..原创 2020-08-06 13:00:02 · 3405 阅读 · 0 评论
分享