shell编程入门资料.ppt
Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。shellshell编程入门资料编程入门资料Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。目录目录课程大纲nshell编程语法nshell脚本调试nshell应用实例Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。一个简单的一个简单的shellshell程序程序第一个简单的shell程序$cat example#!/bin/sh#This is to show what a example looks like.echo Our first exampleecho#This inserts an empty line in output.echo We are currently in the following directory./bin/pwdechoecho This directory contains the following files/bin/lsCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。一个简单的一个简单的shellshell程序程序shell结构1.#!指定执行脚本的shell2.#注释行3.命令和控制结构创建shell程序的步骤:第一步:创建一个包含命令行和控制结构的文件。第二步:修改这个文件的权限使它可以执行。使用chmod u+x第三步:执行./example(也可以使用sh example执行)Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。ShellShell变量变量Shell变量变量:是shell传递数据的一种方法,用来代表每个取值的符号名。Shell有两类变量:临时变量和永久变量临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其他程序不可见。包括:用户自定义变量、位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。永久变量echo$PATH 查看环境变量 echo$LANG 查看语言环境 空为英文Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。用户自定义变量用户自定义变量用户自定义变量用户定义的变量由字母或下划线开头,由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀$设置变量:习惯上用大写字母来命名变量。变量只能以字母表中的字符开头,不能用数字。变量赋值:赋值号“=”两边应没有空格。定义时赋值,如NUM=1将一个命令的执行结果赋值给变量,如:TIME=date将一个变量赋值给另一个变量,如:A=$B使用echo命令查看变量值。如:echo$ACopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。设置和使用变量设置和使用变量使用单引号和双引号的区别ABC=time is$DATE 这里会打印时间ABC=time is$DATE 这里会把$DATE打印出来set 可以查看系统里面已经设置的变量unset NAME 可以删除一个变量Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。位置变量和特殊变量位置变量和特殊变量Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其他部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。例如:ls-l file1 file2 file3$0 这个程序的文件名$n 这个程序的第N个参数值特殊变量$*这个程序的所有参数$#这个程序参数的个数$这个程序的PID$!执行上一个后台命令的PID$?执行上一个命令的返回值 如果为0 说明上个命令执行成功Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。文件备份例子文件备份例子请看例子#!/bin/sh#backup files by dateDATE=/bin/date+%Y%m%d/bin/tar-cf/backup/$1.$DATE.tar$1 /dev/null 2/backup/$1.bak.log/bin/gzip/backup/$1.$DATE.tarif$?-eq 0 then echo$1$DATE backup successfully /backup/$1.bak.logelse echo ERROR:failure$1$DATE backup!/backup/$1.bak.logfiCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。shellshell命令命令read命令:从键盘读入数据,赋给变量举例:#!/bin/shread first secondecho the first parameter is$firstecho the second parameter is$second 调试执行 sh-x read 100 200Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。expr expr 命令命令expr 命令shell变量的算术运算 对整数型变量进行运算expr 3+5 请注意中间是有空格的乘法注意啦 expr 3*10复杂运算:expr expr 5+7/$var4将结果赋值:var5=expr$var1/$var2 例如:#!/bin/basha=6b=4value1=expr$a-$becho the value is$value1Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。变量测试语句变量测试语句变量测试语句:用于测试变量是否相等、是否为空、文件类型等格式:test 测试条件测试范围:整数、字符串、文件test str1=str2 测试是否相等test str1!=str2 不相等test-e file 是否存在test-f file 是否为文件test-d file 是否为目录test int1-gt int2 int1是否大于等于int2Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。apacheapache是否启动是否启动例子 web服务器是否启动,如果没有则启动输入 pgrep httpd 什么信息都没有 说明apache没有启动启动:/etc/rc.d/init.d/httpd start关闭:pkill httpd主要脚本web=/usr/bin/pgrep httpd if$web=then /etc/rc.d/init.d/httpd start fiCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。流程控制语句流程控制语句if else语句if -d$file_name then echo is deelif -f$file_name then echo is fileelse echo exit 0#正常退出fi-a:逻辑与 -o:逻辑或Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。forfor循环循环看看就知道for DAY in sunday monday tuesdaydo echo the day is:$DAYdone awk 命令应用awk-F 域分隔符 命令 分段提取不叫F 默认为空格如 awk-F:$3=0 print$1/etc/passwdawk-F:length($2)=0 print$1/etc/shadowCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。踢出用户踢出用户#!/bin/sh#The script to kill logined user.username=$1/bin/ps aux|/bin/grep$username|/bin/awk print$2 /tmp/temp.pidkillid=cat/tmp/temp.pidfor PID in$killiddo /bin/kill-9$PID 2/dev/nulldoneCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。select select 循环语句循环语句casecase控制语句控制语句 select var in Linux Unix Windowsdo breakdone echo You have selected$varread opcase$op in C)echo ;D)echo ;*)echo invalide selectionesacCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。while while 语句语句while -d/etcdo ls-ld/etc breakdone例子:1-10 每个数的平方num=1while$num-le 10do SUM=expr$num*$num echo$SUM num=expr$num+1doneCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。批量添加用户批量添加用户添加用户echo 123456|/usr/bin/passwd-stdin shedon 把密码123456 导入 shedon用户echo please input username:read nameecho please input number:read numn=1while$n-le$numdo/uer/sbin/useradd$name$n n=expr$n+1done删除用户/usr/sbin/userdel-r$name$sumCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。until until 语句语句until 语句判断是否可执行 肯定是假咯 until -x/etc/inittabdo /bin/ls-l/etc/inittab exit 0donebreak 和 continue 跟java里面差不多|逻辑或 .|.Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。shiftshift指定指定shift指定 每执行一次参数向前移一位eg:累加求和if$#-le 0then echo Not enough parameters exit 0fisum=0while$#-gt 0do sum=expr$sum+$1 shiftdoneecho$sumCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。函数应用函数应用函数应用 使可读性更强 函数中的变量均为全局变量,没有局部变量HELP()echo Usage:sh function$1$2$3 if$#-ne 3 then HELPelse echo fiCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。调试调试调试sh-x script这将执行该脚本并显示所有变量的值sh-n script不执行脚本只是检查语法的模式,将返回所有语法错误 如果什么都没有 则说明格式没问题Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。执行脚本应有权限执行脚本应有权限su-test 切换到test 用户chmod o-rx/script 将script其他人去掉rx权限sh 脚本 必须1.对脚本有r权限 2.对脚本所在目录有rx权限逐行读取 再比较for file in/bin/cat/tmp/setuid.checkdo /bin/grep$file/backup/setuid.list /dev/null if$?!=0 then echo$file isnt in list fidoneCopyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。地址:深圳市罗湖区深南东路2105号中建大厦701室电话:+86-0755-26966586传真:+86-0755-26966586-802网站:邮编:518001THANKS