unix/linux 脚本编程
文章平均质量分 73
沐星晨
天道 酬勤 宁静 致远
展开
-
如何使脚本的set-user-id位起作用
一:前记以下讨论围绕的一个问题:为什么C程序可以通过set-user-id位提权,但shell脚本不可以。 文章会比较罗嗦,其实只要了解unix程序的fork/exec并结合shell的执行过程,即可以明白。结论其实很简单就在最后,二句话。不耐烦的可以直接拖到最后边看呵。而且估计答案是很让人失望的。 写本文的目的主要将我对这个问题的认识的过程记录了下来,包括长期以来的一个误解原创 2010-05-08 14:29:00 · 3097 阅读 · 1 评论 -
实例解析shell子进程(subshell )
通过实例,解析个人对shell子进程的一个了解,主要包括以下几个方面1:什么是shell子进程2:shell什么情况下会产生子进程3:子进程的特点与注意事项4:$变量$$在脚本里的意义,及如何得到子进程里的进程号原创 2010-06-21 12:48:00 · 30184 阅读 · 2 评论 -
awk读取标准输入的讨论&awk源码读取输入部分分析
<br />今天群里有人问了个问题:<br />grep ...|awk ... filename<br />这种情况下awk先将管道|的数据处理完后,再开始处理文件filename么?<br /> <br />答案很多人都知道是否定的,<br />一般的格式是:grep ...filename|awk ... <br />不过问题目的人是想实现这样的功能:<br />grep ... file1 | awk ... file2<br />将grep后的结果送给awk先存下来,再处理file2<br />大原创 2010-11-17 11:15:00 · 4809 阅读 · 1 评论 -
shell命令解析中扩展与重定向顺序问题
<br /> <br />今天群里有人问了个问题:<br />echo $((12+34.0)) >/dev/null 2>&1<br />上句话中的错误怎么没有被重定向呢?<br /> <br />执行情况如下:<br />[root@rac0 ~]# echo $((12+34.0)) >/dev/null 2>&1<br />echo $((12+34.0)) >/dev/null 2>&1<br />-bash: 12+34.0: syntax error: invalid arithmeti原创 2011-02-21 09:43:00 · 3211 阅读 · 1 评论 -
find命令的几个例子解析(-a,-o,-path,-wholename,-prnue,-print)
晚上群里有人讨论起find命令,为find命令的-o,-a困扰,相当混乱的感觉,特整理了一下。首先得要提几点find命令的基本知识点,以此为基础进行find命令解析一:find的基本模式和默认规则find的基本模式是 find [path] [express] /*man find最上边的命令格式 */path可以省略,默认是当前目录,express又区分为options(选项)+tests(条件)+actions(动作),express可以逻辑复合express原创 2011-05-11 01:50:00 · 8112 阅读 · 3 评论 -
浅谈自底向上的Shell脚本编程及效率优化
<br />小论文,大家多批评指导:)<br />======<br />摘 要: 低效的shell脚本设计会进一步影响原本解释器模式下并不见长的程序运行效率,使其在面对大数据量文本分析时的资源与时间消耗变成难以接受的。本文分析了shell语言及其应用需求的特点,从分层设计的角度提出了“自底向上进行shell脚本编程”的理论,同时提出了从“外部系统环境”到“内部执行模式”全面的掌握工具软件的方法。实例充分证明,自底向上的shell脚本编程思想及方法能够有效提高脚本的执行效率。<br />关键词: 脚原创 2011-03-25 10:17:00 · 9730 阅读 · 0 评论 -
Awk里的域赋值操作和部分源码解析($1=$1,$0=$0,FS,OFS)
前言:cu上出了个shell题:http://bbs.chinaunix.net/thread-2319120-1-1.html第八题:GNUawk的$1=$1到底有什么作用?$0=$0呢?这题问得相当的细致。可能很多人已经常用这二个赋值语句,却半知半解。以下分二部分对这个题目进行分析建议没心情,没耐心,没兴趣的人,只需要了解下第一部分,看第二部分就表看了,很罗嗦的。第一部分:能过man上边的解析,回签这二个赋值语句的功能第二部分:awk部分源码解析(结点树简介,及域模块) 通过分析a原创 2011-05-16 19:32:00 · 6802 阅读 · 1 评论 -
解释器文件的参数问题(!/usr/bin/sed -n -f为什么报错)
<br />由问题引出讨论,这次的问题是:<br /> <br /> echo good|sed -f sed.sed<br />1. sed.sed: -n /good/p <br />2. sed.sed: /good/p<br />为什么第一种会报错呢<br /> <br /> <br />由这个问题引发下边的问题:<br />#!/usr/bin/sed -n -f为什么报错<br /> <br />=====================================<br原创 2011-05-17 23:03:00 · 2950 阅读 · 0 评论 -
shell文件编辑工具,sed -i与ed的区别
着无聊,继续答题问题:GNU sed 提供了-i选项,为什么有人说sed -i 并不象 ed 一样真正的编辑文件?(提示:观察文件改变前后的inode)注意审题的话,这题是二个文件编辑器的比较,也有可能是提示的误导,这题大都知道答-i 是用临时文件的机制,但这道题如果不通过说明ed 的模式,再做sed -i 与ed 比较,怎么看都不算完整原创 2011-05-19 18:19:00 · 8632 阅读 · 5 评论 -
ed再研究(ed的临时文件与sed -i的临时文件区别)
趁热打铁前边讨论sed -i 与sed的差别时提到:ed实际上是全文拷贝到内存做镜象,通过编辑镜象和回写保存整个文件。sed是流编辑器,对流有感性理解的人不难理解sed -i的临时文件的作用:做为流的输入sed -i可以形象的比喻成:把一桶水原来的标签拿掉,换个新标签,通过“管道”将水倒进一个新的桶里那么ed呢,ed是处理方式则是:把桶里的水“倒(实际上是复制)”到另一个桶里,直接对桶进行处理,再倒回原来的桶。见man ed原文If invoked with a file argument, then a原创 2011-05-21 19:34:00 · 2798 阅读 · 0 评论 -
【转】用shell写的几个日期函数
<br />用shell写的几个日期函数 2008-12-25 09:20#!/bin/sh#######################################SHELL日期计算函数 ##1:判断是否闰年check_leap() ##2:获取月份最大日期get_mon_days() ##3:检查日期格式check_date() ##4:返回昨天日期get_before_date()转载 2011-05-26 18:53:00 · 2083 阅读 · 0 评论 -
关于trap ERR的一个bash shell set 参数之一:-E,
trap ERRshell调试set参数原创 2010-06-20 16:49:00 · 3795 阅读 · 7 评论 -
二个shell变量小记, HISTTIMEFORMAT ,和shopt:变量nullglob
考虑下这个二个问题:1:“echo *在一个空目录下执行的结果如何?”2:history输出能否带着命令执行时间?以前在看文档(主要是man和info)时,遇到工具的变量,总是跳过去不读,将这部分当做字典,需要时再查。事实上经典的变量,迟早是要碰到的。比如今天在群里就碰到了下边几个变量:原创 2010-06-18 16:40:00 · 2734 阅读 · 0 评论 -
关于trap ERR的一个bash shell set 参数之二:shopt -s extdebug
本文是之前一篇文章的后续,关于trap ERR在函数调用,命令替换,命令列表()里的应用。等等,一个trap ERR涉及的太多,以至于经常会片面地去理解并由此产生疑惑 前文提及一个朋友想将trap ERR继续到函数调用里去,并由此引出shell的-e参数(等效于shopt的errtrace)然后另一个朋友提出了疑问,为何在()产生的子进程里,即使加了errtrace也无法继承trac ERR原创 2010-07-10 00:57:00 · 4286 阅读 · 4 评论 -
SHELL的单引号'',双引号"",及$字符单双引号及字符转义的小结
<br />在shell运行命令中,单双引号总能引起或多或少的话题讨论,这边做个小总结<br /> <br />先看以下例子:<br />sosodream@ubuntu:~>echo '/t'|xxd+ xxd+ echo '/t'0000000: 5c74 0a /t.sosodream@ubuntu:~>echo -e '/t'|xxd+ xxd+ echo -e '/t'0000000: 090a原创 2010-07-22 13:39:00 · 12419 阅读 · 1 评论 -
sed脚本:计算每行字符数,并同时输出记录
序:相当蛋疼的脚本,看了info sed 里的一个关于sed脚本模拟cat -b命令,想到的自己做个练习,于是就有了下边的题目和答案。首发:QQ群 题目:用单个sed(不用管道)计算每行字符数,并同时输出记录如文件abcdefgh输出3 abc5 defgh 我的答案[root@localhost sed]# cat cword.sed#原创 2010-05-26 10:45:00 · 5146 阅读 · 0 评论 -
shell脚本编程应用:进制转化,bc中的ibase与obase
<br />shell进行进制换算并不难,可以使用SHELL的算术扩展<br />[root@rac0 ~]# echo $((2#11110)) 30[root@rac0 ~]# echo $((3#12))5<br /> <br /> <br />但算术扩展局限于其他进制转化成十进制,需要灵活的进行进制转化,还是需要用到bc<br /> <br />bc里通过设置ibase与obase可以灵活的进制转化,比如将10进制数转化成2进制<br /> <br />[root@rac0 ~]# e原创 2010-07-28 10:00:00 · 10980 阅读 · 3 评论 -
bash shell数组模拟栈求四则运算混合表达式的逆波兰式和值
<br />###########################################################需求:四则运算混合表达式求值#描述:# 采用shell实现基于简单的加减乘除的混合表达式求值#分析:# 0:简单的加减乘除(a+b;a-b;a*b;a/b)直接调用工具计算# a:算法:先求出逆波兰表达式,然后计算逆波兰表达式# b:数据结构:采用数组保存(用数组模拟栈)##脚本说明:#脚本名:rpn.sh#脚本原创 2010-06-03 20:49:00 · 2576 阅读 · 0 评论 -
又一道sed题的多种解决
<br />群里的讨论呵,将自个的答案发到blog上来题:(要求用sed) 有一根长300厘米的棍子,从左往右涂5厘米黑色,空5厘米,然后再涂5厘米黑色,再空出5厘米,……从右往左涂4厘米黑色,空出4厘米,再涂4厘米黑色,再空出4厘米……两边依次涂完之后,问空白处有多少厘米解答:看到题目时,出题的人已经给了了一个思路了呵,就是先顺序(按五间隔)=>转置=>再顺序(按四间隔),要求用sed处理然后我根据这个思路,写了一个简单的可行解: perl -e 'print "0"x300,"/n"'|sed原创 2010-06-07 04:27:00 · 773 阅读 · 0 评论 -
rh里的/tmp清理机制-tmpwatch
<br />vm里装的是rhe 5系统,习惯性的写一些脚本时经常在/tmp下建一些临时文件或放一些测试数据,<br />最近发现/tmp老是默明其妙地被清理,但像a.sh,a.txt等文件却一直保留着。<br /> <br /> <br />想想自动的机制不外乎用到cron,于是在群里发了下问题:<br />rh默认的/tmp清理规则是在哪里设置的?cron?<br /> <br />然后就开始了讨论:<br />先有人提出来,在rc.sysinit(这个是存在在etc下的),由系统启动时,init进程读取原创 2010-06-17 15:40:00 · 4062 阅读 · 0 评论 -
真真假假--shell里的逻辑运算
<br />最近群里经常讨论到shell里的与(&&)运算与或(运算)<br /> <br />这边也做下简单的总结<br />1:shell在逻辑运算下,跟其他语言一样支持与或非的逻辑运算(man test,或 在man bash里查的ARITHMETIC EVALUATION一节)<br />2:shell直接模工下,一般是以0为真,1为假,即根据函数(return)或脚本(exit)来判断真假。<br />3:bash里的&& 和|| 不像c里的优先级。在bash里,&& 与||是具有相同优先级的 ,原创 2010-06-17 15:48:00 · 9218 阅读 · 0 评论 -
shell条件表达式小结:test([])与 [[]]
在info bash里的第“6.4 Bash Conditional Expressions”节里开头有一句话说明了shell条件判断的二个机制:Conditional expressions are used by the `[[' compound command and the`test' and `[' builtin commands.机制一:内置(builtin)的函数test(运算符[]),此部分完整的说明,可查看“4.1 Bourne Shell Builtins”机制二:[[]],条件结构原创 2010-06-18 15:42:00 · 2165 阅读 · 0 评论 -
awk函数,参数,小例
<br />相当简单的一个例子,主要是做为awk的函数,参数使用的一个小例子,<br />简单的例子其实可以扩展出不少内容的。<br />比如这里用到的BEGIN模块,awk内部模块除BEGIN外,都是要读输入的,<br />经常只采用BEGIN模块来测试awk<br /> <br />再比如awk的函数的可变参数等。。。不再细化了,有时间再讨论<br /> <br />例子:<br />[root@localhost awk]# cat c.awk <br />+ cat c.aw原创 2010-06-18 16:14:00 · 1040 阅读 · 0 评论