




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对文件内容的第三个域进行倒叙排序,域之间以“:”隔开sort -t: -r +2 index.jsp对文件内容的第一个域进行排序,域之间以“:”隔开sort -t: index.jsp对文件内容的第二个域进行数值排序,域之间以“:”隔开sort -t: +1n index.jsp对文件内容的第二个域进行数值排序,域之间以“:”隔开,去掉重复行sort -t: -u +1 index.jsp对文件内容先对第二个域进行排序在对第一个域进行,域之间以“:”隔开sort -t: -k2 -k1 index.jsp该命令意即开始以域0分类,忽略域2,然后再使用域3分类。Sort +0 -1 +2以第1域最左边第3个字符开始分类Sort t: +1.2 index.jsp安第二个域分类,倒叙排序,并只显示第一条数据sort -t: -r +1 index.jsp |head -1安第二个域分类,倒叙排序,并只显示最后一条数据sort -t: +1 index.jsp |tail -1输出index.jsp文件的最后一行tail -1 index.jsp输出index.jsp文件的前两行Head -2 index.jsp安第二个域分类,只显示第一条数据,并且只显示这条数据中的第二个域sort -t: -k2 index.jsp |tail -1|awk -F: print this is last $2linux查看ip信息,必须是root帐号Ifconfig去掉index.jsp文件中连续的出现的信息uniq index.jsp去掉index.jsp文件中连续的出现的信息,并显示重复的行数Uniq -c index.jsp去掉index.jsp文件中连续的出现的信息,只显示有重复出现的行,并显示重复的行数Uniq c -d index.jsp连接两个文件,以某个关键域作为连接条件join -j1 1 -j2 1 index.jsp sort.logjoin -e 1.1,2.1 index.jsp sort.log显示index.jsp文件中以“:”隔开的前三个域cut -d: -f1,3 index.jsp显示index.jsp文件中的每一行的前6个字符cut -c1-6 index.jsp将文件index.jsp以1000字节split -b 1000 index.jsp-将文件index.jsp文件中的字符”a”换成“b”tr s a “b”test.txt-删除index.jsp文件中的a字符tr d a test.txt-文件index.jsp大写到小写转换tr a-z A-Z &2; exit 1; else echo yes,you are the root &1 exit 1;fi将参数传给系统命令DIRECTORY=$1;if test -z ls -a $DIRECTORY then echo the $DIRECTORY is EMPTY else echo the $DIRECTORY is not emptyfi按照输入的参数建立目录,如果目录存在则推出,如果目录不存在则提示用户是否建立,键入“y”则建立文件夹DIRECTORY=$1echo test=if $DIRECTORY = then echo error you must input the parameter ,Basename $0 &2; exit 1;fiecho $DIRECTORY =if -d $DIRECTORY then echo the $DIRECTORY is exsit! : # do nothing else echo The directory does not exsit echo -n Create it now Y.N read ANS if $ANS = y | $ANS = Y then echo Creating now ; mkdir $DIRECTORY /home/jimmy/ly.log 2&1; if test $? != 0 then echo create dir $DIRECTORY error&2; exit 1; fi else : # do nothing fifi提示用户是否要改变数据。如果是则提示输入数字,然后将输入的数字相加,最后返回COUNT=100echo do you want to change the $COUNTread tempif $temp = y | $temp = Y then echo enter the value read value expr $COUNT + 100 ./ly.log 2&1 Status=$? if $value = | $Status != 0 then echo there is some error ./ly.log 2&1 exit 1; fi COUNT=expr $COUNT + $value echo Now the count value is : $COUNTfi输入用户和密码登陆脚本。输入密码是不显示在屏幕上IVALID_NAME=yesIVALID_PASS=yes#将终端信息保存在变量中SAVEDSTTY=stty -gecho you will logging into sensitive area:echo -n please enter the username:read username#将终端的echo属性输入不显示在屏幕上stty -echoecho -n enter the password:read password#将终端的所有属性还原stty $SAVEDSTTYif $username = lzw -o $username = ly then IVALID_NAME=nofiif $password = lzw then IVALID_PASS=nofiecho =$IVALID_NAME = $IVALID_PASSif $IVALID_NAME = yes -o $IVALID_PASS = yes then if $IVALID_NAME = yes then echo the username is undifined,you can not logging this area else if $IVALID_PASS = yes then echo the password is not right,you can not logging this area fi fificase语句,匹配到后立即跳出case语句echo -nplease enter the number:read numcase $num in1) echo you selected 1: ;2) echo you selected 2: ;3) echo you selected 3: ;4) echo you selected 4: ;5) echo you selected 5: ;6) echo you selected 6: ;7) echo you selected 7: ;8|11) echo you selected 8: ;91) echo you selected 91: ;匹配任意单字字符?)echo you input is not number is : $num;匹配任意字符*) echo you selected *: ;Esaccase语句参数传递if $# != 1 then echo the parameter count must only one: exit 1;fiparm=$1;case $parm instart|START) echo the programe is starting.;stop|STOP) echo the programe is stoping.;*) echo the parameter is wrong.;Esac缺省值,如果输入信息只是回车换行,那么就取缺省值echo please input you name:read nameecho =$name=echo you name is .$name:=lyecho =$name=for循环echo this is loop programefor loop in 1 2 3 4 5 6 do echo $loopdonefor循环可用用字符串echo this is loop programefor loop in jimmy ly lzw lzwly 5 6 do echo $loopdone用ls作为循环条件echo this is loop programefor loop in ls -a do echo $loopdonefor循环使用参数,将所有参数作为一个条件。循环一次echo this is loop programefor loop in $* do echo $loopdonefor循环使用参数,将每个参数作为循环条件,每个参数都循环一次echo this is loop programefor loop in $ do echo $loopdone用for循环ping机器echo this is loop programefor loop in 5 do ping -c 2 $loopdonefor循环备份文件echo this is loop programefor loop in ls do if -f $loop then cp $loop $loop.bak fidone循环将所有文件中的小写换成大写字母echo this is loop programefor loop in ls do if -f $loop then cat $loop | tr a-z A-Z|tee -a ./log.log fidoneuntil用法,直到用户输入自己的名字后退出echo please enter you name:read nameuntil $name #判断name是否为空do echo please enter you name: read namedone判断文件是否存在。如果存在则一直循环。知道删除了the_file=/home/jimmy/log.loguntil ! -f $the_file do sleep 1 echo the file is exsiteddoneecho the file is deletedwhile循环count=1while $count -lt 1000000 do echo =$count count=expr $count + 1done将文件ping.txt中的内容循环读入,并以“。”分开显示,IFS 用来确定命令中什么样的分隔词被发送到原始的 Unix Bourne shell,并与其他环境变量一样被传递下去files=$IFSIFS=.while read NAME DEPT ID do echo $NAME t $DEPT t $ID t = done./ping.txtIFS=$files根据文件的值控制流files=$IFSIFS=.while read NAME DEPT ID do if $NAME = jimmy then echo the name is :$NAME exit 0 fi echo $NAME t $DEPT t $ID t = done./ping.txtIFS=$files循环读入数据,直到输入exit时才退出echo please enter the value:while read valuedo if $value = exit then exit 1 fi echo the value is $valuedone循环读入文件,以行的方式读入count=1while read aaaado echo $aaaa = $count count=expr $count + 1done./ping.txtlinux启动的时候自动启动一些服务配置在/etc/rc.d/rc.local的最后添加要启动的服务即可/sbin/service vsftpd start/sbin/service crond startexecexec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除,。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境IO详解I/O重定向 详解及例子 1、基本概念a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 09;b、常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;c、用 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;e、0 是 的默认值,因此 与 0 与 1 是一样的;f、在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;g、管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;h、tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;i、bash(ksh)执行命令的过程:分析命令变量求值命令替代(和$( ))重定向通配符展开确定路径执行命令;j、( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus anyother open file descriptors。k、exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除,。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。2、基本IOcmd file 把 stdout 重定向到 file 文件中cmd file 把 stdout 重定向到 file 文件中(追加)cmd 1 fiel 把 stdout 重定向到 file 文件中cmd file 2&1 把 stdout 和 stderr 一起重定向到 file 文件中cmd 2 file 把 stderr 重定向到 file 文件中cmd 2 file 把 stderr 重定向到 file 文件中(追加)cmd file 2&1 把 stderr 和 stderr 一起重定向到 file 文件中cmd file2 cmd 命令以 file 文件作为 stdin,以 file2文件作为 stdoutcat file 以读写的方式打开 filecmd file cmd 命令以 file 文件作为 stdincmd &n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出&n 标准输入复制自文件描述符 n&- 关闭标准输出n&- 表示将 n 号输出关闭上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定而不是缺省的 0 或 1。如:. 2file 运行一个命令并把错误输出(文件描述符 2)定向到 file。. 2&1 运行一个命令并把它的标准输出和输出合并。(严格的说是通过复制文件描述符 1 来建立文件描述符 2 ,但效果通常是合并了两个流。)2&1说明:2&1 也就是 FD2FD1 ,这里并不是说FD2 的值 等于FD1的值,因为 是改变送出的数据信道,通俗的说是:把stderr并到stdout。但使用类似 cmd 1&3 这样的形式时,原理相同,但往往不同于 2&1 和 1&2 通常用来合并的作用。注意:普通cmd命令的cmd n&n 和exec n&n 是有区别的。exec 0outfilename # 打开文件outfilename作为stdoutexec 2errfilename # 打开文件 errfilename作为 stderrexec 0&- # 关闭 FD1exec 5&- # 关闭 FD5问:如果关闭了 FD0、FD1、FD2,其后果是什么?恢复 FD0、FD1、FD2与 关闭FD0、FD1、FD2 有什么区别?代码分别是什么?打开了FD3FD9,我们用完之后,你觉得是将他们关闭还是恢复?下面是提示(例子来源于CU):exec 6&2 2ver # FD2(本来往monitor送的) 定向到文件vercommand dev/null & #丢弃FD1(stdout)exec 2&6 # 恢复 FD24、简单举例(其中 yes.txt存在,no.txt不存在)a、stdout 和stderr 都通过管道送给egrep了:(ls yes.txt 2&1;ls no.txt 2&1) 2&1|egrep * file(ls yes.txt;ls no.txt) 2&1|egrep * file# 这个例子就是让大家:理解 命令执行顺序 和 管道“|”在命令执行前,先要进行重定向的处理,并将把 nested sub-shell 的stdout 接到egrep 命令的 stdin。nested sub-shell ,在 ( ) 中的两个命令可以看作一个命令。其 stdout(FD1) 通过 “|” 作为 egrep 的 stdin,再加上 2&1 时,初始 stdout 和 stderr 都往管道 “|” 送。#b、没有任何东西通过管道送给egrep,全部送往monitor。(ls yes.txt 2&1;ls no.txt 2&1) &2|egrep * file虽然在()里面将 FD2转往FD1,但在()外,遇到 &2 ,结果所有的都送到monitor。5、中阶例子(其中 you 这个文件是存在的,no 和 wu 这两个文件不存在)r2007兄的:/forum/view.1848&show_type=new&sid=cf30398c911e0d2b16313c6922123f67条件:stderr通过管道送给egrep,正确消息仍然送给monitor(不变)exec 4&1;(ls you no 2&1 1&4 4&-;ls wu 2&1 1&4 4&-)|egrep * file;exec 4&-或者exec 4&1;(ls you no;ls wu) 2&1 1&4 4&-|egrep * file;exec 4&-r2007 兄在其贴已有详细说明,如果加两个条件:(1)要求cmd1和cmd2并行运行;(2)将cmd1的返回值赋给变量 ss。则为:exec 3&1;exec 4&1ss=$(ls you no 2&1 1&3 3&-;echo $? &4)|egrep * file) 4&1)exec 3&-;exec 4&-说明:exec 3&1;4&1# 建立FD3,是用来将下面ls那条语句(子shell)中的FD1 恢复到正常FD1,即输出到monitor,你可以把FD3看作最初始的FD1的硬盘备份(即输出到monitor);# 建立FD4,到时用作保存ls的返回值(echo $?),你可以将FD4看作你考试时用于存放计算“echo $?”的草稿纸;(ls you no 2&1 1&3 3&-;echo $? &4)# 大家还记得前面说的子shell和管道吧。这条命令首先会继承FD0、FD1、FD2、FD3、FD4,它位于管道前,所以在运行命令前会先把子shell自己的FD1和管道“|”相连。但是我们的条件是stderr通过管道送往egrep,stdout仍然输出到monitor。于是通过2&1,先把 子shell的FD1 的管道“送给”FD2,于是子shell中的stderr送往管道“|”;再通过 1&3,把以前的“硬盘备份”恢复给子shell的FD1,于是子shell中的FD1变成送到monitor了。再通过3&- ,将3关闭;接着运行echo $? ,本来其输出值应该送往管道的,通过 &4 ,将 输出 送往 “草稿纸”FD4,留以备用。(ls you no 2&1 1&3 3&-;echo $? &4)|egrep * file) 于是,stderr 通过管道送给 egrep ,stdout 送给monitor,但是,还有 FD4,它送到哪去了?$(ls you no 2&1 1&3 3&-;echo $? &4)|egrep * file) 4&1)最后的 4&1 ,就是把FD4 重定向到 FD1。但由于其输出在 $( )中,其值就赋给变量ss了。最后一行关闭 FD3、FD4。6、高阶例子lightspeed 版主大大的:Shell 经典问题之 I/O 重定向 (/forum/view.show_type=new)Q 对于命令 cmd1, cmd2, cmd3, cmd4. 如何利用单向管道完成下列功能: 1. 所有命令并行执行 2. cmd1 和 cmd2 不需要 stdin 3. cmd1 和 cmd2 的 stdout 定向到 cmd3 的 stdin 4. cmd1 和 cmd2 的 stderr 定向到 cmd4 的 stdin 5. cmd3 的 stdout 定向到文件 a, stderr 定向到屏幕 6. cmd4 的 stdout 定向到文件 b, stderr 定向到屏幕 7. cmd1 的返回码赋给变量 s 8. 不能利用临时文件 解决方法:exec 3&1; exec 4&1 my_value=$(cmd1 1&3 ; echo $? &4 )| cmd2 ) 3&1 | cmd3 a 2&3 ) 2&1 | cmd4 b ) 4&1) exec 3&-; exec 4&- 解释:exec 3&1; exec 4&1建立FD3 ,给cmd1恢复其FD1用和给cmd3 恢复其FD2用;建立FD4,保存“echo $?”输出值的“草稿纸”第一对括号到第一个管道:(cmd1 1&3 ; echo $? &4 )|cmd1本身没有stdin,其stdout原要送往第一个管道,由于1&3的作用,其stdout被送往FD3;而 &4 的作用实际是将 cmd1 运行后的返回码送往 FD4。cmd1的stderr默认等待下一步处理。最后,没有往管道送任何东西;第二对括号到第二个管道:(cmd1 1&3 ; echo $? &4 )| cmd2) 3&1|由于第一个括号中cmd1的 stdout 被送往 FD3,导致管道左端没有任何输入,cmd2 从而就没有stdin。cmd2 的stdout则为默认的;将第二对括号看出一个命令,其所有的stdout送往第二个管道“|”;同时由于3&1的作用,原先cmd1的stdout在送往FD3 又与cmd2的stdout并到一起,所以cmd1 和 cmd2 的 stdout 都送往第二个管道“|”。而cmd1、cmd2的stderr仍然默认等待下一步处理;第三对括号到第三个管道:(cmd1 1&3 ; echo $? &4 )| cmd2 ) 3&1 |cmd3 a 2&3 ) 2&1|cmd3 a 2&3:cmd3接收处理来自管道的stdin后,其 stdout 送给文件a,其stderr送往FD3,由于FD3继承FD1,实际上其stderr是送往monitor。如果没有“2&3”,那么cmd3的stderr就会干扰cmd1和cmd2的错误输出,所以它是必须的;将第三个括号里完全看作一个命令,其stdout送往管道 “|”,由于2&1,于是stderr也送往着管道。但由于cmd1、cmd2的stdout已经送给了cmd3处理,而cmd3的stdout输出到文件a,cmd3的stderr也送往monitor,所以实际上只有cmd1和cmd2的stderr送往管道。cmd4 b:cmd4接收处理来自管道的stdin后,其stdout 定向到文件 b,stderr 默认输出到monitor。第四对括号:( (cmd1 1&3 ; echo $? &4 )| cmd2 ) 3&1 | cmd3 a 2&3 ) 2&1| cmd4 b ) 4&1四对括号里面所有命令的 FD1、FD2都处理完了,但是还有“echo $? &4”没处理。“4&1”的作用就是“将FD4并到stdout”,但由于其他命令的stdout都处理完了,实际上就只有 $? 的值。又由于 $() 会建立一个管道,输入端为()内命令,故 $? 的值被赋给变量my_value。最后一行是关闭FD3和FD4。另:恢复重定向或关闭的stdout:exec 1&2 ,恢复重定向或关闭的stderr:exec 2&1。如果stdout和stderr全部都关闭了,又没有保存原来的FD,可以用:exec 1/dev/tty 恢复。我尝试回答下面的问题。如有错误,还请各位前辈指正!7、在一个交互式的(Interactive) shell 中, 用 exec 进行 I/O 重定向.1). Stdin, stderr 可以定向到文件中吗? 有什么结果?a、在交互式shell中,可以将stdin定向到文件。执行:exec 0in结果为:in 文件中每一行均会被自动执行,并且在最后会再加执行一个 exit 命令,导致退出(或退回到正常shell下)。如 in 文件内容:$ more indateread lspecho hahhaecho this is $lsp在提示符下执行命令:$ exec 0err结果为:命令提示符PS被屏蔽,输入的命令也被屏蔽。但是命令执行的结果,如果是stdout 则会回显到屏幕上,如果是 stderr 则不会回显到屏幕上。其中,命令提示符、命令、stderr均会保存到文件 err 中。如:$ exec 2errerr in out # 执行 ls 命令Tue Jan 18 18:55:58 HKT 2005 # 执行 date 命令,而后执行了“ ls nofile”,nofile这个文件不存在$ # 执行 exit 命令现在让我们查看 err文件:$ more errlspii lsp$ lslspii lsp$ datelspii lsp$ ls nofilels: nofile: No such file or directorylspii lsp$ exitexitc、在交互式shell中,可以将stdout定向到文件。这个使我们常用到的。就不说了。就是将错误的输出内容定向到文件中。正确的输出内容并不受影响。2). Stdin, Stderr 可以关闭吗? 有什么结果? 在交互式shell中,如果关闭stdin,如:exec 0&- ,状态同stderr定向到文件,唯一不同的是没有保存下来。在交互式shell中,如果关闭stdoutr,如:exec 1&- ,只要执行有stdout或stderr内容送往 monitor 的命令,如ls、date这类命令,均会报错:“ls: write error: Bad filedescriptor”。其他如cd、mkdir、这类命令不受影响。3). 如果 stdin, stdout, stderr 进行了重定向或关闭, 但没有保存原来的 FD, 可以将其恢复到 default 状态吗? * 如果关闭了stdin,因为会导致退出,那肯定不能恢复。* 如果重定向或关闭 stdout和stderr其中之一,可以恢复,因为他们默认均是送往monitor(但不知会否有其他影响)。如恢复重定向或关闭的stdout:exec 1&2 ,恢复重定向或关闭的stderr:exec 2&1。* 如果stdout和stderr全部都关闭了,又没有保存原来的FD,可以用:exec 1/dev/tty 恢复。8、cmd a 2a 和 cmd a 2&1 为什么不同?cmd a 2a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。cmd a 2&1 :stdout直接送往文件a ,stderr是继承了FD1的管道之后,再被送往文件a 。a文件只被打开一遍,就是FD1将其打开。他们的不同点在于:cmd a 2a 相当于使用了FD1、FD2两个互相竞争使用文件 a 的管道;而cmd a 2&1 只使用了一个管道FD1,但已经包括了stdout和stderr。从IO效率上来讲,cmd a 2&1的效率更高。break使用echo please enter the value:while read valuedo if $value = exit then break fi echo the value is $valuedonecontinue使用echo please enter the value:while read valuedo if $value = exit then continue fi echo the value is $valuedone脚本中定义函数及调用function test() echo the day now is dateTestshell中定义函数,及参数传递和返回值function test() if $# -lt 1 then echo the parameter is null return 1 fi if $1 -gt 100 then echo the parameter is more than 100 return 0 else echo the parameter is less than 100 return 1 fi echo the day now is datetest $1echo $?shift用法,主要作用是参数的偏移,下面例子打印出所有的参数loop=0while $# -ne 0 do echo $1 s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品退货工作管理制度
- 药库药品效期管理制度
- 营运公司安全管理制度
- 设备保养常规管理制度
- 设备备件出库管理制度
- 设备报废制度管理制度
- 设备检修通道管理制度
- 设备管理系统管理制度
- 设备项目安装管理制度
- 设计公司招待管理制度
- SB/T 10279-2017熏煮香肠
- GB/T 6185.2-20162型全金属六角锁紧螺母细牙
- GA/T 1394-2017信息安全技术运维安全管理产品安全技术要求
- IB教育中的PYP介绍专题培训课件
- 2022年桂林市卫生学校教师招聘笔试题库及答案解析
- 栏杆安装单元工程施工质量验收评定表完整
- 外墙清洗服务工程项目进度保障计划
- 2×300MW火电厂电气一次部分设计
- (全新)政府专职消防员考试题库(完整版)
- 岭南版 美术八年级下册 6色彩的表现 教案
- 2022年广东省公务员考试申论真题及参考答案
评论
0/150
提交评论