﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java 友人帮-文章分类-Linux shell 入门</title><link>http://www.blogjava.net/jzone/category/40638.html</link><description>java web, java wap ..My laboratory..</description><language>zh-cn</language><lastBuildDate>Sun, 29 Nov 2009 21:25:45 GMT</lastBuildDate><pubDate>Sun, 29 Nov 2009 21:25:45 GMT</pubDate><ttl>60</ttl><item><title>向脚本传递参数</title><link>http://www.blogjava.net/jzone/articles/304093.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304093.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/454595"></a>&nbsp;</h3>
<div class="blog_content"><strong><span style="font-size: medium">shift命令</span></strong> <br />
向脚本传递参数时，有时需要将每一个参数偏移以处理选项，这就是 shift命令的功能。它每次将参数位置向左偏移一位，下面用一段简单脚本详述其功能。脚本使用 while循环反馈所有传递到脚本的参数。使用shift命令来处理传递到脚本的每一个参数： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>loop=</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>while&nbsp;[&nbsp;$#&nbsp;-ne&nbsp;</span><span class="number">0</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>do&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;$</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;shift &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
loop=0
while [ $# -ne 0 ]
do
echo $1
shift
done
</pre>
<br />
使用shift处理文件大小写转换 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>!#/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;tr_case &nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;convert&nbsp;files&nbsp;to&nbsp;either&nbsp;&nbsp;upper&nbsp;or&nbsp;lower&nbsp;case &nbsp;&nbsp;</span></li>
    <li><span>FILES=</span><span class="string">""</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>TRCASE=</span><span class="string">""</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>EXT=</span><span class="string">""</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>OPT=no &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;gets&nbsp;called&nbsp;when&nbsp;a&nbsp;conversion&nbsp;fails &nbsp;&nbsp;</span></li>
    <li><span>error_msg() &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li><span>_FILENAME=$</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"`basename&nbsp;$0`:&nbsp;Error&nbsp;the&nbsp;conversion&nbsp;failed&nbsp;on&nbsp;$_FILENAME"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;$#&nbsp;-eq&nbsp;</span><span class="number">0</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>then&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"For&nbsp;more&nbsp;info&nbsp;try&nbsp;`basename&nbsp;$0`&nbsp;--help"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>while&nbsp;[&nbsp;$#&nbsp;-gt&nbsp;</span><span class="number">0</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;case&nbsp;$</span><span class="number">1</span><span>&nbsp;in &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;#set&nbsp;the&nbsp;variables&nbsp;based&nbsp;on&nbsp;what&nbsp;option&nbsp;was&nbsp;used &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;-u)TRCASE=upper &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXT=</span><span class="string">".UC"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPT=yes &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;-l)TRCASE=lower &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXT=</span><span class="string">".LC"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPT=yes &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;-help)&nbsp;echo&nbsp;</span><span class="string">"convert&nbsp;a&nbsp;file(s)&nbsp;to&nbsp;uppercase&nbsp;from&nbsp;lowercase"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"convert&nbsp;a&nbsp;file(s)&nbsp;from&nbsp;lowercase&nbsp;to&nbsp;uppercase"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"will&nbsp;convert&nbsp;all&nbsp;characters&nbsp;according&nbsp;to&nbsp;the&nbsp;sepcified&nbsp;command&nbsp;option."</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"where&nbsp;option&nbsp;is"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"-l&nbsp;Convert&nbsp;to&nbsp;lowercase"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"-u&nbsp;Convert&nbsp;to&nbsp;uppercase"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"The&nbsp;original&nbsp;file(s)&nbsp;is&nbsp;not&nbsp;touched.&nbsp;A&nbsp;new&nbsp;file(s)"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"will&nbsp;be&nbsp;created&nbsp;with&nbsp;either&nbsp;a&nbsp;.UC&nbsp;or&nbsp;.LC&nbsp;extension"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"usage:&nbsp;$0&nbsp;-[l|u]&nbsp;file&nbsp;[file..]"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;-*)&nbsp;echo&nbsp;</span><span class="string">"usage:&nbsp;`basename&nbsp;$0`&nbsp;-[l|u]&nbsp;file&nbsp;[file..]"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*)&nbsp;#&nbsp;collect&nbsp;the&nbsp;files&nbsp;to&nbsp;process &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;-f&nbsp;$</span><span class="number">1</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;add&nbsp;the&nbsp;filenames&nbsp;to&nbsp;a&nbsp;variable&nbsp;list &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILES=$FILES</span><span class="string">"&nbsp;"</span><span>$</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`&nbsp;:&nbsp;Error&nbsp;cannot&nbsp;find&nbsp;the&nbsp;file&nbsp;$1"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$OPT"</span><span>&nbsp;=&nbsp;</span><span class="string">"no"</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`:&nbsp;Error&nbsp;you&nbsp;need&nbsp;to&nbsp;specify&nbsp;an&nbsp;option.&nbsp;No&nbsp;action&nbsp;taken"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"`basename`&nbsp;--help"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;now&nbsp;read&nbsp;in&nbsp;all&nbsp;the&nbsp;file(s) &nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;use&nbsp;the&nbsp;variable&nbsp;LOOP,&nbsp;I&nbsp;just&nbsp;love&nbsp;the&nbsp;word&nbsp;LOOP &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;LOOP&nbsp;in&nbsp;$FILES &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;case&nbsp;$TRCASE&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;lower)&nbsp;cat&nbsp;$LOOP|tr&nbsp;</span><span class="string">"[a-z]"</span><span>&nbsp;</span><span class="string">"[A-Z]"</span><span>&nbsp;&gt;$LOOP$EXT &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;$?&nbsp;!=&nbsp;</span><span class="number">0</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_msg&nbsp;$LOOP &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"Converted&nbsp;file&nbsp;called&nbsp;$LOOP$EXT"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;upper)&nbsp;cat&nbsp;$LOOP|tr&nbsp;</span><span class="string">"[A-Z]"</span><span>&nbsp;</span><span class="string">"[a-z]"</span><span>&nbsp;&gt;&nbsp;$LOOP$EXT &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;$?&nbsp;!=&nbsp;</span><span class="number">0</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_msg&nbsp;$LOOP &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"Converted&nbsp;file&nbsp;called&nbsp;$LOOP$EXT"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">!#/bin/sh
# tr_case
# convert files to either  upper or lower case
FILES=""
TRCASE=""
EXT=""
OPT=no
# gets called when a conversion fails
error_msg()
{
_FILENAME=$1
echo "`basename $0`: Error the conversion failed on $_FILENAME"
}
if [ $# -eq 0 ]
then
echo "For more info try `basename $0` --help"
exit 1
fi
while [ $# -gt 0 ]
do
case $1 in
#set the variables based on what option was used
-u)TRCASE=upper
EXT=".UC"
OPT=yes
shift
;;
-l)TRCASE=lower
EXT=".LC"
OPT=yes
shift
;;
-help) echo "convert a file(s) to uppercase from lowercase"
echo "convert a file(s) from lowercase to uppercase"
echo "will convert all characters according to the sepcified command option."
echo "where option is"
echo "-l Convert to lowercase"
echo "-u Convert to uppercase"
echo "The original file(s) is not touched. A new file(s)"
echo "will be created with either a .UC or .LC extension"
echo "usage: $0 -[l|u] file [file..]"
exit 0
;;
-*) echo "usage: `basename $0` -[l|u] file [file..]"
exit 1
;;
*) # collect the files to process
if [ -f $1 ]
then
# add the filenames to a variable list
FILES=$FILES" "$1
else
echo "`basename $0` : Error cannot find the file $1"
fi
shift
;;
esac
done
if [ "$OPT" = "no" ]
then
echo "`basename $0`: Error you need to specify an option. No action taken"
echo "`basename` --help"
exit 1
fi
# now read in all the file(s)
# use the variable LOOP, I just love the word LOOP
for LOOP in $FILES
do
case $TRCASE in
lower) cat $LOOP|tr "[a-z]" "[A-Z]" &gt;$LOOP$EXT
if [ $? != 0 ]
then
error_msg $LOOP
else
echo "Converted file called $LOOP$EXT"
fi
;;
upper) cat $LOOP|tr "[A-Z]" "[a-z]" &gt; $LOOP$EXT
if [ $? != 0 ]
then
error_msg $LOOP
else
echo "Converted file called $LOOP$EXT"
fi
;;
esac
done
</pre>
<br />
<strong><span style="font-size: medium">getopts命令</span></strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#getopts1 &nbsp;&nbsp;</span></li>
    <li><span>#set&nbsp;the&nbsp;vars &nbsp;&nbsp;</span></li>
    <li><span>ALL=false &nbsp;&nbsp;</span></li>
    <li><span>HELP=false &nbsp;&nbsp;</span></li>
    <li><span>FILE=false &nbsp;&nbsp;</span></li>
    <li><span>VERBROSE=false &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>while&nbsp;getopts&nbsp;ahfgv&nbsp;OPTION &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;case&nbsp;$OPTION&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;a)ALL=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"ALL&nbsp;is&nbsp;$ALL"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;h)HELP=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"HELP&nbsp;is&nbsp;$HELP"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;f)FILE=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"FILE&nbsp;is&nbsp;$FILE"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;v)VERBOSE=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"VERROSE&nbsp;is&nbsp;$VERROSE"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#getopts1
#set the vars
ALL=false
HELP=false
FILE=false
VERBROSE=false
while getopts ahfgv OPTION
do
case $OPTION in
a)ALL=true
echo "ALL is $ALL"
;;
h)HELP=true
echo "HELP is $HELP"
;;
f)FILE=true
echo "FILE is $FILE"
;;
v)VERBOSE=true
echo "VERROSE is $VERROSE"
;;
esac
done
</pre>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/getopts&nbsp;&gt;getopts1&nbsp;-a &nbsp;&nbsp;</span></span></li>
    <li><span>ALL&nbsp;is&nbsp;true &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/getopts&nbsp;&gt;getopts1&nbsp;-v &nbsp;&nbsp;</span></li>
    <li><span>VERROSE&nbsp;is &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/getopts&nbsp;&gt;getopts1&nbsp;-v&nbsp;-a&nbsp;-h &nbsp;&nbsp;</span></li>
    <li><span>VERROSE&nbsp;is &nbsp;&nbsp;</span></li>
    <li><span>ALL&nbsp;is&nbsp;true &nbsp;&nbsp;</span></li>
    <li><span>HELP&nbsp;is&nbsp;true&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/getopts &gt;getopts1 -a
ALL is true
/home/l/g/tomotoboy/getopts &gt;getopts1 -v
VERROSE is
/home/l/g/tomotoboy/getopts &gt;getopts1 -v -a -h
VERROSE is
ALL is true
HELP is true
</pre>
getopts一般格式为： <br />
getopts&nbsp; option_string variable <br />
在上述例子中使用脚本： <br />
while getopts ahfgv OPTION <br />
可以看出while循环用于读取命令行，option_string为指定的5个选项（- a，- h，- f，- g，- v）,脚本中variable为OPTION。注意这里并没有用连字符指定每一单个选项。 <br />
<br />
<strong>使用getopts指定变量取值</strong> <br />
有时有必要在脚本中指定命令行选项取值。getopts为此提供了一种方式，即在option_string中将一个冒号放在选项后。例如： <br />
getopts ahfvc: OPTION <br />
上面一行脚本指出，选项 a、h、f、v可以不加实际值进行传递，而选项 c必须取值。使用选项取值时，必须使用变量 OPTARG保存该值。如果试图不取值传递此选项，会返回一个错误信息。错误信息提示并不明确，因此可以用自己的反馈信息屏蔽它，方法如下： <br />
将冒号放在option_string开始部分。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>while&nbsp;getopts&nbsp;:ahfgvc:&nbsp;&nbsp;OPTION&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">while getopts :ahfgvc:  OPTION</pre>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#getopts1 &nbsp;&nbsp;</span></li>
    <li><span>#set&nbsp;the&nbsp;vars &nbsp;&nbsp;</span></li>
    <li><span>ALL=false &nbsp;&nbsp;</span></li>
    <li><span>HELP=false &nbsp;&nbsp;</span></li>
    <li><span>FILE=false &nbsp;&nbsp;</span></li>
    <li><span>VERBROSE=false &nbsp;&nbsp;</span></li>
    <li><span>COPIES=</span><span class="number">0</span><span>&nbsp;#the&nbsp;value&nbsp;for&nbsp;the&nbsp;-c&nbsp;option&nbsp;is&nbsp;set&nbsp;to&nbsp;zero &nbsp;&nbsp;</span></span></li>
    <li><span>while&nbsp;getopts&nbsp;:ahfgvc:&nbsp;OPTION &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;case&nbsp;$OPTION&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;a)ALL=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"ALL&nbsp;is&nbsp;$ALL"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;h)HELP=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"HELP&nbsp;is&nbsp;$HELP"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;f)FILE=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"FILE&nbsp;is&nbsp;$FILE"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;v)VERBOSE=true &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"VERROSE&nbsp;is&nbsp;$VERROSE"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;c)COPIES=$OPTARG &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"COPIES&nbsp;is&nbsp;$COPIES"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;\?)&nbsp;#usage&nbsp;stagement &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`&nbsp;-[a&nbsp;h&nbsp;f&nbsp;v]&nbsp;-[c&nbsp;value]&nbsp;file"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#getopts1
#set the vars
ALL=false
HELP=false
FILE=false
VERBROSE=false
COPIES=0 #the value for the -c option is set to zero
while getopts :ahfgvc: OPTION
do
case $OPTION in
a)ALL=true
echo "ALL is $ALL"
;;
h)HELP=true
echo "HELP is $HELP"
;;
f)FILE=true
echo "FILE is $FILE"
;;
v)VERBOSE=true
echo "VERROSE is $VERROSE"
;;
c)COPIES=$OPTARG
echo "COPIES is $COPIES"
;;
\?) #usage stagement
echo "`basename $0` -[a h f v] -[c value] file" &gt;&amp;2
;;
esac
done  </pre>
<br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/getopts&nbsp;&gt;chmod&nbsp;</span><span class="number">755</span><span>&nbsp;getopts2 &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy/getopts&nbsp;&gt;getopts2&nbsp;-c&nbsp;hello &nbsp;&nbsp;</span></li>
    <li><span>COPIES&nbsp;is&nbsp;hello &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/getopts&nbsp;&gt;getopts2&nbsp;-h&nbsp;-c&nbsp;hello &nbsp;&nbsp;</span></li>
    <li><span>HELP&nbsp;is&nbsp;true &nbsp;&nbsp;</span></li>
    <li><span>COPIES&nbsp;is&nbsp;hello&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/getopts &gt;chmod 755 getopts2
/home/l/g/tomotoboy/getopts &gt;getopts2 -c hello
COPIES is hello
/home/l/g/tomotoboy/getopts &gt;getopts2 -h -c hello
HELP is true
COPIES is hello</pre>
<br />
<br />
<strong>访问取值方式</strong> <br />
getopts的一种功能是运行后台脚本。这样可以使用户加入选项，指定不同的磁带设备以备份数据。使用getopts实现此任务的基本框架如下： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/454595#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>QUITE=n &nbsp;&nbsp;</span></li>
    <li><span>DEVICE=awa &nbsp;&nbsp;</span></li>
    <li><span>LOGFILE=/tmp/logbackup &nbsp;&nbsp;</span></li>
    <li><span>usage() &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"Usage:&nbsp;`basename&nbsp;$0`&nbsp;-d&nbsp;[device]&nbsp;-l&nbsp;[logfile]&nbsp;-q"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;$#&nbsp;=&nbsp;</span><span class="number">0</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>then&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;usage &nbsp;&nbsp;</span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>while&nbsp;getopts&nbsp;:qd:l:&nbsp;OPTION &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;case&nbsp;$OPTION&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;q)&nbsp;QUIET=y &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOGFILE=</span><span class="string">"/tmp/backup.log"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;d)&nbsp;DEVICE=$OPTARG &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;l)&nbsp;LOGFILE=$OPTARG&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;\?)usage &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"you&nbsp;chose&nbsp;the&nbsp;following&nbsp;options...I&nbsp;can&nbsp;now&nbsp;process&nbsp;these"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"Quite&nbsp;=&nbsp;$QUIET&nbsp;$DEVICE&nbsp;$LOGFILE"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:10 <a href="http://www.blogjava.net/jzone/articles/304093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell函数</title><link>http://www.blogjava.net/jzone/articles/304092.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304092.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/443500"></a>&nbsp;</h3>
<div class="blog_content">函数由两部分组成： <br />
<ul>
    <li>函数标题。
    <li>函数体。 </li>
