shell编程
shell基础、变量、if结构、for循环、while循环、case结构、字符串处理、shell数组、交互式脚本、sed基础应用到高级应用、awk基础应用到高级应用
解甲归田1
种一棵树最好的时间是十年前,其次是现在。
展开
-
shell高级技巧-统计当前系统中不同运行状态的进程数量
在Linux系统中,进程的运行状态主要分为四种:运行时、睡眠、停止和僵尸。下面的脚本将统计当前系统中,各种运行状态的进程数量。 [root@xieqichao ~]# cat test28.sh #!/bin/sh #1. 初始化计数器变量,分别对应于运行时、睡眠、停止和僵尸。 running=0 sleeping=0 s...原创 2020-03-23 00:22:14 · 510 阅读 · 0 评论 -
shell高级技巧-监控指定目录下磁盘使用空间过大的用户
在将Linux用作文件服务器时,所有的注册用户都可以在自己的主目录下存放各种类型和大小的文件。有的时候,有些用户的占用空间可能会明显超过其他人,这时就需要管理员可以及时发现这一异常使用状况,并根据实际情况作出应对处理。 [root@xieqichao ~]# cat > test20.sh #!/bin/sh #1. 该脚本仅用于演示一种处理技巧,其中很多阈值都是可以...原创 2020-03-23 00:14:38 · 365 阅读 · 0 评论 -
shell高级技巧-改变进程优先级的命令(nice和renice)
该Shell命令最常用的使用方式为:nice [-n <优先等级>][执行指令],其中优先等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。```··· #后台执行sleep 100秒,同时在启动时将其nice值置为19 [root@xieqichao ~]# nice -n 19 sleep 100 & [1] 46...原创 2020-03-23 00:03:34 · 2408 阅读 · 0 评论 -
shell高级技巧-8个常用的shell实例详解
1. 输出当前系统中占用内存最多的5条命令:#1) 通过ps命令列出当前主机正在运行的所有进程。#2) 按照第五个字段基于数值的形式进行正常排序(由小到大)。#3) 仅显示最后5条输出。 [root@xieqichao ~]# ps aux | sort -k 5n | tail -5 stephen 1861 0.2 2.0 96972 21596 ? S ...原创 2020-03-22 23:58:36 · 813 阅读 · 0 评论 -
shell高级技巧-变量替换运算符
bash中提供了一组可以同时检验和修改变量的特定修改符。这些修改符提供了一个快捷的方法来检验变量是不是被设置过,并把输出结果输出到一个变量中,见下表:修改符描述用途${variable:-word}如variable被设置且非空,则返回该值,否则返回word,变量值不变。如变量未定义,返回默认值。${variable-word}如variable未被设置,则返回...原创 2020-03-22 23:51:35 · 199 阅读 · 0 评论 -
shell高级技巧:用set命令设置bash的选项
下面为set主要选项的列表及其表述:选项名开关缩写描述allexport-a打开此开关,所有变量都自动输出给子Shell。noclobber-C防止重定向时文件被覆盖。noglob-d在路径和文件名中,关闭通配符。 #打开该选项 [root@xieqichao ~]# set -o allexport #等同于set -a ...原创 2020-03-22 23:48:55 · 782 阅读 · 0 评论 -
shell高级技巧-重定向
下面的列表为Shell中支持的重新定向操作符。操作符功能<重新定向输入>重新定向输出>>追加输出2>重新定向错误&>重新定向错误和输出>&重新定向错误和输出2>&1重新定向错误到标准输出1>&2重新定向标准输出到错误>|...原创 2020-03-22 23:42:57 · 248 阅读 · 0 评论 -
shell高级技巧-linux黑科技命令xargs
该命令的主要功能是从输入中构建和执行shell命令。在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件...原创 2020-03-22 23:22:18 · 305 阅读 · 0 评论 -
shell高级技巧-文件查找命令find
下面给出find命令的主要应用示例:[root@xieqichao ~]# ls -l #列出当前目录下所包含的测试文件-rw-r–r--. 1 root root 48217 Nov 12 00:57 install.log-rw-r–r--. 1 root root 37 Nov 12 00:56 testfile.dat-rw-r–r--. 1 root root ...原创 2020-03-22 23:20:07 · 704 阅读 · 0 评论 -
大文件拆分命令split
下面的列表中给出了该命令最为常用的几个命令行选项:选项描述-l指定行数,每多少分隔成一个文件,缺省值为1000行。-b指定字节数,支持的单位为:k和m-C与-b参数类似,但切割时尽量维持每行的完整性-d生成文件的后缀为数字,如果不指定该选项,缺省为字母 [root@xieqichao ~]# ls -l -rw-r--r--. 1...原创 2020-03-22 23:09:46 · 345 阅读 · 0 评论 -
删除重复行的命令uniq
uniq有3个最为常用的选项,见如下列表:选项命令描述-c可在每个输出行之前加上该行重复的次数-d仅显示重复的行-u显示为重复的行 [root@xieqichao ~]# cat testfile hello world friend hello world hello直接删除未经排序的文件,将会...原创 2020-03-22 23:08:11 · 537 阅读 · 0 评论 -
行排序命令sort
1. sort命令行选项:选项描述-t-f基于字符排序时忽略大小写-k定义排序的域字段,或者是基于域字段的部分数据进行排序-m将已排序的输入文件,合并为一个排序后的输出数据流-n以整数类型比较字段-o outfile将输出写到指定的文件-r倒置排序的顺序为由大到小,正常排序为由小到大-u只有唯一的记录,丢弃所有具有相...原创 2020-03-22 23:03:13 · 773 阅读 · 0 评论 -
awk内建函数
字符串函数sub(regular expression,substitution string);sub(regular expression,substitution string,target string); [root@xieqichao ~]# awk '{sub("Tom","Tommy"); print}' employees #这里使用Tommy替换了Tom。 Tom...原创 2020-03-22 22:54:36 · 225 阅读 · 0 评论 -
awk内置变量
在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表:符号含义等价形式=a = 5a = 5+=a = a + 5a += 5-=a = a - 5a -= 5*=a = a * 5a *= ...原创 2020-03-22 22:41:17 · 376 阅读 · 0 评论 -
shell技巧-将单列显示转换为多列显示
我们经常会在显示时将单行的输出,格式化为多行的输出,通常情况下,为了完成该操作,我们将加入更多的代码,将输出的结果存入数组或临时文件,之后再重新遍历它们,从而实现单行转多行的目的。在这里我们介绍一个使用xargs命令的技巧,可以用更简单、更高效的方式来完成该功能。 [root@xieqichao ~]# cat > test18.sh #!/bin/sh ...原创 2020-03-22 22:30:07 · 1109 阅读 · 0 评论 -
shell技巧-整数验证
整数的重要特征就是只是包含数字0到9和负号(-)。 [root@xieqichao ~]# cat > test16.sh #!/bin/sh #1. 判断变量number的第一个字符是否为负号(-),如果只是则删除该负号,并将删除后的结果赋值给left_number变量。 #2. "${number#-}"的具体含义,可以参考该系列博客中"L...原创 2020-03-22 22:27:50 · 208 阅读 · 0 评论 -
shell高级技巧-验证输入信息是否合法
这里给出的例子是验证用户输入的信息是否都是数字和字母。需要说明的是,之所以将其收集到该系列中,主要是因为它实现的方式比较巧妙。 [root@xieqichao ~]# cat > test15.sh #!/bin/sh echo -n "Enter your input: " read input #1. 事实上,这里的巧妙之处就是...原创 2020-03-22 22:21:51 · 341 阅读 · 0 评论 -
shell高级技巧-用脚本完成which命令的基本功能
我们经常会在脚本中调用其他的应用程序,为了保证脚本具有更好的健壮性,以及错误提示的准确性,我们可能需要在执行前验证该命令是否存在,或者说是否可以被执行。这首先要确认该命令是否位于PATH变量包含的目录中,再有就是该文件是否为可执行文件。 [root@xieqichao ~]# cat > test14.sh #!/bin/sh #1. 该函数用于判断参数1...原创 2020-03-22 22:19:49 · 1301 阅读 · 0 评论 -
shell高级技巧-格式化输出指定用户的当前运行进程
在这个例子中,我们通过脚本参数的形式,将用户列表传递给该脚本,脚本在读取参数后,以树的形式将用户列表中用户的所属进程打印出来。 [root@xieqichao ~]# cat > test13.sh #!/bin/sh #1. 循环读取脚本参数,构造egrep可以识别的用户列表变量(基于grep的扩展正则表达式)。 #2. userlist变量...原创 2020-03-22 22:18:15 · 365 阅读 · 0 评论 -
shell高级技巧-模拟简单的top命令
这里用脚本实现了一个极为简单的top命令。为了演示方便,我们在脚本中将很多参数都写成硬代码,你可以根据需要更换这些参数,或者用更为灵活的方式替换现有的实现。 [root@xieqichao ~]# cat > test12.sh #!/bin/sh #1. 将ps命令的title赋值给一个变量,这样在每次输出时,直接打印该变量即可。 heade...原创 2020-03-22 22:14:57 · 713 阅读 · 0 评论 -
shell高级技巧-获取进程的运行时长
在进程监控脚本中,我们通常需要根据脚本的参数来确定有哪些性能参数将被收集,当这些性能参数大于最高阈值或小于最低阈值时,监控脚本将根据实际的情况,采取预置的措施,如邮件通知、直接杀死进程等,这里我们给出的例子是收集进程运行时长性能参数。 ps命令的etime值将给出每个进程的运行时长,其格式主要为以下三种: 1. minutes:seconds,如20:30 2....原创 2020-03-22 22:10:50 · 1305 阅读 · 0 评论 -
shell高级技巧-在循环中使用管道的技巧
在Bash Shell中,管道的最后一个命令都是在子Shell中执行的。这意味着在子Shell中赋值的变量对父Shell是无效的。所以当我们将管道输出传送到一个循环结构,填入随后将要使用的变量,那么就会产生很多问题。一旦循环完成,其所依赖的变量就不存在了。 [root@xieqichao ~]# cat > test8_1.sh #!/bin/sh #1....原创 2020-03-22 21:57:35 · 2206 阅读 · 1 评论 -
shell高级技巧-非直接引用变量
在Shell中提供了三种为标准(直接)变量赋值的方式:1. 直接赋值。2. 存储一个命令的输出。3. 存储某类型计算的结果。然而这三种方式都是给已知变量名的变量赋值,如name=Stephen。但是在有些情况下,变量名本身就是动态的,需要依照运行的结果来构造变量名,之后才是为该变量赋值。这种变量被成为动态变量,或非直接变量。 [root@xieqichao ~]# cat >...原创 2020-03-22 21:56:18 · 262 阅读 · 0 评论 -
shell获取当前时间距纪元时间(1970年1月1日)所经过的天数
在获取两个时间之间的差值时,需要考虑很多问题,如闰年、月份中不同的天数等。然而如果我们能够确定两个时间点之间天数的差值,那么再计算时分秒的差值时就非常简单了。在系统提供的C语言函数中,获取的时间值是从1970年1月1日0点到当前时间所流经的秒数,如果我们基于此计算两个时间之间天数的差值,将会大大简化我们的计算公式 /> cat > test6.sh #!/bin...原创 2020-03-22 21:53:39 · 1660 阅读 · 0 评论 -
将Shell命令赋值给指定变量,以保证脚本的移植性
**有的时候当我们在脚本中执行某个命令时,由于操作系统的不同,可能会导致命令所在路径的不同,甚至是命令名称或选项的不同,为了保证脚本具有更好的平台移植性,我们可以将该功能的命令赋值给指定的变量,之后再使用该命令时,直接使用该变量即可。这样在今后增加更多OS时,我们只需为该变量基于新系统赋予不同的值即可,否则我们将不得不修改更多的地方,这样很容易导致因误修改而引发的Bug。** [...原创 2020-03-22 21:52:16 · 258 阅读 · 0 评论 -
shell判断整数变量的奇偶性
为了简化问题和突出重点,这里我们假设脚本的输入参数一定为合法的整数类型,因而在脚本内部将不再进行参数的合法性判断。 [root@xieqichao ~]# cat > test4.sh #!/bin/sh #1. 这里的重点主要是sed命令中正则表达式的写法,它将原有的数字拆分为两个模式(用圆括号拆分),一个前面的所有高位数字,另一个是最后一位低位数字,之后再用替换符...原创 2020-03-22 21:50:25 · 3447 阅读 · 0 评论 -
shell判断参数是否为数字
有些时候我们需要验证脚本的参数或某些变量的值是否为数字,如果不是则需要需要给出提示,并退出脚本。 [root@xieqichao ~]# cat > test3.sh #!/bin/sh #1. $1是脚本的第一个参数,这里作为awk命令的第一个参数传入给awk命令。 #2. 由于没有输入文件作为输入流,因此这里只是在BEGIN块中完成。 #3. 在awk中AR...原创 2020-03-22 21:49:00 · 2778 阅读 · 1 评论 -
shell技巧-为调试信息设置输出级别
我们经常在调试脚本时添加一些必要的调试信息,以便跟踪到程序中的错误。在完成调试后,一般都会选择删除这些额外的调试信息,在过了一段时间之后,如果脚本需要添加新的功能,那么我们将不得不重新进行调试,这样又有可能需要添加这些调试信息,在调试成功之后,这些信息可能会被再次删除。如果我们能够为我们的调试信息添加调试级别,使其只在必要的时候输出,我想这将会是一件非常惬意的事情。 [root@xieqic...原创 2020-03-22 21:45:11 · 411 阅读 · 0 评论 -
shell技巧-将输入信息转换为大写字符后再进行条件判断
我们在读取用户的正常输入后,很有可能会将这些输入信息用于条件判断,那么在进行比较时,我们将不得不考虑这些信息的大小写匹配问题。 [root@xieqichao ~]# cat > test1.sh #!/bin/sh echo -n "Please let me know your name. " read name #将变量nam...原创 2020-03-22 21:39:53 · 397 阅读 · 0 评论 -
awk面试经典案例
awk是Linux系统下一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件、数据排序、计算以及生成报表等等,应用非常广泛。基本的命令语法:awk option ‘pattern {action}’ file1、分析访问日志(Nginx为例)日志格式:'$remote_addr - $remote_user [$time_local] "$request" $status $bod...原创 2020-03-20 19:27:58 · 1977 阅读 · 2 评论 -
linux shell中"(())"双括号运算符的使用
学习shell中的运算符及逻辑运算,各种结构,各种注意事项已经学疯了,还好shell中有双括号的存在,安利一下。那些该死的运算符,[[]]/[]/test 逻辑运算、let、expr 通通可以抛弃了语法结构((表达式1,表达式2,…))特点:1.我们可以像c语言那样去写自己的结构2.在双括号里面变量可以不加 $符号3.可以像其他逻辑运算符号一进行逻辑运算 四则运算4.支持for...原创 2020-03-20 17:38:01 · 701 阅读 · 0 评论 -
《云计算》-shell脚本编程-awk全解-web流量统计脚本(在最后面)
TopNSD SHELL DAY06案例1:使用awk提取文本案例2:awk处理条件案例3:awk综合脚本应用案例4:awk流程控制案例5:awk扩展应用1 案例1:使用awk提取文本1.1 问题本案例要求使用awk工具完成下列过滤任务:练习awk工具的基本用法提取本机的网卡流量、根分区剩余容量、获取SSH远程失败的IP地址格式化输出/etc/passwd文件中的用户名、...原创 2020-03-06 20:01:41 · 289 阅读 · 0 评论 -
《云计算》-shell脚本编程-进度条显示脚本
进度显示脚本5.1 问题本案例要求编写脚本,实现带进程显示的复制脚本,具体要求如下:默认Linux的cp命令不具有进度显示我们需要自己编写脚本实现进度显示可以使用进度条的方式,或者显示百分比的方式5.2 步骤实现此案例需要按照如下步骤进行。步骤一:编写参考脚本1)脚本内容如下:[root@svr5 ~]# vim test.sh#!/bin/bashjindu(){wh...原创 2020-03-06 19:59:35 · 301 阅读 · 0 评论 -
《云计算》-shell脚本编程-监控及安全监测脚本
编写监控脚本3.1 问题本案例要求编写脚本,实现计算机各个性能数据监控的功能,具体监控项目要求如下:CPU负载网卡流量内存剩余容量磁盘剩余容量计算机账户数量当前登录账户数量计算机当前开启的进程数量本机已安装的软件包数量3.2 步骤实现此案例需要按照如下步骤进行。步骤一:准备工作1)查看性能数据的命令[root@svr5 ~]# uptime ...原创 2020-03-06 19:58:38 · 341 阅读 · 0 评论 -
《云计算》-shell脚本编程-nginx启动脚本
启动脚本2.1 问题本案例要求编写Ngin启动脚本,要求如下:脚本支持start、stop、restart、status脚本支持报错提示脚本具有判断是否已经开启或关闭的功能2.2 步骤实现此案例需要按照如下步骤进行。步骤一:编写脚本脚本通过位置变量$1读取用户的操作指令,判断是start、stop、restart还是status。1)参考脚本内容如下:[root@svr5 ...原创 2020-03-06 19:57:27 · 147 阅读 · 0 评论 -
《云计算》-shell脚本编程-一键部署软件脚本
一键部署软件脚本1.1 问题本案例要求编写脚本实现一键部署Nginx软件(Web服务器):一键源码安装Nginx软件脚本自动安装相关软件的依赖包脚本自动判断yum是否可用1.2 步骤实现此案例需要按照如下步骤进行。步骤一:准备工作1)判断yum源是否可用通过yum repolist查看软件包数量是否大于0:[root@svr5 ~]# yum repolist [root...原创 2020-03-06 19:56:29 · 427 阅读 · 0 评论 -
《云计算》-shell脚本编程-sed多行文本处理-附带脚本应用,建议收藏学习
案例1:sed基本用法案例2:使用sed修改系统配置案例3:sed多行文本处理案例4:sed综合脚本应用1 案例1:sed基本用法1.1 问题本案例要求熟悉sed命令的p、d、s等常见操作,并结合正则表达式,完成以下任务:删除文件中每行的第二个、最后一个字符将文件中每行的第一个、第二个字符互换删除文件中所有的数字为文件中每个大写字母添加括号1.2 方案sed文本处理工具...原创 2020-03-06 19:55:05 · 282 阅读 · 0 评论 -
《云计算》-shell脚本编程-shell中的正则表达式
使用正则表达式4.1 问题本案例要求熟悉正则表达式的编写,完成以下任务:利用egrep工具练习正则表达式的基本用法提取出httpd.conf文件的有效配置行编写正则表达式,分别匹配MAC地址、E-Mail邮箱地址4.2 方案表-1 基本正则列表表-1 扩展正则列表4.3 步骤实现此案例需要按照如下步骤进行。步骤一:正则表达式匹配练习1)典型的应用场合:grep、egr...原创 2020-03-06 19:53:18 · 254 阅读 · 0 评论 -
《云计算》-shell脚本编程-expect预期交互
expect预期交互3.1 问题本案例要求编写一个expect脚本,实现SSH登录的自动交互:提前准备好目标主机,IP地址为192.168.4.5用户名为mike、密码为1234567执行脚本后自动登入,并且在目标主机建立测试文件 /tmp/mike.txt3.2 方案expect可以为交互式过程(比如FTP、SSH等登录过程)自动输送预先准备的文本或指令,而无需人工干预。触发的依...原创 2020-03-06 19:48:58 · 189 阅读 · 0 评论 -
《云计算》-shell脚本编程-2字符串初值处理
字符串初值的处理2.1 问题本案例要求编写一个脚本sumx.sh,求从1-x的和,相关要求如下:从键盘读入x值当用户未输入任何值时,默认按1计算2.2 方案通过${var:-word}判断变量是否存在,决定是否给变量赋初始值。2.3 步骤实现此案例需要按照如下步骤进行。步骤一:认识字符串初值的最常见处理方法1)只取值,${var:-word}若变量var已存在且非Null,...原创 2020-03-06 19:48:06 · 143 阅读 · 0 评论