Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->Linux程序设计 ->正文

Shell编程

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-04 点击: [收藏] [投稿]

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中的特殊字符   下一篇:赶走一些你不希望进入的用户

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号