</ul>
<br />
标题是函数名。函数体是函数内的命令集合。标题名应该唯一；如果不是，将会混淆结，因为脚本在查看调用脚本前将首先搜索函数调用相应的 s h e l l。 <br />
定义函数的格式为： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>函数名（） &nbsp;&nbsp;</span></span></li>
    <li><span>{&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>命令</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>.&nbsp;.&nbsp;. &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li><span>或者 &nbsp;&nbsp;</span></li>
    <li><span>function&nbsp;函数名（） &nbsp;&nbsp;</span></li>
    <li><span>{&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">函数名（）
{
命令1
. . .
}
或者
function 函数名（）
{   ...
}</pre>
<br />
<br />
两者方式都可行。如果愿意，可在函数名前加上关键字function，这取决于使用者。 <br />
<br />
创建函数文件 <br />
下面创建包容函数的函数文件并将之载入shell，进行测试，再做改动，之后再重新载入。 <br />
函数文件名为functions.main，内容如下 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#functions.main &nbsp;&nbsp;</span></li>
    <li><span># &nbsp;&nbsp;</span></li>
    <li><span>#findit:&nbsp;this&nbsp;is&nbsp;front&nbsp;end&nbsp;for&nbsp;the&nbsp;basic&nbsp;find&nbsp;command &nbsp;&nbsp;</span></li>
    <li><span>findit()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>#findit &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;$#&nbsp;-lt&nbsp;</span><span class="number">1</span><span>&nbsp;];&nbsp;then &nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"usage&nbsp;:&nbsp;findit&nbsp;file"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>return&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>find&nbsp;.&nbsp;-name&nbsp;$</span><span class="number">1</span><span>&nbsp;-print &nbsp;&nbsp;</span></span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#functions.main
#
#findit: this is front end for the basic find command
findit() {
#findit
if [ $# -lt 1 ]; then
echo "usage : findit file"
return 1;
fi
find . -name $1 -print
}</pre>
定位文件 <br />
定位文件格式为： <br />
. /pahname/filename <br />
现在文件已经创建好了，要将之载入shell，试键入： <br />
$. functions.main <br />
如果返回信息file not found，再试： <br />
$. /functions.main <br />
此即&lt;点&gt; &lt;空格&gt; &lt;斜线&gt; &lt;文件名&gt;，现在文件应该已载入shell。如果仍有错误，则应该仔细检查是否键入了完整路径名 <br />
<br />
检查载入函数 <br />
使用set命令确保函数已载入。set命令将在shell中显示所有的载入函数。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/function&nbsp;&gt;.&nbsp;function.main &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy/function&nbsp;&gt;set &nbsp;&nbsp;</span></li>
    <li><span>&#8230;&#8230; &nbsp;&nbsp;</span></li>
    <li><span>_=function.main &nbsp;&nbsp;</span></li>
    <li><span>findit&nbsp;() &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;$#&nbsp;-lt&nbsp;</span><span class="number">1</span><span>&nbsp;];&nbsp;then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"usage&nbsp;:&nbsp;findit&nbsp;file"</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;fi; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;.&nbsp;-name&nbsp;$</span><span class="number">1</span><span>&nbsp;-print &nbsp;&nbsp;</span></span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/function &gt;. function.main
/home/l/g/tomotoboy/function &gt;set
&#8230;&#8230;
_=function.main
findit ()
{
if [ $# -lt 1 ]; then
echo "usage : findit file";
return 1;
fi;
find . -name $1 -print
}</pre>
执行shell函数 <br />
要执行函数，简单地键入函数名即可。这里是带有一个参数的 findit函数，参数是某个文件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/function&nbsp;&gt;cd&nbsp;. &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy/function&nbsp;&gt;cd&nbsp;.. &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;findit&nbsp;sed.txt &nbsp;&nbsp;</span></li>
    <li><span>./testdirec/sed.txt &nbsp;&nbsp;</span></li>
    <li><span>./sed.txt&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/function &gt;cd .
/home/l/g/tomotoboy/function &gt;cd ..
/home/l/g/tomotoboy &gt;findit sed.txt
./testdirec/sed.txt
./sed.txt</pre>
<br />
<br />
删除shell函数 <br />
现在对函数做一些改动。首先删除函数，使其对shell不可利用。使用unset命令完成此功能。删除函数时unset命令格式为： <br />
unset&nbsp; function_name <br />
$unset findit <br />
如果现在键入set命令，函数将不再显示。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;unset&nbsp;findit &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;set &nbsp;&nbsp;</span></li>
    <li><span>&#8230;&#8230; &nbsp;&nbsp;</span></li>
    <li><span>_=findit &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;findit&nbsp;sed.txt &nbsp;&nbsp;</span></li>
    <li><span>-bash:&nbsp;findit:&nbsp;command&nbsp;not&nbsp;found&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;unset findit
/home/l/g/tomotoboy &gt;set
&#8230;&#8230;
_=findit
/home/l/g/tomotoboy &gt;findit sed.txt
-bash: findit: command not found</pre>
<br />
<br />
再次定位函数 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;.&nbsp;function/function.main &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;findit&nbsp;sed.txt &nbsp;&nbsp;</span></li>
    <li><span>./testdirec/sed.txt &nbsp;&nbsp;</span></li>
    <li><span>./sed.txt&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;. function/function.main
/home/l/g/tomotoboy &gt;findit sed.txt
./testdirec/sed.txt
./sed.txt</pre>
<br />
如果函数将从测试结果中反馈输出，那么使用替换命令可保存结果。函数调用的替换格式为： <br />
variable_name = variable_name <br />
函数function_name输出被设置到变量variable_name中。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>char_name(){ &nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;char_name &nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;to&nbsp;call:&nbsp;char_name&nbsp;string &nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;assign&nbsp;the&nbsp;argument&nbsp;across&nbsp;to&nbsp;new&nbsp;variable &nbsp;&nbsp;</span></li>
    <li><span>_LETTER_ONLY=$</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;user&nbsp;awk&nbsp;to&nbsp;test&nbsp;for&nbsp;character&nbsp;only! &nbsp;&nbsp;</span></li>
    <li><span>_LETTER_ONLY=`echo&nbsp;$</span><span class="number">1</span><span>|awk&nbsp;</span><span class="string">'{if&nbsp;($0~/[^a-z&nbsp;A-Z]/)&nbsp;print&nbsp;1}'</span><span>` &nbsp;&nbsp;</span></span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$_LETTER_ONLY"</span><span>&nbsp;!=&nbsp;</span><span class="string">""</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;oops&nbsp;&nbsp;errors &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;constains&nbsp;only&nbsp;chars &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">char_name(){
# char_name
# to call: char_name string
# assign the argument across to new variable
_LETTER_ONLY=$1
# user awk to test for character only!
_LETTER_ONLY=`echo $1|awk '{if ($0~/[^a-z A-Z]/) print 1}'`
if [ "$_LETTER_ONLY" != "" ]
then
# oops  errors
return 1
else
# constains only chars
return 0
fi
}</pre>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>if&nbsp;char_name&nbsp;$F_NAME;&nbsp;then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"OK"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"ERROR"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">if char_name $F_NAME; then
echo "OK"
else
echo "ERROR"
fi</pre>
测试一下 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443500#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/function&nbsp;&gt;char_name&nbsp;hello &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy/function&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/function &gt;char_name hello
/home/l/g/tomotoboy/function &gt;echo $?
0</pre>
注意^符号的使用，当直接用在第一个括号里，意指否定或不匹配括号里内容。[^a-z A-Z] 匹配任一非字母型字符，而[^0-9]匹配任一非数字型字符。 <br />
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:09 <a href="http://www.blogjava.net/jzone/articles/304092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>后台执行命令——守护进程创建</title><link>http://www.blogjava.net/jzone/articles/304091.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304091.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/443392"></a>&nbsp;</h3>
<div class="blog_content">当你在终端或控制台工作时，可能不希望由于运行一个作业而占住了屏幕，因为可能还有更重要的事情要做，比如阅读电子邮件。对于密集访问磁盘的进程，你可能希望它能够在每天的非负荷高峰时间段运行。为了使这些进程能够在后台运行，也就是说不在终端屏幕上运行，有几种选择方法可供使用： <br />
<ul>
    <li>设置crontab文件，并用它来提交作业。
    <li>使用at命令来提交作业。
    <li>在后台提交作业。
    <li>使用nohup命令提交作业。 </li>
</ul>
<br />
名词解释： <br />
<ul>
    <li>cron系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业，或在一周或一月中的不同时段运行。
    <li>at命令。使用它在一个特定的时间运行一些特殊的作业，或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。
    <li>&amp; 使用它在后台运行一个占用时间不长的进程。
    <li>Nohup 使用它在后台运行一个命令，即使在用户退出时也不受影响。 </li>
</ul>
<br />
一个举一个例子 <br />
<strong>crontab</strong> <br />
用crontab提交一个任务在每天晚上7点对zhangwanzhi说i love you <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;touch&nbsp;tomotoboycron &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;&gt;&nbsp;tomotoboycron &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;</span><span class="number">19</span><span>&nbsp;*&nbsp;*&nbsp;*&nbsp;echo&nbsp;</span><span class="string">"I&nbsp;love&nbsp;zhangwanzhi"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;crontab&nbsp;tomotoboycron &nbsp;&nbsp;</span></li>
    <li><span>cron&nbsp;may&nbsp;not&nbsp;be&nbsp;running&nbsp;-&nbsp;call&nbsp;your&nbsp;system&nbsp;administrator &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;crontab&nbsp;-l &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;</span><span class="number">19</span><span>&nbsp;*&nbsp;*&nbsp;*&nbsp;echo&nbsp;</span><span class="string">"I&nbsp;love&nbsp;zhangwanzhi"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;touch tomotoboycron
/home/l/g/tomotoboy &gt;cat &gt; tomotoboycron
0 19 * * * echo "I love zhangwanzhi"
/home/l/g/tomotoboy &gt;crontab tomotoboycron
cron may not be running - call your system administrator
/home/l/g/tomotoboy &gt;crontab -l
0 19 * * * echo "I love zhangwanzhi"</pre>
<br />
<br />
删除crontab 文件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;crontab&nbsp;-r &nbsp;&nbsp;</span></span></li>
    <li><span>cron&nbsp;may&nbsp;not&nbsp;be&nbsp;running&nbsp;-&nbsp;call&nbsp;your&nbsp;system&nbsp;administrator &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;crontab&nbsp;-l &nbsp;&nbsp;</span></li>
    <li><span>crontab:&nbsp;can't&nbsp;open&nbsp;your&nbsp;crontab&nbsp;file.&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;crontab -r
cron may not be running - call your system administrator
/home/l/g/tomotoboy &gt;crontab -l
crontab: can't open your crontab file.</pre>
<br />
<br />
恢复丢失的crontab文件 <br />
如果不小心误删了crontab文件，假设你在自己的$HOME目录下还有一个备份，那么可以将其拷贝到/var/spool/cron/&lt;username &gt;，其中&lt;username&gt;是用户名。如果由于权限问题无法完成拷贝，可以用： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>$&nbsp;crontab&nbsp;&lt;filename&gt;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">$ crontab &lt;filename&gt;</pre>
<br />
现在我们来恢复tomotoboycron <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;crontab&nbsp;tomotoboycron &nbsp;&nbsp;</span></span></li>
    <li><span>cron&nbsp;may&nbsp;not&nbsp;be&nbsp;running&nbsp;-&nbsp;call&nbsp;your&nbsp;system&nbsp;administrator &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;crontab&nbsp;-l &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;</span><span class="number">19</span><span>&nbsp;*&nbsp;*&nbsp;*&nbsp;echo&nbsp;</span><span class="string">"I&nbsp;love&nbsp;zhangwanzhi"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;crontab tomotoboycron
cron may not be running - call your system administrator
/home/l/g/tomotoboy &gt;crontab -l
0 19 * * * echo "I love zhangwanzhi"</pre>
<br />
<strong>at</strong> <br />
在命令提交一分钟后执行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;ls&nbsp;-l|grep&nbsp;</span><span class="string">"tomotoboy"</span><span>|at&nbsp;now&nbsp;+</span><span class="number">1</span><span>&nbsp;minute &nbsp;&nbsp;</span></span></li>
    <li><span>cron&nbsp;may&nbsp;not&nbsp;be&nbsp;running&nbsp;-&nbsp;call&nbsp;your&nbsp;system&nbsp;administrator &nbsp;&nbsp;</span></li>
    <li><span>commands&nbsp;will&nbsp;be&nbsp;executed&nbsp;using&nbsp;/bin/bash &nbsp;&nbsp;</span></li>
    <li><span>job&nbsp;</span><span class="number">1249815115</span><span>.a&nbsp;at&nbsp;Sun&nbsp;Aug&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;</span><span class="number">18</span><span>:</span><span class="number">51</span><span>:</span><span class="number">55</span><span>&nbsp;</span><span class="number">2009</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;ls -l|grep "tomotoboy"|at now +1 minute
cron may not be running - call your system administrator
commands will be executed using /bin/bash
job 1249815115.a at Sun Aug  9 18:51:55 2009</pre>
<br />
<br />
列出已经提交的at任务： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;at&nbsp;-l &nbsp;&nbsp;</span></span></li>
    <li><span class="number">1249815115</span><span>.a&nbsp;&nbsp;&nbsp;&nbsp;Sun&nbsp;Aug&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;</span><span class="number">18</span><span>:</span><span class="number">51</span><span>:</span><span class="number">55</span><span>&nbsp;</span><span class="number">2009</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">1249813233</span><span>.a&nbsp;&nbsp;&nbsp;&nbsp;Sun&nbsp;Aug&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;</span><span class="number">18</span><span>:</span><span class="number">20</span><span>:</span><span class="number">33</span><span>&nbsp;</span><span class="number">2009</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">1249813261</span><span>.a&nbsp;&nbsp;&nbsp;&nbsp;Sun&nbsp;Aug&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;</span><span class="number">18</span><span>:</span><span class="number">21</span><span>:</span><span class="number">01</span><span>&nbsp;</span><span class="number">2009</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;at -l
1249815115.a    Sun Aug  9 18:51:55 2009
1249813233.a    Sun Aug  9 18:20:33 2009
1249813261.a    Sun Aug  9 18:21:01 2009</pre>
<br />
<br />
使用atrm删除一个任务： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;atrm&nbsp;</span><span class="number">1249815115</span><span>.a &nbsp;&nbsp;</span></span></li>
    <li><span>cron&nbsp;may&nbsp;not&nbsp;be&nbsp;running&nbsp;-&nbsp;call&nbsp;your&nbsp;system&nbsp;administrator &nbsp;&nbsp;</span></li>
    <li><span class="number">1249815115</span><span>.a:&nbsp;removed &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;at&nbsp;-l &nbsp;&nbsp;</span></li>
    <li><span class="number">1249813233</span><span>.a&nbsp;&nbsp;&nbsp;&nbsp;Sun&nbsp;Aug&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;</span><span class="number">18</span><span>:</span><span class="number">20</span><span>:</span><span class="number">33</span><span>&nbsp;</span><span class="number">2009</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">1249813261</span><span>.a&nbsp;&nbsp;&nbsp;&nbsp;Sun&nbsp;Aug&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;</span><span class="number">18</span><span>:</span><span class="number">21</span><span>:</span><span class="number">01</span><span>&nbsp;</span><span class="number">2009</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;atrm 1249815115.a
cron may not be running - call your system administrator
1249815115.a: removed
/home/l/g/tomotoboy &gt;at -l
1249813233.a    Sun Aug  9 18:20:33 2009
1249813261.a    Sun Aug  9 18:21:01 2009</pre>
<br />
<br />
<strong>&amp;和nohup</strong> <br />
在后台运行echo "I love you zhangwanzhi" ，用户退出时不终止： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/443392#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;nohup&nbsp;echo&nbsp;</span><span class="string">"I&nbsp;love&nbsp;you&nbsp;zhangwanzhi"</span><span>&nbsp;&amp; &nbsp;&nbsp;</span></span></li>
    <li><span>[</span><span class="number">1</span><span>]&nbsp;</span><span class="number">20784</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;Sending&nbsp;output&nbsp;to&nbsp;nohup.out &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;nohup.out &nbsp;&nbsp;</span></li>
    <li><span>Ilove&nbsp;you&nbsp;zhangwanzhi&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:08 <a href="http://www.blogjava.net/jzone/articles/304091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>控制流结构——until、while、break、continue</title><link>http://www.blogjava.net/jzone/articles/304090.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304090.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/442996"></a>&nbsp;</h3>
<div class="blog_content"><span style="font-size: medium"><strong>until循环</strong></span> <br />
条件中1为真，0为假 <br />
until循环执行一系列命令直至条件为真时停止。 until循环与while循环在处理方式上刚好相反。一般while循环优于until循环，但在某些时候—也只是极少数情况下，until循环更加有用。 <br />
until循环格式为： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>until&nbsp;&nbsp;条件 &nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;命令</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;.&nbsp;. &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">until  条件
do
命令1
. . .
done</pre>
条件可为任意测试条件，测试发生在循环末尾，因此循环至少执行一次—请注意这一点 <br />
监视文件 <br />
下面例子中，until循环不断挂起做睡眠，直至文件process.LCK 被删除。文件删除后，脚本进入正常处理过程。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/until&nbsp;&gt;ls &nbsp;&nbsp;</span></span></li>
    <li><span>until_lck&nbsp;&nbsp;untilwho &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;[&nbsp;-f&nbsp;untilwho&nbsp;] &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;[&nbsp;!&nbsp;-f&nbsp;untilwho&nbsp;] &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span></li>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;rm&nbsp;untilwho &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;[&nbsp;!&nbsp;-f&nbsp;untilwho&nbsp;] &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/until&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#until_lck &nbsp;&nbsp;</span></li>
    <li><span>touch&nbsp;`pwd`/process.LCK &nbsp;&nbsp;</span></li>
    <li><span>LOCK_FILE=`pwd`/process.LCK &nbsp;&nbsp;</span></li>
    <li><span>until&nbsp;[&nbsp;!&nbsp;-f&nbsp;$LOCK_FILE&nbsp;] &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"file&nbsp;deleted"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/until &gt;ls
until_lck  untilwho
/home/l/g/tomotoboy/until &gt;[ -f untilwho ]
/home/l/g/tomotoboy/until &gt;echo $?
0
/home/l/g/tomotoboy/until &gt;[ ! -f untilwho ]
/home/l/g/tomotoboy/until &gt;echo $?
1
/home/l/g/tomotoboy/until &gt;rm untilwho
/home/l/g/tomotoboy/until &gt;[ ! -f untilwho ]
/home/l/g/tomotoboy/until &gt;echo $?
0
#!/bin/sh
#until_lck
touch `pwd`/process.LCK
LOCK_FILE=`pwd`/process.LCK
until [ ! -f $LOCK_FILE ]
do
sleep 1
done
echo "file deleted"</pre>
<br />
查找tomotoboy有没有登录，登陆后给自己发个邮件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/until&nbsp;&gt;cat&nbsp;untilwho &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#until_who &nbsp;&nbsp;</span></li>
    <li><span>IS_TOMOTOBOY=`who&nbsp;|&nbsp;grep&nbsp;tomotoboy` &nbsp;&nbsp;</span></li>
    <li><span>until&nbsp;[&nbsp;&nbsp;</span><span class="string">"$IS_TOMOTOBOY"</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;</span><span class="number">5</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"Wtch&nbsp;it.&nbsp;tomotoboy&nbsp;in&nbsp;"</span><span>&nbsp;|&nbsp;mail&nbsp;tomotoboy&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/until &gt;cat untilwho
#!/bin/sh
#until_who
IS_TOMOTOBOY=`who | grep tomotoboy`
until [  "$IS_TOMOTOBOY" ]
do
sleep 5
done
echo "Wtch it. tomotoboy in " | mail tomotoboy</pre>
<br />
<strong><span style="font-size: medium">while循环</span></strong> <br />
while循环用于不断执行一系列命令，也用于从输入文件中读取数据，其格式为： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>while&nbsp;&nbsp;命令 &nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>命令</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>命令</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>.&nbsp;.&nbsp;. &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">while  命令
do
命令1
命令2
. . .
done</pre>
虽然通常只使用一个命令，但在 while和do之间可以放几个命令。命令通常用作测试条件。只有当命令的退出状态为 0时，do和done之间命令才被执行，如果退出状态不是 0，则循环终止。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#whilecount &nbsp;&nbsp;</span></li>
    <li><span>COUNT=</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>while&nbsp;[&nbsp;$COUNT&nbsp;-lt&nbsp;</span><span class="number">5</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"$COUNT"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;COUNT=`expr&nbsp;$COUNT&nbsp;+&nbsp;</span><span class="number">1</span><span>` &nbsp;&nbsp;</span></span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;whilecount &nbsp;&nbsp;</span></li>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">3</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#whilecount
COUNT=0
while [ $COUNT -lt 5 ]
do
echo "$COUNT"
COUNT=`expr $COUNT + 1`
done
/home/l/g/tomotoboy &gt;whilecount
0
1
2
3
4</pre>
<br />
读文件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#whileread &nbsp;&nbsp;</span></li>
    <li><span>while&nbsp;read&nbsp;LINE &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"$LINE"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>done&nbsp;&lt;&nbsp;sed.txt&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#whileread
while read LINE
do
echo "$LINE"
done &lt; sed.txt</pre>
<br />
<br />
<br />
<strong><span style="font-size: medium">break</span></strong> <br />
break命令允许跳出循环。break通常在进行一些处理后退出循环或 case语句。如果是在一个嵌入循环里，可以指定跳出的循环个数。例如如果在两层循环内，用 break刚好跳出整个循环。 <br />
跳出case语句 <br />
下面的例子中，脚本进入死循环直至用户输入数字大于 5。要跳出这个循环，返回到shell提示符下，break使用脚本如下： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#breakout &nbsp;&nbsp;</span></li>
    <li><span>#while&nbsp;:&nbsp;means&nbsp;loop&nbsp;forever &nbsp;&nbsp;</span></li>
    <li><span>while&nbsp;: &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;-n&nbsp;</span><span class="string">"Enter&nbsp;any&nbsp;number&nbsp;[1..5]:&nbsp;"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;read&nbsp;ANS &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;case&nbsp;$ANS&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>|</span><span class="number">2</span><span>|</span><span class="number">3</span><span>|</span><span class="number">4</span><span>|</span><span class="number">5</span><span>)&nbsp;echo&nbsp;</span><span class="string">"&nbsp;great&nbsp;you&nbsp;entered&nbsp;a&nbsp;number&nbsp;between&nbsp;1&nbsp;and&nbsp;5"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;*)echo&nbsp;</span><span class="string">"Wrong&nbsp;number..bye"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;break &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#breakout
#while : means loop forever
while :
do
echo -n "Enter any number [1..5]: "
read ANS
case $ANS in
1|2|3|4|5) echo " great you entered a number between 1 and 5"
;;
*)echo "Wrong number..bye"
break
;;
esac
done</pre>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442996#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;breakout &nbsp;&nbsp;</span></span></li>
    <li><span>-n&nbsp;Enter&nbsp;any&nbsp;number&nbsp;[</span><span class="number">1</span><span>..</span><span class="number">5</span><span>]: &nbsp;&nbsp;</span></span></li>
    <li><span class="number">3</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;great&nbsp;you&nbsp;entered&nbsp;a&nbsp;number&nbsp;between&nbsp;</span><span class="number">1</span><span>&nbsp;and&nbsp;</span><span class="number">5</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>-n&nbsp;Enter&nbsp;any&nbsp;number&nbsp;[</span><span class="number">1</span><span>..</span><span class="number">5</span><span>]: &nbsp;&nbsp;</span></span></li>
    <li><span class="number">6</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>Wrong&nbsp;number..bye&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;breakout
-n Enter any number [1..5]:
3
great you entered a number between 1 and 5
-n Enter any number [1..5]:
6
Wrong number..bye</pre>
<br />
<strong><span style="font-size: medium">continue</span></strong> <br />
continue命令类似于break命令，只有一点重要差别，它不会跳出循环，只是跳过这个循环步。 <br />
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:07 <a href="http://www.blogjava.net/jzone/articles/304090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>控制流结构——for</title><link>http://www.blogjava.net/jzone/articles/304089.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304089.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/442865"></a>&nbsp;</h3>
<div class="blog_content">for循环 <br />
for 变量名 in 列表 <br />
do <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令 1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令 2 <br />
done <br />
当变量值在列表里，for循环即执行一次所有命令，使用变量名访问列表中取值。命令可为任何有效的shell命令和语句。变量名为任何单词。in列表用法是可选的，如果不用它， for循环使用命令行的位置参数。in列表可以包含替换、字符串和文件名，下面看一些例子。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442865#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy/for&nbsp;&gt;cat&nbsp;fortest &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#for_i &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;loop&nbsp;in&nbsp;</span><span class="number">1</span><span>&nbsp;</span><span class="number">2</span><span>&nbsp;</span><span class="number">3</span><span>&nbsp;</span><span class="number">4</span><span>&nbsp;</span><span class="number">5</span><span>&nbsp;</span><span class="number">6</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$loop &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>#forlist &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;loop&nbsp;in&nbsp;</span><span class="string">"orange&nbsp;red&nbsp;blue&nbsp;grey"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;$loop &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>#forls &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;loop&nbsp;in&nbsp;`ls` &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$loop &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>#forparam &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;params &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;supplied&nbsp;$params&nbsp;as&nbsp;command&nbsp;line&nbsp;option"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$params &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;params&nbsp;in&nbsp;</span><span class="string">"$@"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;supplied&nbsp;$params&nbsp;as&nbsp;command&nbsp;line&nbsp;option"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$params &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>#forcommand &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;loop &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;`pwd`&nbsp;-name&nbsp;$loop&nbsp;-print &nbsp;&nbsp;</span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy/for&nbsp;&gt;fortest&nbsp;fortest &nbsp;&nbsp;</span></li>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">3</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">5</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">6</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>orange&nbsp;red&nbsp;blue&nbsp;grey &nbsp;&nbsp;</span></li>
    <li><span>fortest &nbsp;&nbsp;</span></li>
    <li><span>you&nbsp;supplied&nbsp;fortest&nbsp;as&nbsp;command&nbsp;line&nbsp;option &nbsp;&nbsp;</span></li>
    <li><span>fortest &nbsp;&nbsp;</span></li>
    <li><span>you&nbsp;supplied&nbsp;fortest&nbsp;as&nbsp;command&nbsp;line&nbsp;option &nbsp;&nbsp;</span></li>
    <li><span>fortest&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy/for &gt;cat fortest
#!/bin/sh
#for_i
for loop in 1 2 3 4 5 6
do
echo $loop
done
#forlist
for loop in "orange red blue grey"
do
echo $loop
done
#forls
for loop in `ls`
do
echo $loop
done
#forparam
for params
do
echo "you supplied $params as command line option"
echo $params
done
for params in "$@"
do
echo "you supplied $params as command line option"
echo $params
done
#forcommand
for loop
do
find `pwd` -name $loop -print
done
/home/l/g/tomotoboy/for &gt;fortest fortest
1
2
3
4
5
6
orange red blue grey
fortest
you supplied fortest as command line option
fortest
you supplied fortest as command line option
fortest</pre>
<br />
<br />
使用for循环连接服务器 <br />
因为for循环可以处理列表中的取值，现设变量为网络服务器名称，并使用for循环连接每一服务器。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442865#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#forping &nbsp;&nbsp;</span></li>
    <li><span>HOSTS=</span><span class="string">"sina.com&nbsp;cqu.edu.cn&nbsp;baidu.com"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>for&nbsp;loop&nbsp;in&nbsp;$HOSTS &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ping&nbsp;-c&nbsp;</span><span class="number">2</span><span>&nbsp;$loop &nbsp;&nbsp;</span></span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#forping
HOSTS="sina.com cqu.edu.cn baidu.com"
for loop in $HOSTS
do
ping -c 2 $loop
done</pre>
多文件转换 <br />
匹配所有以.sed结尾文件并将其转换为大写。这里使用了 l s和cat命令。l s用于查询出相关文件，cat用于将之管道输出至trr命令。目标文件扩展名为.UC，注意在for循环中使用l s命令时反引号的用法。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442865#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#forstr &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;files&nbsp;in&nbsp;`ls&nbsp;*.sed` &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;cat&nbsp;$files&nbsp;|tr&nbsp;</span><span class="string">"[a-z]"</span><span>&nbsp;&nbsp;</span><span class="string">"[A-Z]"</span><span>&nbsp;&gt;$files.UC &nbsp;&nbsp;</span></span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;change.sed &nbsp;&nbsp;</span></li>
    <li><span>#!/bin/sed&nbsp;-f &nbsp;&nbsp;</span></li>
    <li><span>#change.sed &nbsp;&nbsp;</span></li>
    <li><span>/tomotoboy/&nbsp;c\ &nbsp;&nbsp;</span></li>
    <li><span>I&nbsp;love&nbsp;China,Ilove&nbsp;Wanzhi. &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;ls&nbsp;*.UC &nbsp;&nbsp;</span></li>
    <li><span>append.sed.UC&nbsp;&nbsp;change.sed.UC &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;change.sed.UC &nbsp;&nbsp;</span></li>
    <li><span>#!/BIN/SED&nbsp;-F &nbsp;&nbsp;</span></li>
    <li><span>#CHANGE.SED &nbsp;&nbsp;</span></li>
    <li><span>/TOMOTOBOY/&nbsp;C\ &nbsp;&nbsp;</span></li>
    <li><span>I&nbsp;LOVE&nbsp;CHINA,ILOVE&nbsp;WANZHI.&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#forstr
for files in `ls *.sed`
do
cat $files |tr "[a-z]"  "[A-Z]" &gt;$files.UC
done
/home/l/g/tomotoboy &gt;cat change.sed
#!/bin/sed -f
#change.sed
/tomotoboy/ c\
I love China,Ilove Wanzhi.
/home/l/g/tomotoboy &gt;ls *.UC
append.sed.UC  change.sed.UC
/home/l/g/tomotoboy &gt;cat change.sed.UC
#!/BIN/SED -F
#CHANGE.SED
/TOMOTOBOY/ C\
I LOVE CHINA,ILOVE WANZHI.</pre>
<br />
<br />
多sed删除操作 <br />
下面的例子中，sed用于删除所有空文件，并将输出导至以 . HOLD.为扩展名的新文件，mv将这些文件移至初始文件中。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442865#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#forsed &nbsp;&nbsp;</span></li>
    <li><span>for&nbsp;files&nbsp;in&nbsp;`ls&nbsp;*.sed` &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;sed&nbsp;-e&nbsp;</span><span class="string">"/^$/d"</span><span>&nbsp;$files&nbsp;&gt;&nbsp;$files.HOLD &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;mv&nbsp;$files.HOLD&nbsp;$files &nbsp;&nbsp;</span></li>
    <li><span>done&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#forsed
for files in `ls *.sed`
do
sed -e "/^$/d" $files &gt; $files.HOLD
mv $files.HOLD $files
done</pre>
<br />
<br />
循环计数 <br />
前面讨论expr时指出，循环时如果要加入计数，使用此命令。下面使用 l s在for循环中列出文件及其数目。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/442865#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;forcount &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#forcount &nbsp;&nbsp;</span></li>
    <li><span>count=</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>for&nbsp;files&nbsp;in&nbsp;* &nbsp;&nbsp;</span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;count=`expr&nbsp;$count&nbsp;+&nbsp;</span><span class="number">1</span><span>` &nbsp;&nbsp;</span></span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"There&nbsp;are&nbsp;$count&nbsp;files&nbsp;in&nbsp;`pwd`&nbsp;we&nbsp;need&nbsp;to&nbsp;process"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat forcount
#!/bin/sh
#forcount
count=0
for files in *
do
count=`expr $count + 1`
done
echo "There are $count files in `pwd` we need to process"</pre>
<br />
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:06 <a href="http://www.blogjava.net/jzone/articles/304089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>控制流结构——if then else</title><link>http://www.blogjava.net/jzone/articles/304087.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:05:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304087.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/440944"></a>&nbsp;</h3>
<div class="blog_content"><span style="font-size: large">if then else语句</span> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>If&nbsp;&nbsp;条件</span><span class="number">1</span><span>&nbsp;&nbsp;&nbsp;&nbsp;//如果条件</span><span class="number">1</span><span>为真 &nbsp;&nbsp;</span></span></li>
    <li><span>Then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//那么 &nbsp;&nbsp;</span></li>
    <li><span>命令</span><span class="number">1</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//执行命令</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>elif&nbsp;&nbsp;条件</span><span class="number">2</span><span>&nbsp;&nbsp;&nbsp;&nbsp;//如果条件</span><span class="number">1</span><span>不成立 &nbsp;&nbsp;</span></span></li>
    <li><span>then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//那么 &nbsp;&nbsp;</span></li>
    <li><span>命令</span><span class="number">2</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//执行命令</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果条件</span><span class="number">1</span><span>，</span><span class="number">2</span><span>均不成立 &nbsp;&nbsp;</span></span></li>
    <li><span>命令</span><span class="number">3</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//那么执行命令</span><span class="number">3</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//完成&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">If  条件1    //如果条件1为真
Then         //那么
命令1       //执行命令1
elif  条件2    //如果条件1不成立
then           //那么
命令2        //执行命令2
else           //如果条件1，2均不成立
命令3       //那么执行命令3
fi             //完成</pre>
<br />
<br />
<br />
简单的if语句 <br />
最普通的if语句是： <br />
if条件 <br />
then&nbsp; 命令 <br />
if <br />
使用if语句时，必须将then部分放在新行，否则会产生错误。如果要不分行，必须使用命令分隔符。本 <br />
<br />
书其余部分将采取这种形式。现在简单 if语句变为： <br />
if&nbsp; 条件；then <br />
命令 <br />
if <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;iftest &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#iftest &nbsp;&nbsp;</span></li>
    <li><span>#this&nbsp;is&nbsp;a&nbsp;comment&nbsp;line,all&nbsp;comment&nbsp;lines&nbsp;start&nbsp;with&nbsp;a# &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"12"</span><span>&nbsp;-lt&nbsp;</span><span class="string">"14"</span><span>&nbsp;] &nbsp;&nbsp;</span></span></li>
    <li><span>then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;#yes&nbsp;</span><span class="number">12</span><span>&nbsp;is&nbsp;less&nbsp;than&nbsp;</span><span class="number">14</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;echo&nbsp;&nbsp;</span><span class="string">"Yes,&nbsp;12&nbsp;is&nbsp;less&nbsp;than&nbsp;14"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;chmod&nbsp;u+x&nbsp;iftest &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;&nbsp;./iftest &nbsp;&nbsp;</span></li>
    <li><span>Yes,&nbsp;</span><span class="number">12</span><span>&nbsp;is&nbsp;less&nbsp;than&nbsp;</span><span class="number">14</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat iftest
#!/bin/sh
#iftest
#this is a comment line,all comment lines start with a#
if [ "12" -lt "14" ]
then
#yes 12 is less than 14
echo  "Yes, 12 is less than 14"
fi
/home/l/g/tomotoboy &gt;chmod u+x iftest
/home/l/g/tomotoboy &gt; ./iftest
Yes, 12 is less than 14</pre>
变量值测试 <br />
不必拘泥于变量或数值测试，也可以测知系统命令是否成功返回。对 grep使用if语句找出grep是否成功 <br />
<br />
返回信息。下面的例子中 grep用于查看tomotoboy是否在数据文件sed.txt中，注意'tomotoboy'用于精 <br />
<br />
确匹配。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;grepif &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#grep&nbsp;if &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;grep&nbsp;</span><span class="string">'tomotoboy'</span><span>&nbsp;sed.txt&nbsp;&gt;/dev/null&nbsp;</span><span class="number">2</span><span>&gt;&amp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"tomotoboy&nbsp;is&nbsp;&nbsp;in&nbsp;the&nbsp;file"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"tomotoboy&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;file"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;./grepif &nbsp;&nbsp;</span></li>
    <li><span>tomotoboy&nbsp;is&nbsp;&nbsp;in&nbsp;the&nbsp;file&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat grepif
#!/bin/sh
#grep if
if grep 'tomotoboy' sed.txt &gt;/dev/null 2&gt;&amp;1
then
echo "tomotoboy is  in the file"
else
echo "tomotoboy is not in the file"
fi
/home/l/g/tomotoboy &gt;./grepif
tomotoboy is  in the file</pre>
<br />
用变量测试grep输出 <br />
正像前面看到的，可以用grep作字符串操作。下面的脚本中，用户输入一个名字列表，grep在变量中查找，要求其查找指定字符串 <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;grepstr &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#grepstr &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"Enter&nbsp;a&nbsp;piece&nbsp;of&nbsp;text&nbsp;file:"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;TEXT &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"Enter&nbsp;a&nbsp;string&nbsp;to&nbsp;query:&nbsp;"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;QUERY &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;grep&nbsp;$QUERY&nbsp;$TEXT&nbsp;&gt;/dev/null&nbsp;</span><span class="number">2</span><span>&gt;&amp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"$QUERY&nbsp;is&nbsp;in&nbsp;$TEXT"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;#could&nbsp;do&nbsp;some&nbsp;processing&nbsp;here... &nbsp;&nbsp;</span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"$QUERY&nbsp;is&nbsp;not&nbsp;in&nbsp;&nbsp;$TEXT"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;./grepstr &nbsp;&nbsp;</span></li>
    <li><span>-n&nbsp;Enter&nbsp;a&nbsp;piece&nbsp;of&nbsp;text&nbsp;file: &nbsp;&nbsp;</span></li>
    <li><span>sed.txt &nbsp;&nbsp;</span></li>
    <li><span>-n&nbsp;Enter&nbsp;a&nbsp;string&nbsp;to&nbsp;query: &nbsp;&nbsp;</span></li>
    <li><span>tomotoboy &nbsp;&nbsp;</span></li>
    <li><span>tomotoboy&nbsp;is&nbsp;in&nbsp;sed.txt&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat grepstr
#!/bin/sh
#grepstr
echo -n "Enter a piece of text file:"
read TEXT
echo -n "Enter a string to query: "
read QUERY
if grep $QUERY $TEXT &gt;/dev/null 2&gt;&amp;1
then
echo "$QUERY is in $TEXT"
#could do some processing here...
else
echo "$QUERY is not in  $TEXT"
fi
/home/l/g/tomotoboy &gt;./grepstr
-n Enter a piece of text file:
sed.txt
-n Enter a string to query:
tomotoboy
tomotoboy is in sed.txt</pre>
<br />
文件拷贝输出检查 <br />
下面测试文件拷贝是否正常，如果 cp命令并没有拷贝文件myfile到myfile.bak，则打印错误信息。注意错误信息中` basename $0`打印脚本名。如果脚本错误退出，一个好习惯是显示脚本名并将之定向到标准错误中。用户应该知道产生错误的脚本名。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;chmod&nbsp;u+x&nbsp;ifcp &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;ifcp &nbsp;&nbsp;</span></li>
    <li><span>cp:&nbsp;cannot&nbsp;access&nbsp;myfile &nbsp;&nbsp;</span></li>
    <li><span>ifcp:&nbsp;error&nbsp;could&nbsp;not&nbsp;copy&nbsp;the&nbsp;file &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;ifcp &nbsp;&nbsp;</span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifcp &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;cp&nbsp;myfile&nbsp;myfile.bak;&nbsp;then &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"good&nbsp;copy"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`:&nbsp;error&nbsp;could&nbsp;not&nbsp;copy&nbsp;the&nbsp;file"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;touch&nbsp;myfile &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;ifcp &nbsp;&nbsp;</span></li>
    <li><span>good&nbsp;copy &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;chmod u+x ifcp
/home/l/g/tomotoboy &gt;ifcp
cp: cannot access myfile
ifcp: error could not copy the file
/home/l/g/tomotoboy &gt;cat ifcp
#!/bin/sh
#ifcp
if cp myfile myfile.bak; then
echo "good copy"
else
echo "`basename $0`: error could not copy the file" &gt;&amp;2
fi
/home/l/g/tomotoboy &gt;touch myfile
/home/l/g/tomotoboy &gt;ifcp
good copy
/home/l/g/tomotoboy &gt;</pre>
<br />
<br />
当前目录测试 <br />
当运行一些管理脚本时，可能要在根目录下运行它，特别是移动某种全局文件或进行权限改变时。一个简单的测试可以获知是否运行在根目录下。下面脚本中变量DIRECTORY使用当前目录的命令替换操作，然后此变量值与 " / "字符串比较（/为根目录） 。如果变量值与字符串不等，则用户退出脚本，退出状态为1意味错误信息产生。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;ifpwd &nbsp;&nbsp;</span></span></li>
    <li><span>You&nbsp;need&nbsp;to&nbsp;be&nbsp;in&nbsp;the&nbsp;root&nbsp;directory&nbsp;not&nbsp;/home/l/g/tomotoboy&nbsp;to&nbsp;run&nbsp;this&nbsp;script &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cd&nbsp;/etc &nbsp;&nbsp;</span></li>
    <li><span>/etc&nbsp;&gt;cd&nbsp;/ &nbsp;&nbsp;</span></li>
    <li><span>/&nbsp;&gt;/home/l/g/tomotoboy/ifpwd &nbsp;&nbsp;</span></li>
    <li><span>/&nbsp;&gt;cat&nbsp;ifpwd &nbsp;&nbsp;</span></li>
    <li><span>cat:&nbsp;cannot&nbsp;open&nbsp;ifpwd &nbsp;&nbsp;</span></li>
    <li><span>/&nbsp;&gt;cat&nbsp;/home/l/g/tomotoboy/ifpwd &nbsp;&nbsp;</span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifpwd &nbsp;&nbsp;</span></li>
    <li><span>DIRECTORY=`pwd` &nbsp;&nbsp;</span></li>
    <li><span>#grab&nbsp;the&nbsp;current&nbsp;directory &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$DIRECTORY"</span><span>&nbsp;!=&nbsp;</span><span class="string">"/"</span><span>&nbsp;];then &nbsp;&nbsp;</span></span></li>
    <li><span>#is&nbsp;it&nbsp;the&nbsp;root&nbsp;directory? &nbsp;&nbsp;</span></li>
    <li><span>#no&nbsp;,the&nbsp;direct&nbsp;output&nbsp;to&nbsp;standard&nbsp;&nbsp;error,which&nbsp;is&nbsp;the&nbsp;screen&nbsp;by&nbsp;default. &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"You&nbsp;need&nbsp;to&nbsp;be&nbsp;in&nbsp;the&nbsp;root&nbsp;directory&nbsp;not&nbsp;$DIRECTORY&nbsp;to&nbsp;run&nbsp;this&nbsp;script"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>#exit&nbsp;with&nbsp;a&nbsp;value&nbsp;of&nbsp;</span><span class="number">1</span><span>,&nbsp;an&nbsp;error &nbsp;&nbsp;</span></span></li>
    <li><span>exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;ifpwd
You need to be in the root directory not /home/l/g/tomotoboy to run this script
/home/l/g/tomotoboy &gt;cd /etc
/etc &gt;cd /
/ &gt;/home/l/g/tomotoboy/ifpwd
/ &gt;cat ifpwd
cat: cannot open ifpwd
/ &gt;cat /home/l/g/tomotoboy/ifpwd
#!/bin/sh
#ifpwd
DIRECTORY=`pwd`
#grab the current directory
if [ "$DIRECTORY" != "/" ];then
#is it the root directory?
#no ,the direct output to standard  error,which is the screen by default.
echo "You need to be in the root directory not $DIRECTORY to run this script" &gt;&amp;2
#exit with a value of 1, an error
exit 1
fi</pre>
<br />
<br />
文件权限测试 <br />
可以用i f语句测试文件权限，下面简单测试文件sed.txt是否可写 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;ifwr&nbsp;sed.txt &nbsp;&nbsp;</span></span></li>
    <li><span>You&nbsp;can&nbsp;write&nbsp;to&nbsp;sed.txt &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;ifwr &nbsp;&nbsp;</span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifwr &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;!&nbsp;-w&nbsp;</span><span class="string">"$1"</span><span>&nbsp;];&nbsp;then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"You&nbsp;cannot&nbsp;write&nbsp;to&nbsp;$1"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"You&nbsp;can&nbsp;write&nbsp;to&nbsp;$1"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;ifwr sed.txt
You can write to sed.txt
/home/l/g/tomotoboy &gt;cat ifwr
#!/bin/sh
#ifwr
if [ ! -w "$1" ]; then
echo "You cannot write to $1" &gt;&amp;2
else
echo "You can write to $1"
fi</pre>
<br />
<br />
测试传递到脚本中的参数 <br />
if语句可用来测试传入脚本中参数的个数。使用特定变量$#，表示调用参数的个数。可以测试所需参数个数与调用参数个数是否相等。以下测试确保脚本有三个参数。如果没有，则返回一个可用信息到标准错误，然后代码退出并显示退出状态。如果参数数目等于3，则显示所有参数。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;ifparam &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifparam &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;$#&nbsp;-lt&nbsp;</span><span class="number">3</span><span>&nbsp;];&nbsp;then &nbsp;&nbsp;</span></span></li>
    <li><span>#less&nbsp;than&nbsp;</span><span class="number">3</span><span>&nbsp;parameters&nbsp;called,echo&nbsp;&nbsp;a&nbsp;usage&nbsp;message&nbsp;and&nbsp;exit &nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"Usage:&nbsp;`basename&nbsp;$0`&nbsp;arg1&nbsp;arg2&nbsp;arg3"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>exit &nbsp;&nbsp;</span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>#good&nbsp;,receive&nbsp;</span><span class="number">3</span><span>&nbsp;params,&nbsp;let's&nbsp;echo&nbsp;them &nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"arg1:&nbsp;$1"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"arg2:&nbsp;$2"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"arg3:&nbsp;$3"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;ifparam&nbsp;yang&nbsp;shi&nbsp;hai &nbsp;&nbsp;</span></li>
    <li><span>arg1:&nbsp;yang &nbsp;&nbsp;</span></li>
    <li><span>arg2:&nbsp;shi &nbsp;&nbsp;</span></li>
    <li><span>arg3:&nbsp;hai&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat ifparam
#!/bin/sh
#ifparam
if [ $# -lt 3 ]; then
#less than 3 parameters called,echo  a usage message and exit
echo "Usage: `basename $0` arg1 arg2 arg3" &gt;&amp;2
exit
fi
#good ,receive 3 params, let's echo them
echo "arg1: $1"
echo "arg2: $2"
echo "arg3: $3"
/home/l/g/tomotoboy &gt;ifparam yang shi hai
arg1: yang
arg2: shi
arg3: hai</pre>
<br />
<br />
决定脚本是否为交互模式 <br />
有时需要知道脚本运行是交互模式（终端模式）还是非交互模式（cron或at） 。脚本也许需要这个信息以决定从哪里取得输入以及输出到哪里，使用test命令并带有-t选项很容易确认这一点。如果test返回值为1，则为交互模式。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;ifinteractive &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifinteractive &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;-t&nbsp;];then &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"We&nbsp;are&nbsp;interactive&nbsp;with&nbsp;a&nbsp;terminal"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"We&nbsp;must&nbsp;be&nbsp;running&nbsp;from&nbsp;some&nbsp;background&nbsp;process&nbsp;probably&nbsp;cron&nbsp;or&nbsp;at"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;ifinteractive &nbsp;&nbsp;</span></li>
    <li><span>We&nbsp;are&nbsp;interactive&nbsp;with&nbsp;a&nbsp;terminal&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat ifinteractive
#!/bin/sh
#ifinteractive
if [ -t ];then
echo "We are interactive with a terminal"
else
echo "We must be running from some background process probably cron or at"
fi
/home/l/g/tomotoboy &gt;ifinteractive
We are interactive with a terminal</pre>
<br />
简单的if else语句 <br />
下一个if语句有可能是使用最广泛的： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>if条件 &nbsp;&nbsp;</span></span></li>
    <li><span>then &nbsp;&nbsp;</span></li>
    <li><span>命令</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>命令</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">if条件
then
命令1
else
命令2
fi</pre>
使用if语句的else部分可在条件测试为假时采取适当动作。 <br />
变量设置测试，下面的例子测试环境变量EDITOR是否已设置。如果EDITOR变量为空，将此信息通知用户。如果已设置，在屏幕上显示编辑类型。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$EDITOR &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;ifeditor &nbsp;&nbsp;</span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifeditor &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;-z&nbsp;</span><span class="string">"$EDITOR"</span><span>&nbsp;];then &nbsp;&nbsp;</span></span></li>
    <li><span>#the&nbsp;variable&nbsp;has&nbsp;not&nbsp;been&nbsp;set &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"Your&nbsp;EDITOR&nbsp;environment&nbsp;is&nbsp;not&nbsp;set"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>#let's&nbsp;&nbsp;us&nbsp;see&nbsp;what&nbsp;is&nbsp;it &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"Using&nbsp;$EDITOR&nbsp;as&nbsp;the&nbsp;default&nbsp;editor"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;ifeditor &nbsp;&nbsp;</span></li>
    <li><span>Your&nbsp;EDITOR&nbsp;environment&nbsp;is&nbsp;not&nbsp;set &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;echo $EDITOR
/home/l/g/tomotoboy &gt;cat ifeditor
#!/bin/sh
#ifeditor
if [ -z "$EDITOR" ];then
#the variable has not been set
echo "Your EDITOR environment is not set"
else
#let's  us see what is it
echo "Using $EDITOR as the default editor"
fi
/home/l/g/tomotoboy &gt;ifeditor
Your EDITOR environment is not set
/home/l/g/tomotoboy &gt;</pre>
<br />
<br />
<strong>检测最后命令状态</strong> <br />
前面将目录名传入脚本创建了一个目录，脚本然后提示用户是否应创建目录。下面的例子创建一个目录，并从当前目录将所有 *.txt文件拷入新目录。但是这段脚本中用最后状态命令检测了每一个脚本是否成功执行。如果命令失败则通知用户。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;ifmkdir &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#ifmkdir &nbsp;&nbsp;</span></li>
    <li><span>DIR_NAME=testdirec &nbsp;&nbsp;</span></li>
    <li><span>#where&nbsp;we&nbsp;are? &nbsp;&nbsp;</span></li>
    <li><span>THERE=`pwd` &nbsp;&nbsp;</span></li>
    <li><span>#send&nbsp;all&nbsp;output&nbsp;to&nbsp;system&nbsp;dustbin &nbsp;&nbsp;</span></li>
    <li><span>mkdir&nbsp;$DIR_NAME&nbsp;&gt;/dev/null&nbsp;</span><span class="number">2</span><span>&gt;&amp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>#is&nbsp;it&nbsp;a&nbsp;directory? &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;-d&nbsp;$DIR_NAME&nbsp;];then &nbsp;&nbsp;</span></li>
    <li><span>#can&nbsp;we&nbsp;cd&nbsp;to&nbsp;the&nbsp;directory &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;cd&nbsp;$DIR_NAME &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;if&nbsp;[&nbsp;$?&nbsp;=&nbsp;</span><span class="number">0</span><span>&nbsp;];then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;#yes&nbsp;we&nbsp;can &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;HERE=`pwd` &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"$HERE"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;cp&nbsp;$THERE/*.txt&nbsp;$HERE &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"Cannot&nbsp;cd&nbsp;to&nbsp;$DIR_NAME"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;fi &nbsp;&nbsp;</span></li>
    <li><span>else &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;echo&nbsp;</span><span class="string">"Cannot&nbsp;create&nbsp;directory&nbsp;$DIR_NAME"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat ifmkdir
#!/bin/sh
#ifmkdir
DIR_NAME=testdirec
#where we are?
THERE=`pwd`
#send all output to system dustbin
mkdir $DIR_NAME &gt;/dev/null 2&gt;&amp;1
#is it a directory?
if [ -d $DIR_NAME ];then
#can we cd to the directory
cd $DIR_NAME
if [ $? = 0 ];then
#yes we can
HERE=`pwd`
echo "$HERE"
cp $THERE/*.txt $HERE
else
echo "Cannot cd to $DIR_NAME" &gt;&amp;2
exit 1
fi
else
echo "Cannot create directory $DIR_NAME" &gt;&amp;2
exit 1
fi</pre>
<br />
<strong>简单的安全登录脚本</strong> <br />
以下是用户登录时启动应用前加入相应安全限制功能的基本框架。首先提示输入用户名和密码，如果用户名和密码均匹配脚本中相应字符串，用户登录成功，否则用户退出。脚本首先设置变量为假—总是假定用户输入错误，stty当前设置被保存，以便隐藏passwd域中字符，然后重新保存stty设置。如果用户I D和密码正确（密码是myday） ，明亮INVALID_USER和INVALID_PASSWD设置为no表示有效用户或密码，然后执行测试，如果两个变量其中之一为yes，缺省情况下，脚本退出用户。键入有效的ID和密码，用户将允许进入。这是一种登录脚本的基本框架。下面的例子中有效用户ID为dave或tomotoboy。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440944#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#ifpass &nbsp;&nbsp;</span></li>
    <li><span>#set&nbsp;the&nbsp;variables&nbsp;to&nbsp;false &nbsp;&nbsp;</span></li>
    <li><span>INVALID_USER=yes &nbsp;&nbsp;</span></li>
    <li><span>INVALID_PASSWD=yes &nbsp;&nbsp;</span></li>
    <li><span>#set&nbsp;the&nbsp;current&nbsp;stty&nbsp;settings &nbsp;&nbsp;</span></li>
    <li><span>SAVEDSTTY=`stty&nbsp;-g` &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"You&nbsp;are&nbsp;logging&nbsp;into&nbsp;a&nbsp;sensitive&nbsp;area"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"Enter&nbsp;your&nbsp;ID&nbsp;name:"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;NAME &nbsp;&nbsp;</span></li>
    <li><span>#hide&nbsp;the&nbsp;characters&nbsp;typed&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>stty&nbsp;-echo &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"Enter&nbsp;your&nbsp;password&nbsp;:"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;PASSWORD &nbsp;&nbsp;</span></li>
    <li><span>#back&nbsp;on&nbsp;again &nbsp;&nbsp;</span></li>
    <li><span>stty&nbsp;$SAVEDSTTY &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$NAME"</span><span>&nbsp;=&nbsp;</span><span class="string">"tomotoboy"</span><span>&nbsp;]&nbsp;||&nbsp;[&nbsp;</span><span class="string">"$NAME"</span><span>&nbsp;=&nbsp;</span><span class="string">"dave"</span><span>&nbsp;];&nbsp;then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;#if&nbsp;a&nbsp;valid&nbsp;then&nbsp;set&nbsp;variable &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;INVALID_USER=no &nbsp;&nbsp;</span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$PASSWORD"</span><span>&nbsp;=&nbsp;</span><span class="string">"myday"</span><span>&nbsp;];then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;#if&nbsp;valid&nbsp;password&nbsp;then&nbsp;set&nbsp;variable &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;INVALID_PASSWD=no &nbsp;&nbsp;</span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$INVALID_USER"</span><span>&nbsp;=&nbsp;</span><span class="string">"yes"</span><span>&nbsp;]&nbsp;||&nbsp;[&nbsp;</span><span class="string">"$INVALID_PASSWD"</span><span>&nbsp;=&nbsp;</span><span class="string">"yes"</span><span>&nbsp;];then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`&nbsp;:&nbsp;Sorry&nbsp;wrong&nbsp;password&nbsp;or&nbsp;userid"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"corrent&nbsp;user&nbsp;id&nbsp;and&nbsp;password&nbsp;given"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/sh
#ifpass
#set the variables to false
INVALID_USER=yes
INVALID_PASSWD=yes
#set the current stty settings
SAVEDSTTY=`stty -g`
echo "You are logging into a sensitive area"
echo -n "Enter your ID name:"
read NAME
#hide the characters typed in
stty -echo
echo "Enter your password :"
read PASSWORD
#back on again
stty $SAVEDSTTY
if [ "$NAME" = "tomotoboy" ] || [ "$NAME" = "dave" ]; then
#if a valid then set variable
INVALID_USER=no
fi
if [ "$PASSWORD" = "myday" ];then
#if valid password then set variable
INVALID_PASSWD=no
fi
if [ "$INVALID_USER" = "yes" ] || [ "$INVALID_PASSWD" = "yes" ];then
echo "`basename $0` : Sorry wrong password or userid"
exit 1
fi
echo "corrent user id and password given"</pre>
<br />
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:05 <a href="http://www.blogjava.net/jzone/articles/304087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>控制流结构——case</title><link>http://www.blogjava.net/jzone/articles/304088.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:05:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304088.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/441488"></a>&nbsp;</h3>
<div class="blog_content"><span style="font-size: medium"><strong>case语句</strong></span> <br />
case语句为多选择语句。可以用case语句匹配一个值与一个模式，如果匹配成功，执行相匹配的命令。case语句格式如下： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/441488#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>case&nbsp;值&nbsp;in &nbsp;&nbsp;</span></span></li>
    <li><span>模式</span><span class="number">1</span><span>&nbsp;) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;命令</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;.&nbsp;.&nbsp;. &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>模式</span><span class="number">2</span><span>&nbsp;) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;命令</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;.&nbsp;.&nbsp;. &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>esac&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">case 值 in
模式1 )
命令1
. . .
;;
模式2 )
命令2
. . .
;;
esac</pre>
<br />
<br />
case工作方式如上所示。取值后面必须为单词 in，每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后，其间所有命令开始执行直至;; <br />
<br />
取值将检测匹配的每一个模式。一旦模式匹配，则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式，使用星号*捕获该值，再接受其他输入。模式部分可能包括元字符，与在命令行文件扩展名例子中使用过的匹配模式类型相同，即： <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>*</td>
            <td>任意字符。</td>
        </tr>
        <tr>
            <td>？</td>
            <td>任意单字符。</td>
        </tr>
        <tr>
            <td>[..]</td>
            <td>类或范围中任意字符。</td>
        </tr>
    </tbody>
