160 likes | 478 Views
架构平台部 bash shell 培训. 讲师: 日期:2009年 7 月 23 日. 课程简介. 本节课主要让大家熟悉linux vim编辑器,linux下的一些常用命令,并且对bash编程有一定的了解。. 目录. linux VIM编辑器的使用 linux 常用命令 shell 脚本编程 正则表达式. 我叫周绍希,主要做相册的日常运维工作。. 自我简介. 课程内容. VIM的使用 1). 光标移动位置: h,j,k,l (左,下,上,右,可以按F1来寻求帮 助) .a,A,o,O,0(零),$,gg,G
E N D
架构平台部bash shell培训 讲师: 日期:2009年7月23日
课程简介 • 本节课主要让大家熟悉linux vim编辑器,linux下的一些常用命令,并且对bash编程有一定的了解。
目录 • linux VIM编辑器的使用 • linux 常用命令 • shell 脚本编程 • 正则表达式
我叫周绍希,主要做相册的日常运维工作。 自我简介
课程内容 • VIM的使用 1). 光标移动位置: h,j,k,l (左,下,上,右,可以按F1来寻求帮 助) .a,A,o,O,0(零),$,gg,G 2). 查找 /,?, 3). 移动,删除,复制, 修改 nyy,p,dd,s,g 4).保存,退出 wq,q,q!
linux 常用命令 • linux常用命令 系统方面: adduser,ps,ipcs,passwd,top,ipcrm,hostname,kill/killall,df ,alias, ulimit,du ,df, date,crontab 文件方面: diff,touch,mkdir,ls ,grep,mv,ln,cut,rm,chmod,cat,cp,chown, head,sort,locate,tail,uniq,find,tar,gzip,more,wc,tar,less,awk,sed 网络方面: ssh,ping,cal,ifconfig,netstat,scp,expect,sz,rz,rsync;tcpdump
bash shell编程 • bash shell编程 bash shell介绍 bash shell语言是通过一定的语法,把各种命令、程序组合 在一起以实现我们需要的功能。 bash shell启动方式: – #! /bin/bash 指示使用bash 来执行一个脚本 – bash /path/to/file - chmod +x /path/to/file;./file • 变量 Shell变量都由字符串组成,不需要声明, 可以在程序的任意位置重新对变量赋值: 赋值:变量名=值(赋值不能有空格) 访问:$变量名 或者 ${变量名}
bash shell参数 • 系统设置变量 $0 当前程序的执行名字 $n当前程序的第n个参数值,n=1..9 $(*||@) 当前程序的所有参数 $# 当前程序的参数个数 $$ 当前程序的PID $! 执行上一个指令的PID $?执行上一个指令的返回值 bash的运算: bash 只提供了整数运算,一般通过let和expr这两个指令来实现: 例如:x=$((x+1)) 或 x=`expr $x+1` 在表达式中支持的操作符及其含义为: + - * / % (加,减,乘,除,取模 ) bash的条件判断: int1 -eq int2 等于 int1 -le int2 小于等于 int1 -ge int2 大于等于 int1 -lt int2 小于 int1 -gt int2 大于 int1 -ne int2 不等于
shell的流程 • shell的流程 if [ expression ];then ..... fi case $var) in condition ?) .... ;; esac for $var in list do ... done while [condition] do .. done
shell范例 • 下面是一个file.sh脚本,其具体作用? • #!/bin/sh • cd $(dirname $0); • DIR="/tmp" • BAK_DIR="/data/log" • file=$(find $DIR/ -type f -name "*.tmp") • echo $file if [ ! -d $BAK_DIR ];then • mkdir -p $BAK_DIR • fi • for i in $file • do • cp $i $BAK_DIR; • done • 如上面脚本用命令来实现,等同于下面这一命令。 • find /tmp -type f -name \*.tmp|xargs -i cp {} /data/log/
正则表达式 • • 所谓正则,是一个“字符串”,这种字符串描述一种了特征(如起始位置,字符串的长度、组成内容等) , 我们利用这种特征与目标字符串做比较,得到匹配或不匹配的结果 • • 正则式可由普通字符和正则元字符组成 • 操作符 用途.(句号) 匹配任意单个字符。^(脱字号) 匹配出现在行首或字符串开始位置的空字符串。$(美元符号) 匹配出现在行末的空字符串。[:alnum:];匹配空格[A-E]匹配任意大写的 A、B、C、D 或 E。[^A-E]匹配除 A、B、C、D 和 E 之外的任意字符。X?匹配出现零次或一次的大写字母 X。X+匹配一个或多个字母 X。X{n}精确匹配 n 个字母 X。X{n,m}匹配最少 n 个并且不超过 m 个字母 X。如果省略 m,表达式将尝试匹配最少 n 个 X。(abc|def)+匹配一连串的(最少一个) abc 或 def;abc 和 def 将匹配。
作业内容: • 1. 把a文件3-10行中存在sea的字符清空,并删除1-8行中存在the的的行。 • 2 .按eth1:ip格式显示eth1网卡的ip地址,例如:eth1:10.160.45.138 • 3. 制作一脚本,需要把7天前/usr/local/apache2/log目录下的所有日志文件移动到/data/log目录下,每天早上7点50准时执行该脚本。 • 4. 用正则匹配0-66之间的任意数字.
课后作业 • 1. 如附件中apache的access.log日志文件,按下列完成要求 1). 按时间,IP,访问url,返回方式(200,返回成功,304,用户cache等)4个字段输出本段日志。 2). 打印11点-12点这段时间的日志,并把这段日志保存在一个a文件中。 3). 把日志中11-12点这段时间中用户访问最多的IP打印出来,并把访问的次数打印出来。 4). 把11-12点用Mozilla访问的IP打印出来(IP不能重复) 5). 对access.log日志进行备份,每天凌晨3点备份前一天的日志文件,备份文件的名称按年月日命名,备份完前一天的日志文件后,在把前一天的日志文件在access.log中清空。
推荐书目: • unix shell范例精解(第4版)