SHELL编程脚本笔记
2013-05-21 08:50 夏洛克·福尔摩斯 阅读(419) 评论(0) 编辑 收藏 举报- 利用特殊文件/dev/null(只写文件),清空apache2日志文件(文件大小变成0,但文件仍然存在). 当apache2的日志文件很大时,利用这条Script脚本定时清空日志文件,把清除指令写入clearlog.shècp /dev/null /var/log/apache2/access.log 。要其定期执行采用下列命令: chmod +x /root/clearlog.sh crontab –u root –e 在VI 中填入: 0 6 * * * /root/clearlog.sh ,这样每天清晨六点自动执行clearlog.sh,自动清理log文件。
- Bash Shell可以让我们把原本输出到屏幕的信息,重新指定到别的文件, 用例:echo ‘hello world’>hi.txt 由Bash开启一个新文件hi.txt来存储。存成文件后,只要使用cat、more、less等指令,就可以显示文件的内容。Cat hi.txt more hi.txt less hi.txt。转向附加到hi.txt èecho ‘hello world again!’>>hi.txt 查看hi.txt内容:hello world hello world again!
- Echo echo –e “I come from china \nwhat’s your name?” 选项-e,可让字符串中的特殊的字符有作用,例如:\n会被解释成换行字符,因此,上式会在china 后面产生换行效果。
- 把字符串显示出来,通过管道交给tr,把大写字母转换成小写:printf“%s\n” “ABCDEFG” | tr ‘[A-Z] ‘ ‘[a-z]’.
- 显示过去曾经执行过的Shell 指令:history。
- 显示root 的历史脚本文件:echo $HISTFILE 历史指令最大容量查询:echo $HISTFILESIZE 查询显示的历史脚本文件内容:cat .bash_history.
- 列出登录主机之后,最近执行过的命令: fc –l ; fc –l 497 499 :列出编号之间的历史命令。
- Read可以一次性读取一行数据放入数组中:read –a arr < <(ehco 123 45 97 101 88) ,提取数值的方式:echo ${arr[2]}.
- Cd 命令:cd == cd ~ 回到主目录。 Cd — 回到先前的目录。Cd.. 回到上一层目录。
- Mkdir 建立新目录,mkdir –p /home/xl/var/log/apache ,如果不存在var/log/apache 则通过-p命令会建立此目录序列。在apache中建立文档,touch access.log 命令。删除目录:rmdir apache 删除文件:rm access.log。
- 对文本文件进行排序 :sort –r sorted.txt :对sorted.txt 文件做降序排列。 Sort –n sorted.txt :对sorted.txt 文件做升序排列。
- 对已排序好的文件删除重复行: sort sorted.txt | uniq:执行结果è删除文件中的重复行。 Sort sorted.txt | uniq –d:执行结果è挑出重复行。Sort sorted.txt | uniq –c:执行结果è计算每一行重复的次数。
- 对文件的每一行抽出每一部分:cut 命令:cut –c2 sorted.txt:执行结果è抽出文件中每一行的第二个字符。Cut –c3-10 sorted.txt:执行结果è抽出文件中每一行的第3到第10个字符。Cut –d: -f1 /etc/passwd 执行结果è抽出/etc/passwd各行的第一个字段。(-d:指示cut改用:为分隔符,-f1是第一个字段之意。实例:cut –d: -f3,4 /etc/passwd è抽出文件各行的第3及第4个字段)。
- 对文件以行和行的方式合并:paste命令:paste –d’#’ test.txt text1.txt:执行结果ètest.txt的每一行和text1.txt 的每一行合并,并以#分隔。 Paste –s sorted.txt :sorted.txt的每一行自己合并在一起,默认以Tab分隔。
- 转换或删除字符命令:tr 命令: tr k K <test.txt :将test.txt中的k转换成K字符。 tr ‘[a-z]’ ‘[A-Z]’ <test.txt :将小写字母全换成大写字母。
- 显示符合样式的行:grep命令:grep the test.txt :显示the字符在test.txt文件中。
- Tee 命令:读取标准输入,然后由标准输出显示,并且把这些数据存储在指定的文件。Tee test.log : 执行文本文件,test.log若已存在,会被清空,若不存在,则会建立一个新文件。欲结束输入,请按【ctrl+D】组合键。输入的数据存储在test.log。tee –a test.log,以文件附加的方式,把输入的数据接在test.log的文件尾,并不会把test.log清空。
- 记录命令的执行过程:Script 指令把执行命令所产生的信息记录下来,存放在log.txt。
- 建立字符设备文件:以下指令,可建立一个和/dev/null 相同属性的字符设备文件:mknod –m 666 nullfile c 1 3 ,如果/dev/null不慎丢失,可以这样重新建立/dev/null:mknod –m 666 /dev/null c 1 3。
- 建立FIFO文件:mknod myfifo p ,在一个SHELL环境中使用echo命令,把一个字符串输出到myfifo,称为先进入者,而echo会暂停下来,等待其他进程读取数据,,,,在另一个shell环境中,使用cat命令读取来自myfifo的输出,称为先取出,而之前的echo指令则因数据已输出完毕而结束执行。
- 建立Socket文件,Mksock mysocket。 在/dev中有一个重要的文件,如果不慎丢失,可利用mksock重建:mksock /dev/log chmod 666 /dev/log
- 建立符号链接文件,建立新的符号链接文件:Ln –s test.txt tfile ,删除原符号链接文件,重建新的符号链接文件:ln –sf test.txt tfile,如果tfile 原已存在,则先予以删除,在建立一个新文件指向test.txt。建立指向目录的链接文件:ln –s /root/tmp mytmp,建立目录链接后,使用cd mytmp,就等价于cd /root/tmp。
- 取得文件的属性:stat 的基本语法:取得文件系统的信息:stat -f /dev/tty 。 取得文件的属性: stat test.txt 。在文件系统中,文件还可以拥有一组特殊的属性,这些特殊的属性,可使用chattr 和lsattr 进行管理。Chattr用来改变文件的属性,lsattr则用来查看属性。Chattr 的使用方法:增加特殊属性:chattr +属性代码 文件 设定特殊属性:chattr + 属性代码 文件 。 删除特殊属性:chattr —属性代码 文件 。代码:i 属性作用:不能修改文件 操作者的身份:只有root可以。设定取用文件后,取用时间不会变:chattr +A test.txt ,也可以直接指定属性,但原来的属性会被消除,只剩下属性A ,chattr =A test.txt 。使用lsattr 可以查看修改的结果:lsattr test.txt。例:配置文件不能修改:chattr +i test.txt 删除属性i 的方法:chattr -i test.txt。
- Shell 默认变量:$#:传入脚本的命令行参数的个数 $*:所有命令行参数值,在各个参数值之间留有空格 $0:命令本身(shell文件名) $1:第一个命令行参数 $2:第二个命令行参数
例子:
执行情况如下:
- 局部变量:在变量首次被赋值时加上Local关键字可以声明一个局部变量:
输出结果:
- 变量(注意):变量赋值时,“=”左右两边都不能有空格
- BASH中的语句结尾不需要分号
- 判断:-e 文件已经存在 -f 文件是普通文件 -s 文件大小不为零 –d 文件是一个目录 –r 文件对当前用户可以读取 –w 文件对当前用户可以写入 –x文件对当前用户可以执行
:
执行后:
第二种情况:
- FOR循环:
执行后的结果:
第二种情况:
执行结果:
- While循环:
执行结果:
- 编写脚本,将用户输入的数字按照倒序输出:
执行结果:
升级版:
- 统计当前目录的文件数:
Counter=0
For files in *
do
Counter=$(( $counter+1 ))
Done
Echo “there are $counter files in `pwd` we need to process”
升级版:
./bing.sh /home ./bing.sh /root è 查询想要得到目录的文件数目
技术成就现在,眼光着看未来。