</table>
<br />
<strong>来看一个简单的case语句：</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/441488#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;caseselect &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#caseselect &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;-&nbsp;n&nbsp;</span><span class="string">"Enter&nbsp;a&nbsp;number&nbsp;from&nbsp;1&nbsp;to&nbsp;5&nbsp;:"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;ANS &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;case&nbsp;$ANS&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span class="number">1</span><span>)&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;select&nbsp;1"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span class="number">2</span><span>)&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;select&nbsp;2"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span class="number">3</span><span>)&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;select&nbsp;3"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span class="number">4</span><span>)&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;select&nbsp;4"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span class="number">5</span><span>)&nbsp;echo&nbsp;</span><span class="string">"you&nbsp;select&nbsp;5"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span>*)&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`:&nbsp;This&nbsp;is&nbsp;not&nbsp;between&nbsp;1&nbsp;and&nbsp;5"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span>esac &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;caseselect &nbsp;&nbsp;</span></li>
    <li><span>-&nbsp;n&nbsp;Enter&nbsp;a&nbsp;number&nbsp;from&nbsp;</span><span class="number">1</span><span>&nbsp;to&nbsp;</span><span class="number">5</span><span>&nbsp;: &nbsp;&nbsp;</span></span></li>
    <li><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>you&nbsp;select&nbsp;</span><span class="number">4</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;caseselect &nbsp;&nbsp;</span></li>
    <li><span>-&nbsp;n&nbsp;Enter&nbsp;a&nbsp;number&nbsp;from&nbsp;</span><span class="number">1</span><span>&nbsp;to&nbsp;</span><span class="number">5</span><span>&nbsp;: &nbsp;&nbsp;</span></span></li>
    <li><span class="number">7</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>caseselect:&nbsp;This&nbsp;is&nbsp;not&nbsp;between&nbsp;</span><span class="number">1</span><span>&nbsp;and&nbsp;</span><span class="number">5</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat caseselect
