您的位置:首页 > 运维架构 > Shell

Shell脚本编程

2017-09-05 09:19 169 查看
if语句
ifcondition1thencommand1elifcondition2thencommand2elsecommandNfi
for语句
forvarinitem1item2...itemNdocommand1command2...commandNdone
while语句
whileconditiondocommanddone
case语句
case值in模式1)command1command2...commandN;;模式2)command1command2...commandN;;esac
参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1$2…$n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1""$2"…"$n"的形式输出所有参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
n>file将文件描述符为n的文件重定向到file。
n>>file将文件描述符为n的文件以追加的方式重定向到file。
$*与$@区别:相同点:都是引用所有参数。不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数1、2、3,,则"*"等价于"123"(传递了一个参数),而"@"等价于"1""2""3"(传递了三个参数)
命令功能其他
ps-ef-ADisplayinformationaboutotherusers'processes,includingthosewithoutcontrollingterminals.-aDisplayinformationaboutotherusers'processesaswellasyourown.Thiswillskipanyprocesseswhichdonothaveacontrollingterminal,unlessthe-xoptionisalsospecified.-CChangethewaytheCPUpercentageiscalculatedbyusinga``raw''CPUcalculationthatignores``resident''time(thisnormallyhasnoeffect).-cChangethe``command''columnoutputtojustcontaintheexecutablename,ratherthanthefullcommandline.-dLike-A,butexcludessessionleaders.-EDisplaytheenvironmentaswell.Thisdoesnotreflectchangesintheenvironmentafterprocesslaunch.-eIdenticalto-A.-fDisplaytheuid,pid,parentpid,recentCPUusage,processstarttime,controllingtty,elapsedCPUusage,andtheassociatedcommand.Ifthe-uoptionisalsoused,displaytheusernameratherthenthenumericuid.When-oor-Oisusedtoaddtothedisplayfollowing-f,thecommandfieldisnottruncatedasseverelyasitisinotherformats.-GDisplayinformationaboutprocesseswhicharerunningwiththespecifiedrealgroupIDs.-gDisplayinformationaboutprocesseswiththespecifiedprocessgroupleaders.-hRepeattheinformationheaderasoftenasnecessarytoguaranteeoneheaderperpageofinformation.-jPrintinformationassociatedwiththefollowingkeywords:user,pid,ppid,pgid,sess,jobc,state,tt,time,andps--processstatus
lsof-ilsoffilename显示打开指定文件的所有进程lsof-a表示两个参数都必须满足时才显示结果lsof-cstring显示COMMAND列中包含指定字符的进程所有打开的文件lsof-uusername显示所属user进程打开的文件lsof-ggid显示归属gid的进程情况lsof+d/DIR/显示目录下被进程打开的文件lsof+D/DIR/同上,但是会搜索目录下的所有目录,时间相对较长lsof-dFD显示指定文件描述符的进程lsof-n不将IP转换为hostname,缺省是不加上-n参数lsof-i用以显示符合条件的进程情况lsof-i[46][protocol][@hostname|hostaddr][:service|port]46-->IPv4orIPv6protocol-->TCPorUDPhostname-->Internethostnamehostaddr-->IPv4地址service-->/etc/service中的servicename(可以不只一个)port-->端口号(可以不只一个)例如:查看22端口现在运行的情况#lsof-i:22COMMANDPIDUSERFDTYPEDEVICESIZENODENAMEsshd1409root3uIPv65678TCP*:ssh(LISTEN)lsof-listopenfiles
1、grepgrep(GeneralRegularExpressionParser,通用规则表达式分析程序)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。它的使用语法为:grep[选项]pattern[文件名].匹配任意一个字符*匹配0个或多个*前的字符^匹配行开头$匹配行结尾[]匹配[]中的任意一个字符,[]中可用-表示范围,例如[a-z]表示字母a至z中的任意一个\转意字符命令中的选项为:-b显示块号-c仅显示各指定文件中包含模式的总行数-i模式中字母不区分大小写-h不将包含模式的文件名显示在该行上-l仅显示包含模式的文件名-n显示模式所在行的行号-s指定文件若不存在或不可读,不提示错误信息-v显示所有不包含模式的行其中,pattern为所要匹配的字符串。如在/etc/passwd文件下查找包含“carey”字符的行:$grepcarey/etc/passwd要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。$grep'test'd*显示所有以d开头的文件中包含test的行。$ls-l|grep'^public'通过管道过滤ls-l输出的内容,只显示以public开头的行。后面的^字符强制grep命令只在每行的开头找public。整个搜索模式(pattern)用单引号括起来,使shell不理会它们。shell只将单引号去掉,将搜索模式送给grep命令。$grep-i'helloworld'menu.hmain.c显示在menu.h和main.c文件中匹配“helloworld”的行,忽略大小写。例如:grep'sample'-R*2、findfind是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。find的使用格式如下:  find<指定目录><指定条件><指定动作>  -<指定目录>:所要搜索的目录及其所有子目录。默认为当前目录。  -<指定条件>:所要搜索的文件的特征。  -<指定动作>:对搜索结果进行特定的处理。如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。find的使用实例:$find.-name'my*'–ls搜索当前目录(含子目录,下同)中所有文件名以my开头的文件,并显示它们的详细信息。$find/home-userrtos搜索/home下拥有者为rtos的文件$find.-typef-mmin-10搜索当前目录中,在过去10分钟中更新过的所有的普通文件。如果不加-typef参数,则搜索普通文件+特殊文件+目录。$find/-typef-size+100M查找系统中所有大于100M的文件说明:如果你要寻找一个档案的话,那么使用find会是一个不错的主意。不过,由于find在寻找数据的时候相当的耗硬盘,所以没事情不要使用find啦!有更棒的指令可以取代呦,那就是whereis与locate咯~3、locatelocate命令其实是“find-name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。locate命令的使用实例:$locate/etc/sh搜索etc目录下所有以sh开头的文件。$locate-i~/m搜索用户主目录下,所有以m开头的文件,并且忽略大小写。4、whereiswhereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis命令的使用实例:$whereisgrepgrep:/bin/grep/usr/share/man/man1p/grep.1p.gz/usr/share/man/man1/grep.1.gz5、whichwhich命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。which命令的使用实例:$whichgrep/bin/grep
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: