
shell脚本编程
见证大牛成长之路
这个作者很懒,什么都没留下…
展开
-
shell学习五十八天----/proc文件系统
/proc文件系统前言:linux中的/proc文件系统,由一组目录和文件组成,挂载(mount)与/proc目录下./proc文件系统是一种虚拟文件系统,以文件系统目录和文件形式,提供一个指向内核数据结构的接口.这为查看和改变各种系统属性开启了方便之门.此外,还能通过一组以/proc/PID形式命名的目录(PID是进程的ID)查看系统汇总运行各进程的相关信息. 通常,/proc目原创 2015-07-29 21:15:44 · 2311 阅读 · 0 评论 -
shell学习四十六天----文件系统的空间信息df和du命令
文件系统的空间信息df命令 df命令提供单行摘要,一行显示一个加载的问价系统的已使用的和可用的空间.其单位视系统而定,有些使用块,有些则是KB.大部分现代实现都支持-k选项,也就是强制使用KB单位,以及-l(小写字母L)选项,仅显示本地文件系统,排除网络加载的文件系统. df命令详解语法:df [选项] [文件或目录]用途:显示一个或多个文件系统内部的inode原创 2015-07-13 11:51:41 · 1335 阅读 · 0 评论 -
shell学习四十五天----xargs
执行命令:xargs当find产生一个文件列表时,该列表提供给另一个命令有时是很有用的.案例:$touch abc.c erd.c oiy.c$ll./erd.c./abc.c./oiy.c$find -name '*.c'| rmrm: 缺少操作数请尝试执行"rm --help"来获取更多信息。$find -name '*.c'| xargs rm原创 2015-07-13 10:59:29 · 3145 阅读 · 0 评论 -
shell学习第十天----sed查找与替换
在文本文件离进行替换在很多shell脚本的工作都从通过grep或俄国日尾盘去除所需的文本开始.正则表达式查找的最初结果,往往就成了要拿来作进一步处理的”原始数据”.通常,文本替换至少需要做一件事,就是讲一些字以另一些字取代,或者删除匹配行的某个部分. 执行文本替换的正确程序应该是sed----流编辑器.sed的设计就是用来批处理而不是交互的方式编辑文件.当药做好几个变化的时候,不管原创 2015-06-13 13:11:10 · 11685 阅读 · 0 评论 -
shell学习三十五天----波浪号展开与通配符
波浪号展开与通配符shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式.波浪号展开如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量)的值里任何未被引号括起来的冒号之后的第一个字符为波浪号(~)时,shell变回执行波浪号展开.波浪号展开的目的,将用户根目录的符号型表示方式,改为实际的目录路径.可以采用直接或间接的方式指原创 2015-07-04 10:34:00 · 4677 阅读 · 1 评论 -
shell学习十三天----sed案例分析
sed的使用案例使用sed操作/etc/passwd,最好复制一份(cp /etc/passwd /tmp),操作tmp下的passwd(其实不用,因为在一般情况下sed只是修改了输出结果,不会改变文件本身,除非要求这么做). 以行为单位的新增/删除要求:将/etc/passwd的内容列出并且列印行号,同时删除2~5行.做法:cat /etc/passwd | sed ‘原创 2015-06-14 10:39:04 · 1091 阅读 · 0 评论 -
shell学习四十四天----寻找文件
寻找文件快速寻找文件locate将文件系统里的所有文件名压缩成数据库,以迅速找到匹配类shell通配字符的文件名,不必实际查找整个庞大的目录结构,这个数据库,通常是在半夜通过cron,在具有权限的工作中执行updatedb建立.locate对用户来说有其必要性,它可以回答用户:系统管理者究竟将要查找的syx放在何处?locate syx缺乏通配字符模式时,locate汇报稿含有将参原创 2015-07-12 21:02:43 · 880 阅读 · 0 评论 -
shell学习四十三天----临时性文件的建立与使用
临时性文件的建立与使用虽然使用管道可以省去建立临时性文件的需求,不过有时临时性文件还是派得上用场的.linux不同于其他的操作系统的地方就是:他没有那种将不再需要的文件设法删除的做法.反倒是提供了两个特殊目录:/tmp与/var/tmp(旧系统是/usr/tmp),这些文件可入场被存储,当他们未被清理干净时也不会弄乱一般的目录.大部分系统上的/tmp都会在系统开机时清理,不过/var/tmp下原创 2015-07-12 19:12:37 · 1124 阅读 · 0 评论 -
shell学习三十四天----printf详解
printf先来看一个简单的例子:使用命令printf “hello,world\n”,输出:hello,world再使用echo “hello,world\n”,输出为:hello,world\n案例二:使用命令printf "%s\n" hello,world输出结果为:hello,worldprintf命令的完整语法有两个部分:printg format-stri原创 2015-07-03 17:22:27 · 13851 阅读 · 1 评论 -
shell学习----小结
小结read命令会读取行并将数据分割为哥哥字段,供赋值给指明的shell变量.搭配-r选项,可控制数据要如何被读取. I/O重定向允许你改编程序的来与与目的地,或者将多个程序一起执行与subShell或代码块里.除了重定向到文件和从文件从定向之外,管道还可以用于将多个程序连接在一起.嵌入文件则提供了行内输入. 文件描述符的处理是基本操作,特别是文件描述符1与2,会重复的用在日常原创 2015-07-05 19:17:41 · 675 阅读 · 0 评论 -
shell学习三十七天----引用
引用案例,如果我想输出一个星号(*),使用echo如何做?echo *这是肯定不行的,需要将*转移,即:echo \*这样就引出了引用的概念.所为引用,是用来防止shell将某些你想要的东西解释成不同的意义.如果你希望某些可能被shell视为个别参数的东西保持为单个参数,这时你就必须将其引用.引用的三种方式:反斜杠转义字符前置反斜杠(\),用来告知shell该字符即为其原创 2015-07-04 13:44:44 · 813 阅读 · 0 评论 -
shell学习十四天----使用cut选定字段
使用cut选定字段通过名字我们就能差不多猜测出该命令是个干嘛地,是用来剪下文本文件的数据,文本文件可以是字段类型或者是字符类型.后一种数据类型在遇到需要从文件里剪下特定的列时,很方便.注意:一个制表符在此被视为单个字符. 案例: 显示系统上每个用户登录名称和全名cut -d : -f 1,5 /etc/passwdcut的语法:cut -d'分隔字符' -f field原创 2015-06-14 11:03:35 · 1737 阅读 · 0 评论 -
shell学习三十九天----内建命令
内建命令shell识别三种基本命令:内建命令,shell函数以及外部命令:1.内建命令就是有shell本身所执行的命令.有些命令是由于其必要性才内建的,例如cd用来改变目录,read会将来自用户(和文件)的输入数据传给shell外壳.另一种内奸命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时经常会用到它.另外还有I/O命令,例如 echo与printf.2.sh原创 2015-07-05 19:03:09 · 902 阅读 · 0 评论 -
shell学习三十八天----执行顺序和eval
执行顺序和evalshell从标准输入或脚本中读取的每一行称为管道,它包含了一个或多个命令,这些命令被一个或多个管道字符(|)隔开. 事实上嗨哟很多特殊符号可用来分割单个的命令:分号(;),管道(|),&,逻辑AND(&&),逻辑OR(||).对于每一个地区的管道,shell都会将命令分割,为管道设置I/O,并且对每一个命令依次执行下面的操作. 看原创 2015-07-05 15:59:36 · 1929 阅读 · 0 评论 -
shell学习十五天----join连接字段
使用join连接字段join命令将多个文件结合起来,每个人建立的每条记录,都共享一个键值,键值指的是记录中的珠子段,通常会是用户名称,个人形式,员工编号之类的数据.语法:join [options...] file1 file2主要选项-1 field1-2 field2标明要结合的字段. -1 field指的是从file1取出field1,而-2field2指的则为从原创 2015-06-16 09:27:39 · 1654 阅读 · 0 评论 -
shell学习十六天----join练习
join练习两文件如下:t1.txt(tab隔开每一列)学号 姓名001 xiaoming002 zhangsant2.txt科目号 学号 分数0001 001 900002 001 800001 002 900002 002 100合并为:0001 001 xiaoming 900002 001 xiaoming 80000原创 2015-06-16 09:28:42 · 1046 阅读 · 0 评论 -
shell学习四十七天----文件比较cmp,diff,patch
文件比较所谓的文件比较,一般设计四个领域1.检查两个文件是否相同,如果不同,找不哪里不同2.应用两个文件的不同之处,使从其中一个回复另外一个3.使用校验和找出相同一致的文件4.使用数字签名以验证文件 cmp和diff在文字处理上,最常出现的问题应该是比较两个或两个以上的文件,看看他们的内容是否相同----即便它们的名称不同.案例:$cp /bin原创 2015-07-13 21:39:57 · 10430 阅读 · 0 评论 -
shell学习五十七天----linux任务管理,针对上一讲的总结和扩展
linux任务管理在linux下有两类任务管理,分别是一次性和周期性.一次性是at和batch,周期性又分为系统任何和用户任务.一次性任务:1.命令格式:at [选项] time2.选项:选项名说明-I(大写的i)指定队列-f指定文件-l(小写的L)查看队原创 2015-07-29 20:09:27 · 1195 阅读 · 0 评论 -
shell学习完结篇----希望你能看到
最后总结shell学习算是暂时告一段落了,差不多学了两个月,从最开始的安装VMware,跑虚拟机,第一个ls命令,变态的各种shell语句,一路走来,感觉学的东西很多,学到的东西很少,以后慢慢的接触linux,感觉linux很有搞头,坚持下去,我在学linux的过程中,曾静有各种冲动,但都是不健康的冲动,不过还是坚持下来了,shell脚本学习指南这本书算是看完了,除了第11,14,15章,其中原创 2015-07-29 21:45:38 · 1458 阅读 · 0 评论 -
shell学习小结
进程小结在以上文章中,我差不多说了很多关于建立,列出,控制,调度与删除进程,还有如何将信号传递给它,以及如何追踪他们的系统调用.由于进程执行与私有地址空间中,因此它们不会彼此干扰,也不需要特别花费大力气写程序让他们在同一时间执行. 进程都可捕捉所有的信号(只有两个例外),他们要不就是忽略它,要不就是相应期待的操作,无法捕捉的两个信号信号时KILL和STOP,都是为了确保如果有腥味不当的原创 2015-07-29 21:24:59 · 919 阅读 · 0 评论 -
shell学习五十六天----延迟进程调度
延迟进程调度 前言:大部分时候,我们都希望进程快点开始,开点结束,别卡.而shell的执行,也是在前一个命令后,马上接着执行下一个命令.命令完成的速度是与资源的限制有关,且不在shell的权限下. 在交谈模式中使用下,有时不必等到命令完成才能执行另一个.这是shell提供的一个简单方式:所有的命令只要在最后加上&字符,都可起始于后台执行,无需等待.只有在少数情况下,必须等待后原创 2015-07-29 19:57:56 · 2637 阅读 · 0 评论 -
shell学习五十五天----进程记账
linux进程调度的实现----进程记账linux进程调度的实现一共由四部分组成:1.时间记账(就是记录进程已经运行了多长时间,还要运行多长时间)2.进程选择(加入红黑树)3.调度器入口4.睡眠和唤醒 进程记账:就是记录一个进程占用处理器资源的时间长度.既然要记录,那么就需要存在在一个位置,内核说,放在sched_entity结构中吧.我们当然要听内核的....原创 2015-07-29 14:48:28 · 1689 阅读 · 0 评论 -
shell学习五十四天----进程系统调用的追踪strace
strace前言:strace常用来跟踪进程执行时的系统调用的所接受的信号.在linux世界,进程是不能直接访问硬件设备,当进程需要访问硬件(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备.strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间,有其在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用.当你原创 2015-07-29 11:00:35 · 3964 阅读 · 6 评论 -
shell学习五十天----查看进程ps命令
进程列表列出进程中最重要的命令便是进程状态命令:ps.ps命令是进程状态(Process Status)的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令. 要对进程进行检测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也原创 2015-07-28 09:42:55 · 5324 阅读 · 0 评论 -
shell学习五十二天----删除进程kill命令
进程的控制与删除使用kill命令可以终止进程.通常,终止一个前台进程可以使用ctrl+C键,但是对于一个后台进程就必须使用kill命令来终止,我们需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉进程.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,采用编号为15的TREM信号.TERM信号将终止所有不能获取该信号的进程.对于原创 2015-07-28 17:48:55 · 2471 阅读 · 0 评论 -
shell学习五十一天----top命令查看进程列表
top命令查看进程列表top命令是linux下常用的性能分析工具,能实时显示系统中各个进程的资源占用状况.和win的资源管理器类似.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,知道用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最”敏感”的任务列表.该命令可以按CPU使用,内存使用和执行原创 2015-07-28 11:32:24 · 11217 阅读 · 1 评论 -
shell学习四十九天----进程建立
进程前言:进程指的是执行中程序的一个实例.新进程由fork()与execve()等系统调用所起始,然后执行,知道他们下达exit()系统调用为止.linux系统都支持多进程.虽然计算机看起来像是一次做了很多事,但除非是他拥有多个CPU,否则一次做了好多事只是个错觉.事实上,每个进程仅容许在一个极短的期间执行,我们称为时间片段,之后进程会先暂时搁置,让其他等待中进程执行.时间片段极短,通常只原创 2015-07-27 20:49:25 · 1027 阅读 · 0 评论 -
shell学习五十三天----捕获信号trap
捕捉进程信号信号是一种进程间的通信机制,它给应用程序提供一种异步的软件中断,是应用程序有机会接受其他程序活终端发送的命令(即信号).应用程序收到信号后,有三种处理方式:忽略,默认,捕捉.该进程收到一个信号后,会检查对该信号的处理机制.如果是SIG_IGN,就会忽略该信号;如果是SIG_DFT,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中原创 2015-07-28 21:07:14 · 1512 阅读 · 0 评论 -
shell学习小结
小结本章我么介绍了如何使用ls与stat露出文件与文件meta数据,还有如何使用touch设置未见时间戳.touch可显示有关日期时间相关的信息以及在许多现行系统上的范围限制. 说明了如何以shell的进程ID变量$$,搭配mktemp工具并手动取出随机数据流样本,建立位移的临时性文件名称,计算机的世界可以说是一个充满敌意的环境,所以可能通过此方式给予临时性文件具有唯一性与唯一访问性,原创 2015-07-14 13:18:25 · 855 阅读 · 0 评论 -
shell学习四十八天----文件校验和匹配
文件校验和匹配要是你怀疑可能有很多文件具有相同的内文,而是用cmp或diff进行比较所有横队的比较,导致所花费的时间会随着文件数目增长成次方的增长. 这是可以使用file checksum(文件校验和),取得近似线性的性能.有很多工具可用来计算文件与字符串的校验和,包括sum,cksum,以及checksum,消息摘要工具md5与md5sum,安全性散列算法工具sha,shalsum,原创 2015-07-14 13:06:57 · 2355 阅读 · 0 评论 -
shell学习四十二天----使用touch更新文件时间
使用touch更新文件时间$ll new.txt保证输出:ls: 无法访问new.txt: 没有那个文件或目录$touch new.txt$ll new.txt-rw-r--r-- 1 root root 0 7月 12 16:56 new.txt 如果此文件已经存在的情况下.更改文件时间为当前时间$touch new.txt-rw-r--r-- 1 root原创 2015-07-12 17:38:07 · 1612 阅读 · 0 评论 -
shell学习第十一天----sed正则的精确控制
有多少文本会改动在使用sed的时候我们来看这么两个问题:第一个问题是有多少人文本会匹配,第二个问题是从哪里开始匹配.回答是:正则表达式可以匹配整个表达式的输入文本中最长的,最左边的子字符串.除此之外,匹配的空(null)字符串,则被认为是比完全不匹配的还长.echo syx is a good body | sed ‘s/syx/zsf/’ 使用固定字符串sed可以使用完整的正原创 2015-06-13 15:44:02 · 2315 阅读 · 2 评论 -
shell学习十二天----行与字符串
行V.S.字符串大部分建议等程序都是处理输入数据的行,在这些情况下,不会有内嵌的换行字符出现在将要匹配的数据中,^与$则分别表示行的开头与结尾. 很多应用程序会将数据是位记录与字段的结合.一条记录指的是相关信息的翻个集合,例如以企业来说,记录可能含有顾客,供应商以及员工等数据,以学校来说,则可能有学生数据.而字段指的就是记录的组成部分,例如姓名或者街道地址. linux鼓励使用原创 2015-06-13 16:15:30 · 778 阅读 · 0 评论 -
shell学习二十七天----退出状态和if语句
退出状态每一条命令;不管是内置的,shell函数,还是外部的,当它退出时,都会返回一个小的整数值给引用它的程序,这就是大家所熟知的程序的退出状态.在shell下执行进程是,有很多方式可取用程序的退出状态.以管理来说,退出状态为0表示”成功”,也就是,程序执行完成且为遭遇到任何问题.其他任何的退出退出状态都为失败.内置变量?(使用命令echo $?)查看上一条命令的退出状态.案例:当你输原创 2015-06-26 09:33:43 · 11409 阅读 · 0 评论 -
shell学习第一天
shell学习第一天 在开始学习shell以前我觉得应该具备的基础有以下几点:1.如何登陆linux系统2.如何在命令行上执行程序3.如何做一个简单的命令管道,与使用简单的输入/出重定向,例如和>4.如何以&将程序放在后台执行5.使用chmod,将脚本设置为可执行权限 入门当我们需要计算机帮我们做点什么的是,最好是选对工具.就像你不会用文本编辑器来做支票簿的原创 2015-06-07 19:04:18 · 5313 阅读 · 4 评论 -
shell学习二十八天----case语句
case语句case $1 in-f)... 针对-f玄子昂的程序代码;; -d | --directory) #允许长选项... 针对-d选项的程序代码;;*)echo $1:unkonw option >$2exit 1#在esac之前的;;形式是一个好习惯,不过并非必要esac 这里我们看到,要测试的值出现在case和in之间.将值原创 2015-06-26 10:22:43 · 769 阅读 · 0 评论 -
shell学习二十六天----变量与算数
变量与算数shell脚本与函数还有位置参数的功能;传统的说法应该是”命令行参数”;shell为内嵌算数提供了一种标记法,称为算数展开.shell回对$((...))里的算符表达式进行计算,再将计算后的结构放回到命令的文本内.有两个相似的命令提供变量的管理,一个是readonly,它可以使变量称为只读模式;而赋值给它们是被禁止的.在shell程序中,这是创建符号常量的一个好方法:da原创 2015-06-25 16:10:49 · 997 阅读 · 0 评论 -
shell学习二十五天----神器的管道符
神器的管道符一.从结构化文本文件中提取数据1.sed -e 's=/.*==' 去掉第一个/和后面的所有字符jones:*:32713:899:Adrian W. Jones/OSD211/555-0123:/home/jones:/bin/ksh输出为jones:*:32713:899:Adrian W. Jones| -e 's=^\([^:]*\):\(.*\) \(转载 2015-06-24 12:18:47 · 1116 阅读 · 0 评论 -
shell学习二十四天----提取开头或结尾数行
提取开头或结尾数行有时,会需要从文本文件里把几行字----多半是靠近开头或结尾的几行,提取出来;或者,有时只要瞧瞧工作日志的后面几行,就可以了解最近工作活动的大概情况.可以用下面的方式显示标准钱n条记录,或是命令行文件列表中的每一个前n条记录.head -n n [file(s)]head -n [file(s)]awk ‘FNRsed -e nq [file(s)]sed原创 2015-06-23 14:37:08 · 2598 阅读 · 0 评论 -
shell学习二十二天----计算行数,字数以及字符数
计算行数,字数以及字符数wc命令可能是linux工具集里最古老也最简单的工具程序.wc的默认输出是一行报告,包括行数,字数以及字节数:echo this is a test of the emergency broadcast system | wc 1 9 49 如果要求仅输出部分结果,可以使用的选项有:-c(字节数),-l(行数),-w(字数);原创 2015-06-22 12:06:44 · 1812 阅读 · 0 评论