#!/bin/sh
#caseselect
echo - n "Enter a number from 1 to 5 :"
read ANS
case $ANS in
1) echo "you select 1"
;;
2) echo "you select 2"
;;
3) echo "you select 3"
;;
4) echo "you select 4"
;;
5) echo "you select 5"
;;
*) echo "`basename $0`: This is not between 1 and 5" &gt;&amp;2
;;
esac
/home/l/g/tomotoboy &gt;caseselect
- n Enter a number from 1 to 5 :
4
you select 4
/home/l/g/tomotoboy &gt;caseselect
- n Enter a number from 1 to 5 :
7
caseselect: This is not between 1 and 5</pre>
<br />
<br />
<strong>对匹配模式使用|</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/441488#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;caseterm &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#caseterm &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"choices&nbsp;are..&nbsp;vt100,&nbsp;vt102,&nbsp;vt220"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"enter&nbsp;your&nbsp;terminal&nbsp;type&nbsp;:"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;TERMINAL &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;case&nbsp;$TERMINAL&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;vt100|vt102)&nbsp;TERM=vt100 &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;vt220)&nbsp;TERM=vt220 &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;*)&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`:&nbsp;Unknown&nbsp;reponse"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"setting&nbsp;it&nbsp;to&nbsp;vt100&nbsp;anyway,so&nbsp;there"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;TERM=vt100 &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>esac &nbsp;&nbsp;</span></li>
    <li><span>export&nbsp;TERM &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;"Your&nbsp;terminal&nbsp;is&nbsp;set&nbsp;to&nbsp;$TERM' &nbsp;&nbsp;</span></li>
    <li><span class="string">"caseterm"</span><span>&nbsp;</span><span class="number">17</span><span>&nbsp;lines,&nbsp;</span><span class="number">348</span><span>&nbsp;characters &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;caseterm &nbsp;&nbsp;</span></li>
    <li><span>choices&nbsp;are..&nbsp;vt100,&nbsp;vt102,&nbsp;vt220 &nbsp;&nbsp;</span></li>
    <li><span>-n&nbsp;enter&nbsp;your&nbsp;terminal&nbsp;type&nbsp;: &nbsp;&nbsp;</span></li>
    <li><span>vt100 &nbsp;&nbsp;</span></li>
    <li><span>Your&nbsp;terminal&nbsp;is&nbsp;set&nbsp;to&nbsp;vt100'&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat caseterm
