Shell编程setstring 如此$*的值即为string,而分解後则会放入$n。如果set命令後面没有参数,则会列出所有已经设定的变数以及其值。 档名:ex1参数:thisisatest ┌———————————┐ │echoFilename:$0│ │echoArguments:$*│ │echoNo.ofargs.:$#│ │echo2ndarg.:$2│ │shift│ │echoNo.ofargs.:$#│ │echo2ndarg.:$2│ │sethello,everyone│ │echoArguments:$*│ │echo2ndarg.:$2│ └———————————┘ 结果如下: Filename:ex1 Arguments:thisisatest No.ofargs.:4 2ndarg.:is No.ofargs.:3 2ndarg.:a Arguments:hello,everyone 2ndarg.:everyone 值得一提的是,当你想从键盘输入一变数值时,你可以使用下面的命令: readvar1var2..... 这时read会将一个字分给一个变数。如果输入的字比变数还多,最後一个变数会将剩下的字当成其值。如果输入的字比变数还少,则後面的变数会设成空字串。如果需要处理数值运算,我们可以使用expr命令。其参数及输出列於附录A。 二、执行命令 在BourneShell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。 1.直接下命令 这个方式和在命令列中直接下命令的效果一样。 2.使用sh命令 shcommand 这个档案必须是BourneShell的Script,但这个档案并不一定要设成可执行。除此之外和直接下命令的方式一样。 3.使用"."命令 .command 这时和使用sh命令相似,只不过它不像sh一般会产生新的process,相反地,它会在原有的process下完成工作。 4.使用exec命令 execcommand 此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之後,这个Script也会随之结束。 5.使用命令替换 这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。我们将命令列於两个"`"号之间,而Shell会以这个命令执行後的输出结果代替这个命令以及两个"`"符号。 str='Currentdirectoryis'`pwd` echo$str 结果如下: Currentdirectoryis/users/cc/mgtsai 这个意思是pwd这个命令输出"/users/cc/mgtsai",而後整个字串代替原来的`pwd`设定str变数,所以str变数的内容则会有pwd命令的输出。 number=`expr$number 1` 这就是先前所提要作数值运算的方法,基本上expr命令只将运算式解,而後输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方式不可。这个例子是将number变数的值加1後再存回number变数。 三、流程控制 在介绍流程控制之前,我们先来看看test命令。test命令的参数是条件判断式,当条件为真时则传回非零值,而条件为伪时则传回零。在所有的流程控制都必须用到test命令来判断真伪。而test命令的使用方法则列於附录B。 test$#=0 如果执行这个程式没有参数时,会传回非零值代表"$#=0"这个条件成立。反之则会传回零。 以下介绍各种流程控制: 1.ifthen语法以及流程图如下 │FALSE if(condition)<condition>—┐ then│TRUE│ then-commandsthen-commands│ fi├————┘ │ condition是一个test命令。往後所介绍的各种流程中的condition都是test命令。 档名:chkarg ┌———————————┐ │if(test$#!=0)│ │then│ │echoArg1:$1│ │fi│ └———————————┘ $chkargHello Arg1:Hello $chkarg $ 2.ifthenelse语法以及流程图如下 │FALSE if(condition)<condition>—————┐ then│TRUE│ then-commandsthen-commandselse-commands else├————————┘ else-commands│ fi 3.ifthenelif语法以及流程图如下 │FALSE if(condition1)<condition1>—┐ then│TRUE│FALSE commands1commands1<condition2>—┐ elif(condition2)││TRUE│ then│commands2commands3 commands2├—————┴————┘ else│ commands3 commands3 fi echo'word1:\c' readword1 echo'word2:\c' readword2 echo'word3:\c' readword3 if(test"$word1"="$word2"-a"$word2"="$word3") then echo'Match:words1,2,&3' elif(test"$word1"="$word2") then echo'Match:words1&2' elif(test"$word1"="$word3") then echo'Match:words1&3' elif(test"$word2"="$word3") then echo'Match:words2&3' else echo'Nomatch' fi 4.forin语法以及流程图如下 │FALSE forvarinarg-list┌—<arg-list还有东西吗?>—┐ do││TRUE│ commands│从arg-list取得一项│ done│放到变数var│ │││ │commands│ └——————┘│ ┌———————————┐┌—————┘ │forainxxyyzz││ │do│ │echo$a│ │done│ └———————————┘ 结果如下: xx yy yy zz 5.for语法以及流程图如下 │FALSE forvar┌—<参数中还有东西吗?>—┐ do││TRUE│ commands│从参数中取得一项│ done│放到变数var│ │││ │commands│ └—————┘│ 档名:lstarg┌—————┘ ┌———————————┐│ │fora│ │do│ │echo$a│ │done│ └———————————┘ $lstargxxyyzz xx yy yy zz 6.while语法以及流程图如下 │FALSE while(condition)┌—<condition>—┐ do││TRUE│ commands│commands│ done└————┘│ ┌————┘ │ ┌———————————————┐ │number=0│ │while(test$number-lt10)│ │do│ │echo"$number\c"│ │number=`expr$number 1`│ │done│ │echo│ └———————————————┘ 结果如下: 0123456789 7.until语法以及流程图如下 │TRUE until(condition)┌—<condition>—┐ 上一篇:Bash中的特殊字符 下一篇:赶走一些你不希望进入的用户 更多相关文章
|
推荐文章
精彩文章
|