#!/bin/sh
#caseterm
echo "choices are.. vt100, vt102, vt220"
echo -n "enter your terminal type :"
read TERMINAL
case $TERMINAL in
vt100|vt102) TERM=vt100
;;
vt220) TERM=vt220
;;
*) echo "`basename $0`: Unknown reponse" &gt;&amp;2
echo "setting it to vt100 anyway,so there"
TERM=vt100
;;
esac
export TERM
echo "Your terminal is set to $TERM'
"caseterm" 17 lines, 348 characters
/home/l/g/tomotoboy &gt;caseterm
choices are.. vt100, vt102, vt220
-n enter your terminal type :
vt100
Your terminal is set to vt100'</pre>
<br />
<strong>提示键入y或n</strong> <br />
case的一个有效用法是提示用户响应以决定是否继续进程。这里提示输入y以继续处理n退出。如果用户输入Y、y或yes，处理继续执行case语句后面部分。如果用户输入N、n或no或其他响应，用户退出脚本。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/441488#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;caseans &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#caseans &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"Do&nbsp;you&nbsp;wish&nbsp;to&nbsp;proceed&nbsp;[y..n]"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;ANS &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;case&nbsp;$ANS&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;y|Y|yes|Yes)&nbsp;echo&nbsp;</span><span class="string">"yes&nbsp;is&nbsp;selected"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;n|N|no|No)&nbsp;echo&nbsp;</span><span class="string">"no&nbsp;is&nbsp;selectd"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;*)&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`&nbsp;:&nbsp;Unknown&nbsp;response"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;esac &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;caseans &nbsp;&nbsp;</span></li>
    <li><span>-n&nbsp;Do&nbsp;you&nbsp;wish&nbsp;to&nbsp;proceed&nbsp;[y..n] &nbsp;&nbsp;</span></li>
    <li><span>y &nbsp;&nbsp;</span></li>
    <li><span>yes&nbsp;is&nbsp;selected&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat caseans
#!/bin/sh
#caseans
echo -n "Do you wish to proceed [y..n]"
read ANS
case $ANS in
y|Y|yes|Yes) echo "yes is selected"
;;
n|N|no|No) echo "no is selectd"
;;
*) echo "`basename $0` : Unknown response" &gt;&amp;2
;;
esac
/home/l/g/tomotoboy &gt;caseans
-n Do you wish to proceed [y..n]
y
yes is selected</pre>
<br />
<br />
<strong>case与命令参数传入</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/441488#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;&gt;&gt;&nbsp;caseparam &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sh &nbsp;&nbsp;</span></li>
    <li><span>#caseparam &nbsp;&nbsp;</span></li>
    <li><span>if&nbsp;[&nbsp;$#&nbsp;!=&nbsp;</span><span class="number">1</span><span>&nbsp;];then &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"Usage:`basename&nbsp;$0`&nbsp;[start|stop|help]"</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>fi &nbsp;&nbsp;</span></li>
    <li><span>OPT=$</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>case&nbsp;$OPT&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;start)&nbsp;echo&nbsp;</span><span class="string">"starting..`basename&nbsp;$0`"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;stop)&nbsp;echo&nbsp;</span><span class="string">"stopping..`basename&nbsp;$0`"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;help)&nbsp;echo&nbsp;</span><span class="string">"stopping..`basename&nbsp;$0`"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"Usage:`basename&nbsp;$0`&nbsp;[start|stop|help]"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;*)&nbsp;echo&nbsp;</span><span class="string">"stopping..`basename&nbsp;$0`"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;echo&nbsp;</span><span class="string">"Usage:`basename&nbsp;$0`&nbsp;[start|stop|help]"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>;; &nbsp;&nbsp;</span></li>
    <li><span>esac &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;chmod&nbsp;u+x&nbsp;caseparam &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;caseparam&nbsp;help &nbsp;&nbsp;</span></li>
    <li><span>stopping..caseparam &nbsp;&nbsp;</span></li>
    <li><span>Usage:caseparam&nbsp;[start|stop|help] &nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;caseparam&nbsp;start &nbsp;&nbsp;</span></li>
    <li><span>starting..caseparam&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat &gt;&gt; caseparam
#!/bin/sh
#caseparam
if [ $# != 1 ];then
echo "Usage:`basename $0` [start|stop|help]" &gt;&amp;2
fi
OPT=$1
case $OPT in
start) echo "starting..`basename $0`"
;;
stop) echo "stopping..`basename $0`"
;;
help) echo "stopping..`basename $0`"
echo "Usage:`basename $0` [start|stop|help]"
;;
*) echo "stopping..`basename $0`"
echo "Usage:`basename $0` [start|stop|help]"
;;
esac
/home/l/g/tomotoboy &gt;chmod u+x caseparam
/home/l/g/tomotoboy &gt;caseparam help
stopping..caseparam
Usage:caseparam [start|stop|help]
/home/l/g/tomotoboy &gt;caseparam start
starting..caseparam</pre>
<br />
<br />
<strong>捕获输入并执行空命令</strong> <br />
不一定要在匹配模式后加入命令，如果你原本不想做什么，只是在进一步处理前过滤出意外响应，这样做是一种好办法。如果要运行对应于一个会计部门的帐目报表，必须首先在决定运行报表的类型前确认用户输入一个有效的部门号，匹配所有可能值，其他值无效。用case可以很容易实现上述功能。下面的脚本中如果用户输入部门号不是234、453、655或454，用户退出并返回可用信息。一旦响应了用户的有效部门号，脚本应用同样的技术取得报表类型，在case语句末尾显示有效的部门号和报表类型。脚本如下： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/441488#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/sh &nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;casevalid &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"enter&nbsp;the&nbsp;account&nbsp;dept&nbsp;No:&nbsp;"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;ACC &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;case&nbsp;$ACC&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">234</span><span>);; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">453</span><span>);; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">655</span><span>);; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">454</span><span>);; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*)&nbsp;echo&nbsp;</span><span class="string">"basename&nbsp;$01`:&nbsp;Unknon&nbsp;dept&nbsp;No"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"try..234,453,655,454"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span></li>
    <li><span>esac &nbsp;&nbsp;</span></li>
    <li><span>#if&nbsp;we&nbsp;are&nbsp;here,&nbsp;then&nbsp;we&nbsp;have&nbsp;a&nbsp;validdated&nbsp;the&nbsp;dept&nbsp;no &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"&nbsp;1&nbsp;.&nbsp;post"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;</span><span class="string">"&nbsp;2&nbsp;.&nbsp;prior"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>echo&nbsp;-n&nbsp;</span><span class="string">"enter&nbsp;the&nbsp;type&nbsp;of&nbsp;report:&nbsp;"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>read&nbsp;ACC_TYPE &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;case&nbsp;$ACC_TYPE&nbsp;in &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>)TYPE=post;; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="number">2</span><span>)TYPE=prior;; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;*)&nbsp;echo&nbsp;</span><span class="string">"`basename&nbsp;$0`:&nbsp;Unknown&nbsp;account&nbsp;type."</span><span>&nbsp;&gt;&amp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="string">"casevalid"</span><span>&nbsp;</span><span class="number">29</span><span>&nbsp;lines,&nbsp;</span><span class="number">665</span><span>&nbsp;characters &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;casevalid &nbsp;&nbsp;</span></li>
    <li><span>-n&nbsp;enter&nbsp;the&nbsp;account&nbsp;dept&nbsp;No: &nbsp;&nbsp;</span></li>
    <li><span class="number">454</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;</span><span class="number">1</span><span>&nbsp;.&nbsp;post &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;</span><span class="number">2</span><span>&nbsp;.&nbsp;prior &nbsp;&nbsp;</span></span></li>
    <li><span>-n&nbsp;enter&nbsp;the&nbsp;type&nbsp;of&nbsp;report: &nbsp;&nbsp;</span></li>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>now&nbsp;running&nbsp;report&nbsp;for&nbsp;dept&nbsp;</span><span class="number">454</span><span>&nbsp;for&nbsp;the&nbsp;type&nbsp;post&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:05 <a href="http://www.blogjava.net/jzone/articles/304088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>条件控制（test，expr……）</title><link>http://www.blogjava.net/jzone/articles/304086.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304086.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/440139"></a>&nbsp;</h3>
<div class="blog_content"><strong>测试文件状态</strong> <br />
test <br />
test一般有两种格式，即： <br />
test condition <br />
或 <br />
[ condition ] <br />
使用方括号时，要注意在条件两边加上空格。测试文件状态的条件表达式很多，但是最常用的可在下表中查到。 <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>-d</td>
            <td>目录 </td>
            <td>-s </td>
            <td>文件长度大于0、非空</td>
        </tr>
        <tr>
            <td>-f</td>
            <td>正规文件 </td>
            <td>-w </td>
            <td>可写</td>
        </tr>
        <tr>
            <td>-L</td>
            <td>符号连接 </td>
            <td>-u </td>
            <td>文件有suid位设置</td>
        </tr>
        <tr>
            <td>-r</td>
            <td>可读 </td>
            <td>-x </td>
            <td>可执行</td>
        </tr>
    </tbody>
</table>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;test&nbsp;-d&nbsp;sed.out &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;test&nbsp;-f&nbsp;sed.out &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-f&nbsp;sed.out&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-d&nbsp;sed.out&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-x&nbsp;sed.out&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-r&nbsp;sed.out&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-w&nbsp;sed.out&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;test -d sed.out
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;test -f sed.out
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ -f sed.out ]
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ -d sed.out ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ -x sed.out ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ -r sed.out ]
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ -w sed.out ]
/home/l/g/tomotoboy &gt;echo $?
0</pre>
<br />
<strong>测试时使用逻辑操作符</strong> <br />
测试文件状态是否为OK，但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。 <br />
-a&nbsp;&nbsp; 逻辑与，操作符两边均为真，结果为真，否则为假。 <br />
-o&nbsp;&nbsp; 逻辑或，操作符两边一边为真，结果为真，否则为假。 <br />
! 逻辑否，条件为假，结果为真。 <br />
下面比较两个文件sed.out、sed.txt： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;ls&nbsp;-al&nbsp;sed.out&nbsp;sed.txt &nbsp;&nbsp;</span></span>
    <li><span>-rw-r--r--&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;tomotoboy&nbsp;member&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">159</span><span>&nbsp;Jul&nbsp;</span><span class="number">30</span><span>&nbsp;</span><span class="number">16</span><span>:</span><span class="number">47</span><span>&nbsp;sed.out &nbsp;&nbsp;</span></span>
    <li><span>-rw-r--r--&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;tomotoboy&nbsp;member&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">655</span><span>&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">44</span><span>&nbsp;sed.txt &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-w&nbsp;sed.out&nbsp;-a&nbsp;-w&nbsp;sed.txt&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-x&nbsp;sed.out&nbsp;-a&nbsp;-r&nbsp;sed.txt] &nbsp;&nbsp;</span>
    <li><span>-bash:&nbsp;[:&nbsp;missing&nbsp;`]' &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-x&nbsp;sed.out&nbsp;-a&nbsp;-r&nbsp;sed.txt&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-x&nbsp;sed.out&nbsp;-o&nbsp;-r&nbsp;sed.txt&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;ls -al sed.out sed.txt
-rw-r--r--   1 tomotoboy member       159 Jul 30 16:47 sed.out
-rw-r--r--   1 tomotoboy member       655 Jul 31 14:44 sed.txt
/home/l/g/tomotoboy &gt;[ -w sed.out -a -w sed.txt ]
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ -x sed.out -a -r sed.txt]
-bash: [: missing `]'
/home/l/g/tomotoboy &gt;[ -x sed.out -a -r sed.txt ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ -x sed.out -o -r sed.txt ]
/home/l/g/tomotoboy &gt;echo $?
0</pre>
<br />
<strong>字符串测试</strong> <br />
字符串测试是错误捕获很重要的一部分，特别在测试用户输入或比较变量时尤为重要。字符串测试有5种格式： <br />
test "string" <br />
test string_operator "string" <br />
test "string" string_operator "string" <br />
[ string_operator "string" ] <br />
[ "string" string_operator "string" ] <br />
这里，string_operator可为： <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>=&nbsp;&nbsp;&nbsp;&nbsp; </td>
            <td>两个字符串相等。</td>
        </tr>
        <tr>
            <td>!=&nbsp;&nbsp;&nbsp; </td>
            <td>两个字符串不等。</td>
        </tr>
        <tr>
            <td>-z&nbsp;&nbsp;&nbsp; </td>
            <td>空串。</td>
        </tr>
        <tr>
            <td>-n&nbsp;&nbsp;&nbsp; </td>
            <td>非空串。</td>
        </tr>
    </tbody>
</table>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-z&nbsp;$HELLO&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;HELLO=</span><span class="string">"hello"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-z&nbsp;$HELLO&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;-n&nbsp;$HELLO&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;!-n&nbsp;$HELLO&nbsp;] &nbsp;&nbsp;</span>
    <li><span>[&nbsp;nohup&nbsp;-p&nbsp;</span><span class="number">1</span><span>&nbsp;$HELLO&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>-bash:&nbsp;[:&nbsp;too&nbsp;many&nbsp;arguments &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;![&nbsp;-n&nbsp;$HELLO&nbsp;]&nbsp;] &nbsp;&nbsp;</span>
    <li><span>[&nbsp;[&nbsp;-z&nbsp;$HELLO&nbsp;]&nbsp;-n&nbsp;$HELLO&nbsp;]&nbsp;] &nbsp;&nbsp;</span>
    <li><span>-bash:&nbsp;[:&nbsp;too&nbsp;many&nbsp;arguments &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;HI=</span><span class="string">"hi"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;$HELLO&nbsp;=&nbsp;$HI] &nbsp;&nbsp;</span>
    <li><span>-bash:&nbsp;[:&nbsp;missing&nbsp;`]' &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;$HELLO&nbsp;=&nbsp;$HI&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;$HELLO&nbsp;!=&nbsp;$HI&nbsp;] &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;[ -z $HELLO ]
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;HELLO="hello"
/home/l/g/tomotoboy &gt;[ -z $HELLO ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ -n $HELLO ]
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ !-n $HELLO ]
[ nohup -p 1 $HELLO ]
-bash: [: too many arguments
/home/l/g/tomotoboy &gt;[ ![ -n $HELLO ] ]
[ [ -z $HELLO ] -n $HELLO ] ]
-bash: [: too many arguments
/home/l/g/tomotoboy &gt;HI="hi"
/home/l/g/tomotoboy &gt;[ $HELLO = $HI]
-bash: [: missing `]'
/home/l/g/tomotoboy &gt;[ $HELLO = $HI ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ $HELLO != $HI ]
/home/l/g/tomotoboy &gt;echo $?
0</pre>
<br />
<strong>测试数值</strong> <br />
测试数值可以使用许多操作符，一般格式如下： <br />
"number" numeric_operator "number" <br />
或者 <br />
[ "number" numeric_operator "number" ] <br />
numeric_operator可为： <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>-eq&nbsp;&nbsp; </td>
            <td>数值相等。</td>
        </tr>
        <tr>
            <td>-ne&nbsp;&nbsp; </td>
            <td>数值不相等。</td>
        </tr>
        <tr>
            <td>-gt&nbsp;&nbsp; </td>
            <td>第一个数大于第二个数。</td>
        </tr>
        <tr>
            <td>-lt&nbsp;&nbsp; </td>
            <td>第一个数小于第二个数。</td>
        </tr>
        <tr>
            <td>-le&nbsp;&nbsp; </td>
            <td>第一个数小于等于第二个数。</td>
        </tr>
        <tr>
            <td>-ge&nbsp;&nbsp; </td>
            <td>第一个数大于等于第二个数。</td>
        </tr>
    </tbody>
</table>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;Nbr=</span><span class="number">10</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;Nbr1=</span><span class="number">20</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;Nbr&nbsp;-ne&nbsp;Nbr1 &nbsp;&nbsp;</span>
    <li><span>-bash:&nbsp;Nbr:&nbsp;command&nbsp;not&nbsp;found &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;$Nbr&nbsp;-ne&nbsp;$Nbr1 &nbsp;&nbsp;</span>
    <li><span>-bash:&nbsp;</span><span class="number">10</span><span>:&nbsp;command&nbsp;not&nbsp;found &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"$Nbr"</span><span>&nbsp;-ne&nbsp;</span><span class="string">"$Nbr1"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"$Nbr"</span><span>&nbsp;-e&nbsp;</span><span class="string">"$Nbr1"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>-bash:&nbsp;[:&nbsp;-e:&nbsp;binary&nbsp;operator&nbsp;expected &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"$Nbr"</span><span>&nbsp;-eq&nbsp;</span><span class="string">"$Nbr1"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"$Nbr"</span><span>&nbsp;-gt&nbsp;</span><span class="string">"$Nbr1"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;</span><span class="number">4</span><span>? &nbsp;&nbsp;</span></span>
    <li><span class="number">4</span><span>? &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"$Nbr"</span><span>&nbsp;-gt&nbsp;</span><span class="string">"$Nbr1"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"$Nbr"</span><span>&nbsp;-lt&nbsp;</span><span class="string">"$Nbr1"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;Nbr=10
/home/l/g/tomotoboy &gt;Nbr1=20
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;Nbr -ne Nbr1
-bash: Nbr: command not found
/home/l/g/tomotoboy &gt;$Nbr -ne $Nbr1
-bash: 10: command not found
/home/l/g/tomotoboy &gt;[ "$Nbr" -ne "$Nbr1" ]
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ "$Nbr" -e "$Nbr1" ]
-bash: [: -e: binary operator expected
/home/l/g/tomotoboy &gt;[ "$Nbr" -eq "$Nbr1" ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ "$Nbr" -gt "$Nbr1" ]
/home/l/g/tomotoboy &gt;echo 4?
4?
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;[ "$Nbr" -gt "$Nbr1" ]
/home/l/g/tomotoboy &gt;echo $?
1
/home/l/g/tomotoboy &gt;[ "$Nbr" -lt "$Nbr1" ]
/home/l/g/tomotoboy &gt;echo $?
0</pre>
<br />
可以不必将整数值放入变量，直接用数字比较即可，但要加引号。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;[&nbsp;</span><span class="string">"99"</span><span>&nbsp;-ge&nbsp;</span><span class="string">"60"</span><span>&nbsp;] &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;[ "99" -ge "60" ]
/home/l/g/tomotoboy &gt;echo $?
0</pre>
<br />
<br />
<strong>expr用法</strong> <br />
expr命令一般用于整数值，但也可用于字符串。一般格式为： <br />
expr argument operator argument <br />
expr也是一个手工命令行计数器。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;</span><span class="number">10</span><span>&nbsp;+&nbsp;</span><span class="number">10</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">20</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;</span><span class="number">45</span><span>&nbsp;/&nbsp;</span><span class="number">4</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">11</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;expr 10 + 10
20
/home/l/g/tomotoboy &gt;expr 45 / 4
11</pre>
<br />
使用乘号时，必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;</span><span class="number">30</span><span>&nbsp;\*&nbsp;</span><span class="number">100</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">3000</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;expr 30 \* 100
3000</pre>
<br />
<strong>增量计数</strong>expr在循环中用于增量计算。首先，循环初始化为 0，然后循环值加1，反引号的用法意即替代命令。最基本的一种是从（expr）命令接受输出并将之放入循环变量 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;loop=</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;loop=`expr&nbsp;$loop&nbsp;+&nbsp;</span><span class="number">1</span><span>` &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$loop &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;loop=0
/home/l/g/tomotoboy &gt;loop=`expr $loop + 1`
/home/l/g/tomotoboy &gt;echo
/home/l/g/tomotoboy &gt;echo $?
0
/home/l/g/tomotoboy &gt;echo $loop
1</pre>
<strong>数值测试</strong> <br />
可以用expr测试一个数。如果试图计算非整数，将返回错误。 <br />
/
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>home/l/g/tomotoboy&nbsp;&gt;f=</span><span class="number">1.1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;f&nbsp;+&nbsp;</span><span class="number">10</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;non-numeric&nbsp;argument &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$HELLO&nbsp;+&nbsp;</span><span class="number">10</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;non-numeric&nbsp;argument &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;</span><span class="string">"$HELLO"</span><span>&nbsp;&nbsp;+&nbsp;</span><span class="number">10</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;non-numeric&nbsp;argument &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$f&nbsp;+&nbsp;</span><span class="number">10</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;non-numeric&nbsp;argument&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">home/l/g/tomotoboy &gt;f=1.1
/home/l/g/tomotoboy &gt;expr f + 10
expr: non-numeric argument
/home/l/g/tomotoboy &gt;echo $?
2
/home/l/g/tomotoboy &gt;expr $HELLO + 10
expr: non-numeric argument
/home/l/g/tomotoboy &gt;echo $?
2
/home/l/g/tomotoboy &gt;expr "$HELLO"  + 10
expr: non-numeric argument
/home/l/g/tomotoboy &gt;echo $?
2
/home/l/g/tomotoboy &gt;expr $f + 10
expr: non-numeric argument</pre>
<br />
expr也可以返回其本身的退出状态，不幸的是返回值与系统最后退出命令刚好相反，成功返回1，任何其他值为无效或错误。下面的例子测试两个字符串是否相等，这里字符串为&#8220;hello&#8221;和&#8220;hello&#8221; 。 <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$HELLO&nbsp;=&nbsp;</span><span class="string">"hello"</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;$? &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;expr $HELLO = "hello"
1
/home/l/g/tomotoboy &gt;echo $?
0</pre>
<br />
<strong>模式匹配</strong> <br />
expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次. <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/440139#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;sed.txt &nbsp;&nbsp;</span></span>
    <li><span class="number">605408211</span><span>&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">13</span><span>:</span><span class="number">54</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">218.0</span><span>.</span><span class="number">1.42</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>caodejun&nbsp;&nbsp;&nbsp;pts/</span><span class="number">44</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.148</span><span>.</span><span class="number">133.31</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>duke1988&nbsp;&nbsp;&nbsp;pts/</span><span class="number">45</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">41</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">218.104</span><span>.</span><span class="number">163.66</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>nefu_luyanshen&nbsp;&nbsp;&nbsp;pts/</span><span class="number">23</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">218.25</span><span>.</span><span class="number">6.142</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>nefu_luyanshen&nbsp;&nbsp;&nbsp;pts/</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">12</span><span>:</span><span class="number">59</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">218.25</span><span>.</span><span class="number">6.142</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>shuzigui&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">12</span><span>:</span><span class="number">11</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">121.35</span><span>.</span><span class="number">248.193</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">41</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">13</span><span>:</span><span class="number">31</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">99.155</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>waterlooz&nbsp;&nbsp;&nbsp;pts/</span><span class="number">25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">121.0</span><span>.</span><span class="number">29.225</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>wsoangel&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">13</span><span>:</span><span class="number">40</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">116.233</span><span>.</span><span class="number">219.10</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>xp55699312&nbsp;&nbsp;&nbsp;pts/</span><span class="number">42</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">12</span><span>&nbsp;&nbsp;(</span><span class="number">61.152</span><span>.</span><span class="number">132.103</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>zyy0904&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">43</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">31</span><span>&nbsp;</span><span class="number">13</span><span>:</span><span class="number">53</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">125.33</span><span>.</span><span class="number">195.36</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;VALUE=sed.txt &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy&nbsp;,&nbsp;</span><span class="string">'.*'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;syntax&nbsp;error &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt; &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE:tomotoboy &nbsp;&nbsp;</span>
    <li><span>sed.txt:tomotoboy &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE:&nbsp;tomotoboy &nbsp;&nbsp;</span>
    <li><span>expr:&nbsp;syntax&nbsp;error &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:tomotoboy &nbsp;&nbsp;</span>
    <li><span>expr:&nbsp;syntax&nbsp;error &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy,&nbsp;</span><span class="string">'.*'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;syntax&nbsp;error &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy&nbsp;,&nbsp;</span><span class="string">'.*'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>expr:&nbsp;syntax&nbsp;error &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;&nbsp;</span><span class="string">'.*'</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">7</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;tomotoboy &nbsp;&nbsp;</span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;</span><span class="string">"tomotoboy"</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;expr&nbsp;$VALUE&nbsp;:&nbsp;</span><span class="string">"nefu_luyanshen"</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">0</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat sed.txt
605408211   pts/16       Jul 31 13:54   (218.0.1.42)
caodejun   pts/44       Jul 31 14:16    (219.148.133.31)
duke1988   pts/45       Jul 31 14:41    (218.104.163.66)
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
nefu_luyanshen   pts/23       Jul 31 14:33      (218.25.6.142)
nefu_luyanshen   pts/48       Jul 31 12:59      (218.25.6.142)
shuzigui   pts/21       Jul 31 12:11    (121.35.248.193)
tomotoboy   pts/41       Jul 31 13:31   (219.221.99.155)
waterlooz   pts/25       Jul 31 08:48   (121.0.29.225)
wsoangel   pts/35       Jul 31 13:40    (116.233.219.10)
xp55699312   pts/42       Jul 31 14:12  (61.152.132.103)
zyy0904    pts/43       Jul 31 13:53    (125.33.195.36)
/home/l/g/tomotoboy &gt;VALUE=sed.txt
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy , '.*'
expr: syntax error
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy
0
/home/l/g/tomotoboy &gt;
/home/l/g/tomotoboy &gt;expr $VALUE:tomotoboy
sed.txt:tomotoboy
/home/l/g/tomotoboy &gt;expr $VALUE: tomotoboy
expr: syntax error
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy
0
/home/l/g/tomotoboy &gt;expr $VALUE :tomotoboy
expr: syntax error
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy
0
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy, '.*'
expr: syntax error
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy , '.*'
expr: syntax error
/home/l/g/tomotoboy &gt;expr $VALUE :  '.*'
7
/home/l/g/tomotoboy &gt;expr $VALUE : tomotoboy
0
/home/l/g/tomotoboy &gt;expr $VALUE : "tomotoboy"
0
/home/l/g/tomotoboy &gt;expr $VALUE : "nefu_luyanshen"
0</pre>
<span style="color: red">这里没有搞懂，tomotoboy和nefu_luyanshen，明明存在而结果是0</span> <br />
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:01 <a href="http://www.blogjava.net/jzone/articles/304086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell变量及环境变量</title><link>http://www.blogjava.net/jzone/articles/304084.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304084.html</guid><description><![CDATA[<h3 class="type_original" title="原创"><a href="http://shihaiyang.javaeye.com/blog/438713"></a>&nbsp;</h3>
<div class="blog_content"><strong>本地变量</strong> <br />
显示变量 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438713#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>$GREAT_PICTURE&nbsp;=</span><span class="string">"die&nbsp;hard"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>$echo&nbsp;${GREAT_PICTURE} &nbsp;&nbsp;</span></li>
    <li><span>die&nbsp;hard &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>$DOLLAR=</span><span class="number">99</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>$echo&nbsp;${DOLLAR} &nbsp;&nbsp;</span></li>
    <li><span class="number">99</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>$LAST_FILE=ZLPSO.txt &nbsp;&nbsp;</span></li>
    <li><span>$echo&nbsp;${LAST_FILE} &nbsp;&nbsp;</span></li>
    <li><span>ZLPSO.txt&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">$GREAT_PICTURE ="die hard"
$echo ${GREAT_PICTURE}
die hard
$DOLLAR=99
$echo ${DOLLAR}
99
$LAST_FILE=ZLPSO.txt
$echo ${LAST_FILE}
ZLPSO.txt</pre>
<br />
清除变量 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438713#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>unset&nbsp;variable-name &nbsp;&nbsp;</span></span></li>
    <li><span>$PC=enterprise &nbsp;&nbsp;</span></li>
    <li><span>$echo&nbsp;${PC} &nbsp;&nbsp;</span></li>
    <li><span>enterprise &nbsp;&nbsp;</span></li>
    <li><span>$unset&nbsp;PC &nbsp;&nbsp;</span></li>
    <li><span>$echp&nbsp;${PC} &nbsp;&nbsp;</span></li>
    <li><span>$&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">unset variable-name
$PC=enterprise
$echo ${PC}
enterprise
$unset PC
$echp ${PC}
$</pre>
<br />
显示所有本地shell变量 <br />
使用set命令显示所有本地定义的shell变量 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438713#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>$set&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">$set</pre>
<br />
<br />
结合变量值 <br />
将变量并排可以使变量结合在一起 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438713#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>echo&nbsp;${variable-name}${variable-name} &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>$FIRST=</span><span class="string">"Bruce"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>$SURNAME=Willis &nbsp;&nbsp;</span></li>
    <li><span>$echo&nbsp;${FIRST}${SURNAME} &nbsp;&nbsp;</span></li>
    <li><span>Bruce&nbsp;Willis&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">echo ${variable-name}${variable-name}
$FIRST="Bruce"
$SURNAME=Willis
$echo ${FIRST}${SURNAME}
Bruce Willis</pre>
<br />
测试变量是否已经设置 <br />
有时要测试是否已设置或初始化变量。如果未设置或初始化，就可以使用另一值。此命 <br />
令格式为： <br />
${variable:-value} <br />
<br />
<strong>环境变量</strong> <br />
<br />
嵌入shell变量 <br />
Brourne shell有一些预留的环境变量名，这些变量名不能用作其他用途。通常在/etc/profile中建立这些嵌入的环境变量，但也不完全是，这取决于用户自己。以下是嵌入 shell变量列表。 <br />
<br />
设置环境变量 <br />
VARIABLE-NAME= value；export VARIABLE-NAME <br />
在两个命令之间是一个分号，也可以这样写： <br />
VARIABLE-NAME= value <br />
Export VARIABLE-NAME <br />
<br />
显示和清除环境变量与本地变量一致 <br />
<br />
set命令 <br />
在$HOME.profile文件中设置环境变量时，还有另一种方法导出这些变量。使用set命令- a选项，即set -a指明所有变量直接被导出。不要在/etc/profile中使用这种方法，最好只在自己的$HOME.profile文件中使用 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438713#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>$pg&nbsp;.profile &nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;.profile &nbsp;&nbsp;</span></li>
    <li><span>MAIL=/usr/mail/${LOGNAME:?} &nbsp;&nbsp;</span></li>
    <li><span>PS1=</span><span class="string">"`hostname`&gt;"</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">$pg .profile
# .profile
MAIL=/usr/mail/${LOGNAME:?}
PS1="`hostname`&gt;"</pre>
<br />
<strong>位置变量参数</strong> <br />
在脚本中位置参数 <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>$0 </td>
            <td>$1 </td>
            <td>&amp;2 </td>
            <td>$3 </td>
            <td>$4 </td>
            <td>$5 </td>
            <td>$6 </td>
            <td>$6 </td>
            <td>$7 </td>
            <td>$8 </td>
            <td>$9 </td>
            <td>${10} </td>
            <td>${11}</td>
            <td>&#8230;&#8230;</td>
        </tr>
        <tr>
            <td>脚本文件名 </td>
            <td>第一个参数 </td>
            <td>第二个参数 </td>
            <td>&#8230;&#8230;</td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>
<br />
<br />
特定变量函数 <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>$#</td>
            <td>传递到脚本的参数个数</td>
        </tr>
        <tr>
            <td>$*</td>
            <td>以一个单字符串显示所有向脚本传递的参数。与位置变量不同，此选项参数可超过 9个</td>
        </tr>
        <tr>
            <td>$$</td>
            <td>脚本运行的当前进程ID号</td>
        </tr>
        <tr>
            <td>$!</td>
            <td>后台运行的最后一个进程的进程ID号</td>
        </tr>
        <tr>
            <td>$@</td>
            <td>与$#相同，但是使用时加引号，并在引号中返回每个参数</td>
        </tr>
        <tr>
            <td>$-</td>
            <td>显示shell使用的当前选项，与set命令功能相同</td>
        </tr>
        <tr>
            <td>$?</td>
            <td>显示最后命令的退出状态。0表示没有错误，其他任何值表明有错误。</td>
        </tr>
    </tbody>
</table>
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 12:00 <a href="http://www.blogjava.net/jzone/articles/304084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>登陆环境</title><link>http://www.blogjava.net/jzone/articles/304083.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304083.html</guid><description><![CDATA[首先看看/etc/passwd <br />
它保存着用户名、加密后的密码等信息，我们登录系统所有信息都要在里面查找 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438366#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;cat&nbsp;/etc/passwd&nbsp;|&nbsp;tr&nbsp;</span><span class="string">":"</span><span>&nbsp;</span><span class="string">"\t"</span><span>&nbsp;|&nbsp;sort&nbsp;-k0 &nbsp;&nbsp;</span></span>
    <li><span>adm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">4</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">4</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin&nbsp;&nbsp;&nbsp;/var/adm &nbsp;&nbsp;</span></span>
    <li><span>bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin &nbsp;&nbsp;</span></span>
    <li><span>daemon&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>gdm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">50</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GDM&nbsp;Reserved&nbsp;UID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>jiang&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">100</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/sh &nbsp;&nbsp;</span></span>
    <li><span>listen&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">37</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">4</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Network&nbsp;Admin&nbsp;&nbsp;&nbsp;/usr/net/nls &nbsp;&nbsp;</span></span>
    <li><span>lp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">71</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">8</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Line&nbsp;Printer&nbsp;Admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/spool/lp &nbsp;&nbsp;</span></span>
    <li><span>noaccess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">60002</span><span>&nbsp;&nbsp;&nbsp;</span><span class="number">60002</span><span>&nbsp;&nbsp;&nbsp;No&nbsp;Access&nbsp;User&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>nobody&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">60001</span><span>&nbsp;&nbsp;&nbsp;</span><span class="number">60001</span><span>&nbsp;&nbsp;&nbsp;NFS&nbsp;Anonymous&nbsp;Access&nbsp;User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>nobody4&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">65534</span><span>&nbsp;&nbsp;&nbsp;</span><span class="number">65534</span><span>&nbsp;&nbsp;&nbsp;SunOS&nbsp;</span><span class="number">4</span><span>.x&nbsp;NFS&nbsp;Anonymous&nbsp;Access&nbsp;User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>nuucp&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">9</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uucp&nbsp;Admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/spool/uucppublic&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/usr/lib/uucp/uucico &nbsp;&nbsp;</span>
    <li><span>root&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Super-User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/bash &nbsp;&nbsp;</span></span>
    <li><span>smmsp&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">25</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMail&nbsp;Message&nbsp;Submission&nbsp;Program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>sys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">3</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">3</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>ttaserv&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">101</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">100</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/sh &nbsp;&nbsp;</span></span>
    <li><span>ttasys&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">102</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">100</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/sh &nbsp;&nbsp;</span></span>
    <li><span>uucp&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">5</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">5</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uucp&nbsp;Admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/lib/uucp &nbsp;&nbsp;</span></span>
    <li><span>webservd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">80</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">80</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebServer&nbsp;Reserved&nbsp;UID&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">81</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">81</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebServer&nbsp;User&nbsp;&nbsp;/ &nbsp;&nbsp;</span></span>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;cat&nbsp;/etc/passwd&nbsp;|&nbsp;sed&nbsp;-n&nbsp;&nbsp;</span><span class="string">'/jiang/'</span><span>p &nbsp;&nbsp;</span></span>
    <li><span>jiang:x:</span><span class="number">100</span><span>:</span><span class="number">1</span><span>::/:/bin/sh &nbsp;&nbsp;</span></span>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;cat&nbsp;/etc/passwd&nbsp;|&nbsp;sed&nbsp;-n&nbsp;&nbsp;</span><span class="string">'/jiang/'</span><span>p&nbsp;|&nbsp;tr&nbsp;</span><span class="string">':'</span><span>&nbsp;</span><span class="string">'\t'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>jiang&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">100</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/sh&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ cat /etc/passwd | tr ":" "\t" | sort -k0
adm     x       4       4       Admin   /var/adm
bin     x       2       2               /usr/bin
daemon  x       1       1               /
gdm     x       50      50      GDM Reserved UID        /
jiang   x       100     1               /       /bin/sh
listen  x       37      4       Network Admin   /usr/net/nls
lp      x       71      8       Line Printer Admin      /usr/spool/lp
noaccess        x       60002   60002   No Access User  /
nobody  x       60001   60001   NFS Anonymous Access User       /
nobody4 x       65534   65534   SunOS 4.x NFS Anonymous Access User     /
nuucp   x       9       9       uucp Admin      /var/spool/uucppublic
/usr/lib/uucp/uucico
root    x       0       0       Super-User      /       /bin/bash
smmsp   x       25      25      SendMail Message Submission Program     /
sys     x       3       3               /
ttaserv x       101     100             /       /bin/sh
ttasys  x       102     100             /       /bin/sh
uucp    x       5       5       uucp Admin      /usr/lib/uucp
webservd        x       80      80      WebServer Reserved UID  /
www     x       81      81      WebServer User  /
-bash-3.00$ cat /etc/passwd | sed -n  '/jiang/'p
jiang:x:100:1::/:/bin/sh
-bash-3.00$ cat /etc/passwd | sed -n  '/jiang/'p | tr ':' '\t'
jiang   x       100     1               /       /bin/sh</pre>
<br />
<br />
用户登录时自动读取/etc/profile 此文件包含： <br />
<ul>
    <li>全局或局部环境变量。
    <li>PATH信息
    <li>终端设置
    <li>安全命令
    <li>日期信息或放弃操作信息 </li>
</ul>
<br />
让我们来看一个详细的profile <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438366#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;cat&nbsp;/etc/profile &nbsp;&nbsp;</span></span>
    <li><span>#ident&nbsp;&nbsp;</span><span class="string">"@(#)profile&nbsp;&nbsp;&nbsp;&nbsp;1.19&nbsp;&nbsp;&nbsp;&nbsp;01/03/13&nbsp;SMI"</span><span>&nbsp;&nbsp;&nbsp;/*&nbsp;SVr4.</span><span class="number">0</span><span>&nbsp;</span><span class="number">1.3</span><span>&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>#&nbsp;The&nbsp;profile&nbsp;that&nbsp;all&nbsp;logins&nbsp;get&nbsp;before&nbsp;using&nbsp;their&nbsp;own&nbsp;.profile. &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>trap&nbsp;</span><span class="string">""</span><span>&nbsp;&nbsp;</span><span class="number">2</span><span>&nbsp;</span><span class="number">3</span><span>&nbsp;#忽略两个信号，即使用QUIT退出或&lt;Ctrl-c&gt;键停止文件执行 &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>ulimit&nbsp;-d&nbsp;</span><span class="number">100000</span><span>&nbsp;#限制内存溢出，设置数据段的最大值：单位kbytes &nbsp;&nbsp;</span></span>
    <li><span>export&nbsp;LOGNAME&nbsp;PATH&nbsp;#导出LOGNAME&nbsp;和&nbsp;PATH &nbsp;&nbsp;</span>
    <li><span>export&nbsp;LANG=C&nbsp;#设置语言环境 &nbsp;&nbsp;</span>
    <li><span>if&nbsp;[&nbsp;</span><span class="string">"$TERM"</span><span>&nbsp;=&nbsp;</span><span class="string">""</span><span>&nbsp;]&nbsp;#设置终端类型 &nbsp;&nbsp;</span></span>
    <li><span>then &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;/bin/i386 &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TERM=sun-color &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TERM=sun &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;TERM &nbsp;&nbsp;</span>
    <li><span>fi &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Login&nbsp;and&nbsp;-su&nbsp;shells&nbsp;get&nbsp;/etc/profile&nbsp;services. &nbsp;&nbsp;</span>
    <li><span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-rsh&nbsp;is&nbsp;given&nbsp;its&nbsp;environment&nbsp;in&nbsp;its&nbsp;.profile. &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>case&nbsp;</span><span class="string">"$0"</span><span>&nbsp;in &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>-sh&nbsp;|&nbsp;-ksh&nbsp;|&nbsp;-jsh&nbsp;|&nbsp;-bash) &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;!&nbsp;-f&nbsp;.hushlogin&nbsp;] &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/sbin/quota &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allow&nbsp;the&nbsp;user&nbsp;to&nbsp;break&nbsp;the&nbsp;Message-Of-The-Day&nbsp;only. &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trap&nbsp;</span><span class="string">"trap&nbsp;''&nbsp;2"</span><span>&nbsp;&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/cat&nbsp;-s&nbsp;/etc/motd &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trap&nbsp;</span><span class="string">""</span><span>&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/bin/mail&nbsp;-E &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;$?&nbsp;in&nbsp;#建立邮件信息（当有新邮件到达时显示提示信息） &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"You&nbsp;have&nbsp;new&nbsp;mail."</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">2</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="string">"You&nbsp;have&nbsp;mail."</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;esac &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;</span>
    <li><span>esac &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>umask&nbsp;</span><span class="number">022</span><span>&nbsp;#设置umask值，使文件创建时带有一定的缺省权限位集 &nbsp;&nbsp;</span></span>
    <li><span>trap&nbsp;&nbsp;</span><span class="number">2</span><span>&nbsp;</span><span class="number">3</span><span>&nbsp;#重新设置捕捉信号&lt;Ctrl-C&gt;和QUIT，即恢复信号量的默认操作 &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>#&nbsp;add&nbsp;by&nbsp;jianghua &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>export &nbsp;&nbsp;</span>
    <li><span>PATH=$PATH:/usr/local/bin:/usr/local/mysql/bin:/opt/SunStudio_11/SUNWspro/bin:/usr/ccs/bin: &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/usr/sfw/bin:. &nbsp;&nbsp;</span>
    <li><span>export&nbsp;HISTSIZE=</span><span class="number">1000</span><span>&nbsp;&nbsp;</span></span>
    <li><span>export&nbsp;HISTFILESIZE=</span><span class="number">1000</span><span>&nbsp;&nbsp;</span></span>
    <li><span># &nbsp;&nbsp;</span>
    <li><span>#&nbsp;Show&nbsp;Unix-Center.Net&nbsp;Welcome&nbsp;Message&nbsp;in&nbsp;Chinese &nbsp;&nbsp;</span>
    <li><span># &nbsp;&nbsp;</span>
    <li><span>show_welcome_message&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ cat /etc/profile
#ident  "@(#)profile    1.19    01/03/13 SMI"   /* SVr4.0 1.3   */
# The profile that all logins get before using their own .profile.
trap ""  2 3 #忽略两个信号，即使用QUIT退出或&lt;Ctrl-c&gt;键停止文件执行
ulimit -d 100000 #限制内存溢出，设置数据段的最大值：单位kbytes
export LOGNAME PATH #导出LOGNAME 和 PATH
export LANG=C #设置语言环境
if [ "$TERM" = "" ] #设置终端类型
then
if /bin/i386
then
TERM=sun-color
else
TERM=sun
fi
export TERM
fi
#       Login and -su shells get /etc/profile services.
#       -rsh is given its environment in its .profile.
case "$0" in
-sh | -ksh | -jsh | -bash)
if [ ! -f .hushlogin ]
then
/usr/sbin/quota
#       Allow the user to break the Message-Of-The-Day only.
trap "trap '' 2"  2
/bin/cat -s /etc/motd
trap "" 2
/bin/mail -E
case $? in #建立邮件信息（当有新邮件到达时显示提示信息）
0)
echo "You have new mail."
;;
2)
echo "You have mail."
;;
esac
fi
esac
umask 022 #设置umask值，使文件创建时带有一定的缺省权限位集
trap  2 3 #重新设置捕捉信号&lt;Ctrl-C&gt;和QUIT，即恢复信号量的默认操作
# add by jianghua
export
PATH=$PATH:/usr/local/bin:/usr/local/mysql/bin:/opt/SunStudio_11/SUNWspro/bin:/usr/ccs/bin:
/usr/sfw/bin:.
export HISTSIZE=1000
export HISTFILESIZE=1000
#
# Show Unix-Center.Net Welcome Message in Chinese
#
show_welcome_message</pre>
<br />
<br />
用户的$HOME.profile <br />
下面显示如何在命令提示符中设置主机名： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438366#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;PS1=</span><span class="string">'$PWD&nbsp;&gt;'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;export&nbsp;PS1&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ PS1='$PWD &gt;'
/home/l/g/tomotoboy &gt;export PS1</pre>
<br />
<br />
stty用于设置终端特性。要查询现在的stty选项，使用stty -a <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438366#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;stty&nbsp;-a &nbsp;&nbsp;</span></span>
    <li><span>speed&nbsp;</span><span class="number">9600</span><span>&nbsp;baud; &nbsp;&nbsp;</span></span>
    <li><span>rows&nbsp;=&nbsp;</span><span class="number">25</span><span>;&nbsp;columns&nbsp;=&nbsp;</span><span class="number">82</span><span>;&nbsp;ypixels&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;xpixels&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span>
    <li><span>csdata&nbsp;? &nbsp;&nbsp;</span>
    <li><span>eucw&nbsp;</span><span class="number">1</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>,&nbsp;scrw&nbsp;</span><span class="number">1</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>intr&nbsp;=&nbsp;^c;&nbsp;quit&nbsp;=&nbsp;^\;&nbsp;erase&nbsp;=&nbsp;^?;&nbsp;kill&nbsp;=&nbsp;^u; &nbsp;&nbsp;</span>
    <li><span>eof&nbsp;=&nbsp;^d;&nbsp;eol&nbsp;=&nbsp;&lt;undef&gt;;&nbsp;eol2&nbsp;=&nbsp;&lt;undef&gt;;&nbsp;swtch&nbsp;=&nbsp;&lt;undef&gt;; &nbsp;&nbsp;</span>
    <li><span>start&nbsp;=&nbsp;^q;&nbsp;stop&nbsp;=&nbsp;^s;&nbsp;susp&nbsp;=&nbsp;^z;&nbsp;dsusp&nbsp;=&nbsp;^y; &nbsp;&nbsp;</span>
    <li><span>rprnt&nbsp;=&nbsp;^r;&nbsp;flush&nbsp;=&nbsp;^o;&nbsp;werase&nbsp;=&nbsp;^w;&nbsp;lnext&nbsp;=&nbsp;^v; &nbsp;&nbsp;</span>
    <li><span>-parenb&nbsp;-parodd&nbsp;cs8&nbsp;-cstopb&nbsp;-hupcl&nbsp;cread&nbsp;-clocal&nbsp;-loblk&nbsp;-crtscts&nbsp;-crtsxoff&nbsp;-parext &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>-ignbrk&nbsp;brkint&nbsp;-ignpar&nbsp;-parmrk&nbsp;-inpck&nbsp;-istrip&nbsp;-inlcr&nbsp;-igncr&nbsp;icrnl&nbsp;-iuclc &nbsp;&nbsp;</span>
    <li><span>ixon&nbsp;-ixany&nbsp;-ixoff&nbsp;imaxbel &nbsp;&nbsp;</span>
    <li><span>isig&nbsp;icanon&nbsp;-xcase&nbsp;echo&nbsp;echoe&nbsp;echok&nbsp;-echonl&nbsp;-noflsh &nbsp;&nbsp;</span>
    <li><span>-tostop&nbsp;echoctl&nbsp;-echoprt&nbsp;echoke&nbsp;-defecho&nbsp;-flusho&nbsp;-pendin&nbsp;iexten &nbsp;&nbsp;</span>
    <li><span>opost&nbsp;-olcuc&nbsp;onlcr&nbsp;-ocrnl&nbsp;-onocr&nbsp;-onlret&nbsp;-ofill&nbsp;-ofdel&nbsp;tab3&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;stty -a
speed 9600 baud;
rows = 25; columns = 82; ypixels = 0; xpixels = 0;
csdata ?
eucw 1:0:0:0, scrw 1:0:0:0
intr = ^c; quit = ^\; erase = ^?; kill = ^u;
eof = ^d; eol = &lt;undef&gt;; eol2 = &lt;undef&gt;; swtch = &lt;undef&gt;;
start = ^q; stop = ^s; susp = ^z; dsusp = ^y;
rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;
-parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk -crtscts -crtsxoff -parext
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff imaxbel
isig icanon -xcase echo echoe echok -echonl -noflsh
-tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel tab3</pre>
<br />
<br />
创建.logout文件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438366#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>trap&nbsp;</span><span class="string">"$HOME&nbsp;/.logout&nbsp;"</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;.logout &nbsp;&nbsp;</span>
    <li><span>rm&nbsp;-f&nbsp;$HOME/*.txt &nbsp;&nbsp;</span>
    <li><span>rm&nbsp;-f&nbsp;$HOME/*.tmp &nbsp;&nbsp;</span>
    <li><span>rm&nbsp;-f&nbsp;$HOME/x* &nbsp;&nbsp;</span>
    <li><span>echo&nbsp;</span><span class="string">"Bye...bye&nbsp;$LOGNAME"</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<img src ="http://www.blogjava.net/jzone/aggbug/304083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:59 <a href="http://www.blogjava.net/jzone/articles/304083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell合并和分割</title><link>http://www.blogjava.net/jzone/articles/304080.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304080.html</guid><description><![CDATA[<h3 class="type_original" title="原创"><a href="http://shihaiyang.javaeye.com/blog/436946"></a>&nbsp;</h3>
<div class="blog_content">&#8226; 实用的分类（sort）操作。 <br />
sort命令的一般格式为： <br />
sort -cmu -o output_file [other options] +pos1 +pos2 input_files <br />
下面简要介绍一下s o r t的参数： <br />
-c 测试文件是否已经分类。 <br />
-m 合并两个分类文件。 <br />
-u 删除所有复制行。 <br />
-o 存储s o r t结果的输出文件名。 <br />
其他选项有： <br />
-b 使用域进行分类时，忽略第一个空格。 <br />
-n 指定分类是域上的数字分类。 <br />
-t 域分隔符；用非空格或t a b键分隔域。 <br />
-r 对分类次序或比较求逆。 <br />
+n n为域号。使用此域号开始分类。 <br />
n n为域号。在分类比较时忽略此域，一般与+ n一起使用。 <br />
post1&nbsp; 传递到m，n。m为域号，n为开始分类字符数；例如4，6意即以第5域分类，从第7 <br />
个字符开始。 <br />
举例： <br />
按第一个域分类 <br />
-bash-3.00$ sort -k0 sed.txt <br />
打印分类后的最后第一行 <br />
-bash-3.00$ sort -k0 sed.txt | tail -1 <br />
打印分类后的第一行 <br />
-bash-3.00$ sort -k0 sed.txt | head -1 <br />
awk使用sort输出结果 <br />
-bash-3.00$ sort -k0 sed.txt | head -1 | awk '{if($1=="caodejun")print $1}' <br />
将两个分类文件合并 <br />
-bash-3.00$ sort -m&nbsp; sed.txt sort.txt <br />
将文件合并前，它们必须已被分类。合并文件可用于事务处理和任何种类的修改操作。 <br />
下面这个例子，因为忘了把两个家电名称加入文件，它们被放在一个单独的文件里，现在将 <br />
之并入一个文件。分类的合并格式为&#8216;sort -m sorted_file1 sorted_file2&#8217;。 <br />
<br />
删除重复行 <br />
-bash-3.00$ sort -u sed.txt <br />
<br />
<br />
&#8226; uniq <br />
uniq用来从一个文本文件中去除或禁止重复行。一般uniq假定文件已分类，并且结果正确。我们并不强制要求这样做，如果愿意，可以使用任何非排序文本，甚至是无规律行。 <br />
-bash-3.00$ who | awk '{print $1} ' |uniq <br />
liuzk423 <br />
605408211 <br />
shuzigui <br />
nefu_luyanshen <br />
waterlooz <br />
wsoangel <br />
tomotoboy <br />
xp55699312 <br />
zyy0904 <br />
caodejun <br />
duke1988 <br />
605408211 <br />
nefu_luyanshen <br />
zyy0904 <br />
lonelysand <br />
<br />
<br />
显示不唯一的行 <br />
-bash-3.00$ who | awk '{print $1} ' |uniq -d <br />
<br />
-c打印每一重复行出现次数。 <br />
-bash-3.00$ who | awk '{print $1} ' |uniq -c <br />
&nbsp;&nbsp; 1 liuzk423 <br />
&nbsp;&nbsp; 1 605408211 <br />
&nbsp;&nbsp; 1 shuzigui <br />
&nbsp;&nbsp; 1 nefu_luyanshen <br />
&nbsp;&nbsp; 1 waterlooz <br />
&nbsp;&nbsp; 1 wsoangel <br />
&nbsp;&nbsp; 1 tomotoboy <br />
&nbsp;&nbsp; 1 xp55699312 <br />
&nbsp;&nbsp; 1 zyy0904 <br />
&nbsp;&nbsp; 1 caodejun <br />
&nbsp;&nbsp; 1 duke1988 <br />
&nbsp;&nbsp; 1 605408211 <br />
&nbsp;&nbsp; 1 nefu_luyanshen <br />
&nbsp;&nbsp; 1 zyy0904 <br />
&nbsp;&nbsp; 1 lonelysand <br />
<span style="color: red">这里没有搞懂nefu_luyanshen明明重复，却显示重复行数目为1</span> <br />
<br />
对特定域进行测试，使用-n只测试一行一部分的唯一性。 <br />
-bash-3.00$ who | awk '{print $1} ' |uniq -n2 <br />
liuzk423 <br />
<br />
<br />
&#8226; join <br />
将两个已经分好类的文件连接在一起哈。一些系统要求使用join时文件域要少于20，为公平起见，如果域大于20，应使用DBMS系统，其一般格式如下： <br />
join [options] in_file1 in_file2 <br />
<br />
-bash-3.00$ cat sed.txt <br />
605408211&nbsp;&nbsp; pts/16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 13:54&nbsp;&nbsp; (218.0.1.42) <br />
caodejun&nbsp;&nbsp; pts/44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 14:16&nbsp;&nbsp;&nbsp; (219.148.133.31) <br />
duke1988&nbsp;&nbsp; pts/45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 14:41&nbsp;&nbsp;&nbsp; (218.104.163.66) <br />
liuzk423&nbsp;&nbsp; pts/6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 20 08:27&nbsp;&nbsp;&nbsp; (219.245.104.240) <br />
nefu_luyanshen&nbsp;&nbsp; pts/23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 14:33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (218.25.6.142) <br />
nefu_luyanshen&nbsp;&nbsp; pts/48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 12:59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (218.25.6.142) <br />
shuzigui&nbsp;&nbsp; pts/21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 12:11&nbsp;&nbsp;&nbsp; (121.35.248.193) <br />
tomotoboy&nbsp;&nbsp; pts/41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 13:31&nbsp;&nbsp; (219.221.99.155) <br />
waterlooz&nbsp;&nbsp; pts/25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 08:48&nbsp;&nbsp; (121.0.29.225) <br />
wsoangel&nbsp;&nbsp; pts/35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 13:40&nbsp;&nbsp;&nbsp; (116.233.219.10) <br />
xp55699312&nbsp;&nbsp; pts/42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 14:12&nbsp; (61.152.132.103) <br />
zyy0904&nbsp;&nbsp;&nbsp; pts/43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 13:53&nbsp;&nbsp;&nbsp; (125.33.195.36) <br />
-bash-3.00$ cat sort.txt <br />
605408211&nbsp;&nbsp; pts/16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 13:54&nbsp;&nbsp; (218.0.1.42) <br />
caodejun&nbsp;&nbsp; pts/44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 14:16&nbsp;&nbsp;&nbsp; (219.148.133.31) <br />
duke1988&nbsp;&nbsp; pts/45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jul 31 14:41&nbsp;&nbsp;&nbsp; (218.104.163.66) <br />
-bash-3.00$ join sed.txt sort.txt <br />
605408211 pts/16 Jul 31 13:54 (218.0.1.42) pts/16 Jul 31 13:54 (218.0.1.42) <br />
caodejun pts/44 Jul 31 14:16 (219.148.133.31) pts/44 Jul 31 14:16 (219.148.133.31) <br />
duke1988 pts/45 Jul 31 14:41 (218.104.163.66) pts/45 Jul 31 14:41 (218.104.163.66) <br />
<br />
选择匹配 <br />
-bash-3.00$ join -a1 -a2&nbsp; sed.txt sort.txt <br />
605408211 pts/16 Jul 31 13:54 (218.0.1.42) pts/16 Jul 31 13:54 (218.0.1.42) <br />
caodejun pts/44 Jul 31 14:16 (219.148.133.31) pts/44 Jul 31 14:16 (219.148.133.31) <br />
duke1988 pts/45 Jul 31 14:41 (218.104.163.66) pts/45 Jul 31 14:41 (218.104.163.66) <br />
liuzk423 pts/6 Jul 20 08:27 (219.245.104.240) <br />
nefu_luyanshen pts/23 Jul 31 14:33 (218.25.6.142) <br />
nefu_luyanshen pts/48 Jul 31 12:59 (218.25.6.142) <br />
shuzigui pts/21 Jul 31 12:11 (121.35.248.193) <br />
tomotoboy pts/41 Jul 31 13:31 (219.221.99.155) <br />
waterlooz pts/25 Jul 31 08:48 (121.0.29.225) <br />
wsoangel pts/35 Jul 31 13:40 (116.233.219.10) <br />
xp55699312 pts/42 Jul 31 14:12 (61.152.132.103) <br />
zyy0904 pts/43 Jul 31 13:53 (125.33.195.36) <br />
-bash-3.00$ join -o 1.1 2.2&nbsp; sed.txt sort.txt <br />
605408211 pts/16 <br />
caodejun pts/44 <br />
duke1988 pts/45 <br />
-bash-3.00$ join -o 1.1 2.2&nbsp; 2.3 sed.txt sort.txt <br />
605408211 pts/16 Jul <br />
caodejun pts/44 Jul <br />
duke1988 pts/45 Jul <br />
<br />
<br />
&#8226; cut <br />
cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。 <br />
下一节将介绍粘贴用法。 <br />
cut一般格式为： <br />
cut [options] file1 file2 <br />
下面介绍其可用选项： <br />
-c list&nbsp; 指定剪切字符数。 <br />
-f field&nbsp; 指定剪切域数。 <br />
-d&nbsp;&nbsp; 指定与空格和t a b键不同的域分隔符。 <br />
- c用来指定剪切范围，如下所示： <br />
- c 1，5-7&nbsp; 剪切第1个字符，然后是第5到第7个字符。 <br />
-c1-50&nbsp; 剪切前5 0个字符。 <br />
-f 格式与- c相同。 <br />
-f 1，5&nbsp; 剪切 第1域，第5域。 <br />
- f 1，10-12&nbsp; 剪切第1域，第1 0域到第1 2域。 <br />
<br />
-bash-3.00$ ps -ef | cut -c1-8 <br />
-bash-3.00$ ps -ef | cut -d: -f1 <br />
-bash-3.00$ ps -ef | cut -d: -f1，3 <br />
<br />
<br />
&#8226; paste <br />
cut用来从文本文件或标准输出中抽取数据列或者域，然后再用 paste可以将这些数据粘贴 <br />
起来形成相关文件。粘贴两个不同来源的数据时，首先需将其分类，并确保两个文件行数相 <br />
同。 <br />
paste将按行将不同文件行信息放在一行。缺省情况下， paste连接时，用空格或tab键分隔 <br />
新行中不同文本，除非指定- d选项，它将成为域分隔符。paste格式为： <br />
paste -d -s -file1 file2 <br />
选项含义如下： <br />
-d&nbsp;&nbsp; 指定不同于空格或t a b键的域分隔符。例如用@分隔域，使用- d @。 <br />
-s&nbsp;&nbsp; 将每个文件合并成行而不是按行粘贴。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 使用标准输入。例如ls -l |paste ，意即只在一列上显示输出。 <br />
<br />
<br />
&#8226; split <br />
split用来将大文件分割成小文件。有时文件越来越大，传送这些文件时，首先将其分割可 <br />
能更容易。使用v i或其他工具诸如sort时，如果文件对于工作缓冲区太大，也会存在一些问题。 <br />
因此有时没有选择余地，必须将文件分割成小的碎片。 <br />
split命令一般格式： <br />
split -output_file-size input-filename output-filename <br />
这里output_file-size 指的是文本文件被分割的行数。 <br />
-bash-3.00$ ps -ef |split -10 <br />
-bash-3.00$ ls <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>a.out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; greeting.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sort.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xac&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xai&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xao
            <tr>
                <td>
                <tr>
                    <td>append.sed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grepgrepstrings&nbsp; nohup.out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xaj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xap
                    <tr>
                        <td>
                        <tr>
                            <td>change.sed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grepstr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readme.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xae&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xak&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xaq
                            <tr>
                                <td>
                                <tr>
                                    <td>core.log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hello&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seawolf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.online&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xaf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xar
                                    <tr>
                                        <td>
                                        <tr>
                                            <td>factorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hello.cpp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sed.out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xaa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xam
                                            <tr>
                                                <td>
                                                <tr>
                                                    <td>factorial.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sed.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xah&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xan</td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        </div>
<img src ="http://www.blogjava.net/jzone/aggbug/304080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:57 <a href="http://www.blogjava.net/jzone/articles/304080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>