﻿<?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天空 任我翱翔-随笔分类-shell</title><link>http://www.blogjava.net/persister/category/37019.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 11 Sep 2010 00:28:41 GMT</lastBuildDate><pubDate>Sat, 11 Sep 2010 00:28:41 GMT</pubDate><ttl>60</ttl><item><title>shell学习三</title><link>http://www.blogjava.net/persister/archive/2009/03/30/262990.html</link><dc:creator>persister</dc:creator><author>persister</author><pubDate>Mon, 30 Mar 2009 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/persister/archive/2009/03/30/262990.html</guid><wfw:comment>http://www.blogjava.net/persister/comments/262990.html</wfw:comment><comments>http://www.blogjava.net/persister/archive/2009/03/30/262990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/persister/comments/commentRss/262990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/persister/services/trackbacks/262990.html</trackback:ping><description><![CDATA[shell的环境变量<br />
&nbsp;&nbsp;&nbsp; 可通过set命令查看，常见的有：<br />
&nbsp;&nbsp;&nbsp; HOME<br />
&nbsp;&nbsp;&nbsp; HOSTNAME<br />
&nbsp;&nbsp;&nbsp; LANG<br />
&nbsp;&nbsp;&nbsp; LC_CTYPE<br />
&nbsp;&nbsp;&nbsp; MAIL<br />
&nbsp;&nbsp;&nbsp; PS1<br />
&nbsp;&nbsp;&nbsp; PATH<br />
&nbsp;&nbsp;&nbsp; PWD<br />
&nbsp;&nbsp;&nbsp; SHELL<br />
&nbsp;&nbsp;&nbsp; TERM<br />
&nbsp;&nbsp;&nbsp; UID<br />
&nbsp;&nbsp;&nbsp; MAIL<br />
在shell里可以直接引用这些变量，如: echo $UID
<img src ="http://www.blogjava.net/persister/aggbug/262990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/persister/" target="_blank">persister</a> 2009-03-30 21:32 <a href="http://www.blogjava.net/persister/archive/2009/03/30/262990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell学习二</title><link>http://www.blogjava.net/persister/archive/2009/03/26/262122.html</link><dc:creator>persister</dc:creator><author>persister</author><pubDate>Thu, 26 Mar 2009 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/persister/archive/2009/03/26/262122.html</guid><wfw:comment>http://www.blogjava.net/persister/comments/262122.html</wfw:comment><comments>http://www.blogjava.net/persister/archive/2009/03/26/262122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/persister/comments/commentRss/262122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/persister/services/trackbacks/262122.html</trackback:ping><description><![CDATA[1、<span class="text_h1">条件判断式：</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">if [</span> 条件判断式 <span class="term_write">]; then</span><br />
            当条件判断式成立时，可以进行的指令工作内容；<br />
            <span class="term_write">fi</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">if [</span> 条件判断式 <span class="term_write">]; then</span><br />
            当条件判断式成立时，可以进行的指令工作内容；<br />
            <span class="term_write">else</span><br />
            当条件判断式不成立时，可以进行的指令工作内容；<br />
            <span class="term_write">fi</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
如果考虑更复杂的情况，则可以使用这个语法：<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">if [</span> 条件判断式一 <span class="term_write">]; then</span><br />
            当条件判断式一成立时，可以进行的指令工作内容；<br />
            <span class="term_write">elif [</span> 条件判断式二 <span class="term_write">]; then</span><br />
            当条件判断式二成立时，可以进行的指令工作内容；<br />
            <span class="term_write">else</span><br />
            当条件判断式一与二均不成立时，可以进行的指令工作内容；<br />
            <span class="term_write">fi</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp;&nbsp;&nbsp;shell举例：<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">read -p "Please input (Y/N): " yn<br />
            if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then<br />
            echo "OK, continue"<br />
            elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then<br />
            echo "Oh, interrupt!"<br />
            else<br />
            echo "I don't know what is your choise"<br />
            fi</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
2、<span class="text_h2">利用 case ..... esac 判断</span><br />
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">case</span> $变数名称 <span class="term_write">in</span><br />
            "第一个变数内容"<span class="term_write">)</span><br />
            程式段<br />
            <span class="term_write">;;</span><br />
            "第二个变数内容"<span class="term_write">)</span><br />
            程式段<br />
            <span class="term_write">;;</span><br />
            *<span class="term_write">)</span><br />
            不包含第一个变数内容与第二个变数内容的其他程式执行段<br />
            exit 1<br />
            <span class="term_write">;;</span><br />
            <span class="term_write">esac</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">case $1 in<br />
            "hello")<br />
            echo "Hello, how are you ?"<br />
            ;;<br />
            "")<br />
            echo "You MUST input parameters, ex&gt; $0 someword"<br />
            ;;<br />
            *)<br />
            echo "Usage $0 {hello}"<br />
            ;;<br />
            esac</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
3、<span class="text_h2">利用 function 功能</span><br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre>function fname() {<br />
            程式段<br />
            }<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp;&nbsp;&nbsp;注意：function 的设定一定要在程式的最前面<br />
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">function printit(){<br />
            echo "Your choice is $1"<br />
            }<br />
            echo "This program will print your selection !"<br />
            case $1 in<br />
            "one")<br />
            <strong>printit 1</strong><br />
            ;;<br />
            "two")<br />
            <strong>printit 2</strong><br />
            ;;<br />
            "three")<br />
            <strong>printit 3</strong><br />
            ;;<br />
            *)<br />
            echo "Usage {one|two|three}"<br />
            ;;<br />
            esac</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
4、<span class="text_h1">loop</span>&nbsp;&nbsp;&nbsp;&nbsp;
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">while [</span> condition <span class="term_write">]<br />
            do</span><br />
            程式段落<br />
            <span class="term_write">done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="text_import1">当 condition 条件成立时，就进行循环，直到 condition 的条件不成立才停止</span>。<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">until [</span> condition <span class="term_write">]<br />
            do</span><br />
            程式段落<br />
            <span class="term_write">done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="text_import1">当 condition 条件成立时，就终止循环， 否则就持续进行。<br />
</span><br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">while [ "$yn" != "yes" ] &amp;&amp; [ "$yn" != "YES" ]<br />
            do<br />
            read -p "Please input yes/YES to stop this program: " yn<br />
            done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">until [ "$yn" == "yes" ] || [ "$yn" == "YES" ]<br />
            do<br />
            read -p "Please input yes/YES to stop this program: " yn<br />
            done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p><br />
5、<span class="text_h2">for...do....done</span><br />
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">for ((</span> 初始值<span class="term_write">;</span> 限制值<span class="term_write">;</span> 执行步阶 <span class="term_write">))<br />
            do</span><br />
            程式段<br />
            <span class="term_write">done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">s=0<br />
            for (( i=1; i&lt;=100; i=i+1 ))<br />
            do<br />
            s=$(($s+$i))<br />
            done<br />
            echo "The result of '1+2+3+...+100' is ==&gt; $s"</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
for循环不止用在数字的循环，非数字也是可以的：<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">for</span> $var <span class="term_write">in</span> con1 con2 con3 ...<br />
            <span class="term_write">do</span><br />
            程式段<br />
            <span class="term_write">done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write">for animal in dog cat elephant<br />
            do<br />
            echo "There are ""$animal""s.... "<br />
            done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
复杂一点的：<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre><span class="term_write"><span class="term_say"># 1. 先看看这个目录是否存在啊？</span><br />
            read -p "Please input a directory: " dir<br />
            if [ "$dir" == "" ] || [ ! -d "$dir" ]; then<br />
            echo "The $dir is NOT exist in your system."<br />
            exit 1<br />
            fi<br />
            <span class="term_say"># 2. 开始测试档案啰～</span><br />
            filelist=`ls $dir`<br />
            for filename in $filelist<br />
            do<br />
            perm=""<br />
            test -r "$dir/$filename" &amp;&amp; perm="$perm readable"<br />
            test -w "$dir/$filename" &amp;&amp; perm="$perm writable"<br />
            test -x "$dir/$filename" &amp;&amp; perm="$perm executable"<br />
            echo "The file $dir/$filename's permission is $perm "<br />
            done</span><br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/persister/aggbug/262122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/persister/" target="_blank">persister</a> 2009-03-26 15:13 <a href="http://www.blogjava.net/persister/archive/2009/03/26/262122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Shell的参数设定</title><link>http://www.blogjava.net/persister/archive/2008/12/29/248964.html</link><dc:creator>persister</dc:creator><author>persister</author><pubDate>Mon, 29 Dec 2008 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/persister/archive/2008/12/29/248964.html</guid><wfw:comment>http://www.blogjava.net/persister/comments/248964.html</wfw:comment><comments>http://www.blogjava.net/persister/archive/2008/12/29/248964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/persister/comments/commentRss/248964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/persister/services/trackbacks/248964.html</trackback:ping><description><![CDATA[<p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">两种变数取用的方法，分别是这样：</span></p>
<table style="border: 2.25pt groove #ffcccc; background-color: black; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; width: 363.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" width="484" border="1" cellpadding="0">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo $HOME</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${HOME}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">那么，在那个 ${variable} 的使用方法中，其实，我们还可以将变数进行一些修订的工作喔！ 只要加上一些字符标志，后面再接着使用比对字串，就能够修改变数的内容了！我们取底下的例子来说明：在底下的例子中，假设我的变数名称为 vbird ，且内容为 /home/vbird/testing/testing.x.sh。</span></p>
<table style="border: 2.25pt groove #ffcccc; background-color: black; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; width: 363.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" width="484" border="1" cellpadding="0">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">1. </span><span style="font-size: 12pt; color: white; font-family: 宋体;">完整呈现 vbird 这个变数的内容；</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# vbird="/home/vbird/testing/testing.x.sh"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">/home/vbird/testing/testing.x.sh</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">2. </span><span style="font-size: 12pt; color: white; font-family: 宋体;">在 vbird 变数中，从最前面开始比对，若开头为 / ，则删除两个 / </span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">&nbsp;&nbsp; </span><span style="font-size: 12pt; color: white; font-family: 宋体;">之间的所有资料，亦即 /*/</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird##/*/}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">testing.x.sh&nbsp;&nbsp;&nbsp; &lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">删除了 /home/vbird/testing/</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird#/*/}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">vbird/testing/testing.x.sh&nbsp;&nbsp; &lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">仅删除 /home/ 而已</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">这两个小例子有趣了～变数名称后面如果接了两个 ## ，表示在 ##</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">后面的字串取&#8216;最长的&#8217;那一段；如果仅有一个 # ，表示取&#8216;最小的那一段&#8217;喔！</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">3. </span><span style="font-size: 12pt; color: white; font-family: 宋体;">呈上题，如果是从后面开始，删除 /* 呢？</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird%%/*/}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">/home/vbird/testing/testing.x.sh&nbsp;&lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">都没被删除</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird%%/*}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">&nbsp;&nbsp;&nbsp; &lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">被删除光了！</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird%/*}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">/home/vbird/testing&nbsp;&nbsp; &lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">只删除 /testing.x.sh 部分</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">这个例子当中需要特别注意，那个 % 比对的是&#8216;最后面那个字元&#8217;的意思，</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">所以啰，第一个方式当然不对～因为 vbird 这个变数的内容最后面是 h 而不是 / 啊！</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">至于 %%/* 则是删除&#8216;最长的那个 /* &#8217;，当然就是全部喔！而 %/* 则是最短的那个！</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">4. </span><span style="font-size: 12pt; color: white; font-family: 宋体;">将 vbird 变数中的 testing 取代为 TEST</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird/testing/TEST}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">/home/vbird/TEST/testing.x.sh</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo ${vbird//testing/TEST}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">/home/vbird/TEST/TEST.x.sh</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">如果变数后面接的是 / 时，那么表示后面是进行&#8216;取代&#8217;的工作～而且仅取代&#8216;第一个&#8217;</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">但如果是 // ，则表示全部的字串都取代啊！</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">这里您稍微留意一下就好了～反正就是变数后面可以接 #, ##, %, %%, /, // ， 而他们存在的意义并不相同的啦～<span><br />
<br />
</span>另外，几个不同的变数内容还可以进行判断呢！ 举例来说，目前我需要用到两个变数，分别是 var 与 str ， 那我想要针对 str 这个变数内容是否有设定成一个字串，亦即 "expr" 来决定 var 的内容。 那我可以使用什么方法来进行判断呢？如果您会写 shell script 的话， 直接用 shell script 就好了，如果不会写，那么我们就透过简单的变数判断吧！</span></p>
<div align="right">
<table style="border: 2.25pt groove #ffcccc; width: 90%;" width="90%" border="0" cellpadding="0">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p style="text-align: left;" align="left"><strong><span style="font-size: 12pt; font-family: 宋体;">Tips:</span></strong><span style="font-size: 12pt; font-family: 宋体;"><br />
            </span><em><span style="font-size: 12pt; color: darkgreen; font-family: 宋体;">底下的例子当中，那个 var 与 str 为变数，我们想要针对 str 是否有设定来决定 var 的值喔！ 一般来说， str: 代表&#8216;str 没设定或为空的字串时&#8217;；至于 str 则仅为&#8216;没有该变数&#8217;。 </span></em></p>
            </td>
            <td style="padding: 0.75pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;"><!--[if gte vml 1]>
            <![endif]--></span></p>
            <br />
            </td>
        </tr>
    </tbody>
</table>
</div>
<table style="border: 2.25pt groove #ffcccc; background-color: lightyellow; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; width: 95%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" width="95%" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="padding: 2.25pt; background-color: lightblue; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p style="text-align: center;" align="center"><span style="font-size: 12pt; font-family: 宋体;">变数设定方式</span></p>
            </td>
            <td style="padding: 2.25pt; background-color: lightblue; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p style="text-align: center;" align="center"><span style="font-size: 12pt; font-family: 宋体;">str </span><span style="font-size: 12pt; font-family: 宋体;">没有设定</span></p>
            </td>
            <td style="padding: 2.25pt; background-color: lightblue; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p style="text-align: center;" align="center"><span style="font-size: 12pt; font-family: 宋体;">str </span><span style="font-size: 12pt; font-family: 宋体;">为空字串</span></p>
            </td>
            <td style="padding: 2.25pt; background-color: lightblue; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p style="text-align: center;" align="center"><span style="font-size: 12pt; font-family: 宋体;">str </span><span style="font-size: 12pt; font-family: 宋体;">已设定非为空字串</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str-expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=$str</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str:-expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=$str</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str+expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str:+expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=expr</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str=expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">str=expr<br />
            var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">str </span><span style="font-size: 12pt; font-family: 宋体;">不变<span><br />
            var=</span></span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">str </span><span style="font-size: 12pt; font-family: 宋体;">不变<span><br />
            var=$str</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str:=expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">str=expr<br />
            var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">str=expr<br />
            var=expr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">str </span><span style="font-size: 12pt; font-family: 宋体;">不变<span><br />
            var=$str</span></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str?expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">expr </span><span style="font-size: 12pt; font-family: 宋体;">输出至 stderr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=str</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str:?expr}</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">expr </span><span style="font-size: 12pt; font-family: 宋体;">输出至 stderr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">expr </span><span style="font-size: 12pt; font-family: 宋体;">输出至 stderr</span></p>
            </td>
            <td style="padding: 2.25pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">var=str</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;"><br />
</span><span style="font-size: 12pt; font-family: 宋体;">根据上面这张表，我们来进行几个范例的练习吧！ ^_^</span></p>
<table style="border: 2.25pt groove #ffcccc; background-color: black; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; -moz-background-size: auto auto; width: 363.15pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" width="484" border="1" cellpadding="0">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">范例一：若 str 这个变数内容存在，则 var 设定为 str ，否则<span> var </span>设定为 "newvar"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# unset str; var=${str-newvar}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo var="$var", str="$str"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">var=newvar, str=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">因为 str 不存在，所以 var 为 newvar</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# str="oldvar"; var=${str-newvar}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo var="$var", str="$str"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">var=oldvar, str=oldvar&nbsp;&lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">因为 str 存在，所以 var 等于<span> str </span>的内容</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">范例二：若 str 不存在，则 var 与 str 均设定为<span> newvar</span>，否则仅 var 为 newvar</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# unset str; var=${str=newvar}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo var="$var", str="$str"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">var=newvar, str=newvar&nbsp;&lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">因为 str 不存在，所以 var/str 均为 newvar</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# str="oldvar"; var=${str=newvar}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo var="$var", str="$str"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">var=oldvar, str=oldvar&nbsp;&lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">因为 str 存在，所以 var 等于<span> str </span>的内容</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">范例三：若 str 这个变数存在，则 var 等于 str ，否则输出<span> "novar"</span></span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# unset str; var=${str?novar}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">-bash: str: novar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">因为 str 不存在，所以输出错误讯息 </span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# str="oldvar"; var=${str?novar}</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">[root@linux ~]# echo var="$var", str="$str"</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;">var=oldvar, str=oldvar&nbsp;&lt;==</span><span style="font-size: 12pt; color: white; font-family: 宋体;">因为 str 存在，所以 var 等于<span> str </span>的内容</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">上面这三个案例都没有提到当 str 有设定，且为空字串的情况喔！</span></p>
            <p style="text-align: left;" align="left"><span style="font-size: 12pt; color: white; font-family: 宋体;"># </span><span style="font-size: 12pt; color: white; font-family: 宋体;">您可以自行测试一下哩！</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-size: 12pt; font-family: 宋体;">虽然猛一看，觉得变数没有什么奇特的地方，但是，如果仔细瞧一瞧，嘿！一堆环境变数与系统资源方面的变数， 可是会影响到我们在 bash 里头是否能够顺利作业的呢！例如 PATH 啊、ulimit 之类的～ 所以，您还是得要了解变数这个玩意才行喔！ ^_^<br />
<br />
使用最多的就是下面两个<br />
</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str-expr}：只要有输入，就使用输入的值，哪怕输入为空字符串，否则使用expr的默认值<br />
</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 细明体;">var=${str:-expr}：只有输入非空字符串时，才使用输入值，否则使用expr的默认值</span></p>
<img src ="http://www.blogjava.net/persister/aggbug/248964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/persister/" target="_blank">persister</a> 2008-12-29 17:44 <a href="http://www.blogjava.net/persister/archive/2008/12/29/248964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell学习一</title><link>http://www.blogjava.net/persister/archive/2008/12/29/248884.html</link><dc:creator>persister</dc:creator><author>persister</author><pubDate>Mon, 29 Dec 2008 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/persister/archive/2008/12/29/248884.html</guid><wfw:comment>http://www.blogjava.net/persister/comments/248884.html</wfw:comment><comments>http://www.blogjava.net/persister/archive/2008/12/29/248884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/persister/comments/commentRss/248884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/persister/services/trackbacks/248884.html</trackback:ping><description><![CDATA[&nbsp; 今天放仿照书上写了一个Shell，总结如下：<br />
1、定义变量时，等号两边不能空白。即name = "$1" 这种标准的Java写法是错误的，必须写成<br />
&nbsp;&nbsp; name="$1",否则name就被当成是命令，而非变量<br />
2、传递进来的参数使用"$i"即"$1"、"$2"来提取第i个变量，"$0"个是命令本身，而"$#"表示参数<br />
&nbsp;&nbsp; 的个数。<br />
3、if的判断语句[ ]中，判断条件必须和"["或"]"有空白隔开即 if [ "$#" != 1 ] 而不能["$#" !=1]<br />
4、如果执行命令则命令写在"`"中，而不是"'"中，这点要特别注意，"`"符和"~"通常是同一个键，在<br />
&nbsp;&nbsp; 键盘的左上方位置。<br />
5、追踪shell的执行过程命令：<a>sh -x hello.sh</a>。执行此命令后，执行的结果将变量全部替代为执行值。<br />
6、读入和使用变量：<br />
&nbsp;&nbsp;&nbsp;&nbsp;read -p "Please input your first name: " firstname<br />
&nbsp;&nbsp;&nbsp;&nbsp;read -p "Please input your last name:&nbsp; " lastname<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo -e "\nYour full name is: $firstname $lastname"<br />
7、数值运算：<br />
&nbsp;&nbsp;&nbsp;&nbsp;read -p "first number:&nbsp; " firstnu<br />
&nbsp;&nbsp;&nbsp;&nbsp;read -p "second number: " secnu<br />
&nbsp;&nbsp;&nbsp;&nbsp;total=$(($firstnu*$secnu))<br />
&nbsp;&nbsp;&nbsp;&nbsp;另外一种方式：<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span class="text_import2">declare -i total=$firstnu*$secnu</span>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;双括号和定义整型都可以做到数值的运算功能<br />
8、<span class="text_h2">利用 test 指令的测试功能</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span class="term_command">test -e /dmtsai &amp;&amp; echo "exist" || echo "Not exist"</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<table width="85%" bgcolor="lightyellow" border="1" cellpadding="3" cellspacing="0">
    <tbody>
        <tr align="center" bgcolor="lightblue">
            <td width="100">测试的标志</td>
            <td>代表意义</td>
        </tr>
        <tr bgcolor="lightblue">
            <td colspan="2">1. 关于某个档名的&#8216;类型&#8217;侦测(存在与否)，如 test -e filename</td>
        </tr>
        <tr>
            <td align="center">-e</td>
            <td>该&#8216;档名&#8217;是否存在？(常用)</td>
        </tr>
        <tr>
            <td align="center">-f</td>
            <td>该&#8216;档名&#8217;是否为档案(file)？(常用)</td>
        </tr>
        <tr>
            <td align="center">-d</td>
            <td>该&#8216;档名&#8217;是否为目录(directory)？(常用)</td>
        </tr>
        <tr>
            <td align="center">-b</td>
            <td>该&#8216;档名&#8217;是否为一个 block device 装置？</td>
        </tr>
        <tr>
            <td align="center">-c</td>
            <td>该&#8216;档名&#8217;是否为一个 character device 装置？</td>
        </tr>
        <tr>
            <td align="center">-S</td>
            <td>该&#8216;档名&#8217;是否为一个 Socket 档案？</td>
        </tr>
        <tr>
            <td align="center">-p</td>
            <td>该&#8216;档名&#8217;是否为一个 FIFO (pipe) 档案？</td>
        </tr>
        <tr>
            <td align="center">-L</td>
            <td>该&#8216;档名&#8217;是否为一个连结档？</td>
        </tr>
        <tr bgcolor="lightblue">
            <td colspan="2">2. 关于档案的权限侦测，如 test -r filename</td>
        </tr>
        <tr>
            <td align="center">-r</td>
            <td>侦测该档名是否具有&#8216;可读&#8217;的属性？</td>
        </tr>
        <tr>
            <td align="center">-w</td>
            <td>侦测该档名是否具有&#8216;可写&#8217;的属性？</td>
        </tr>
        <tr>
            <td align="center">-x</td>
            <td>侦测该档名是否具有&#8216;可执行&#8217;的属性？</td>
        </tr>
        <tr>
            <td align="center">-u</td>
            <td>侦测该档名是否具有&#8216;SUID&#8217;的属性？</td>
        </tr>
        <tr>
            <td align="center">-g</td>
            <td>侦测该档名是否具有&#8216;SGID&#8217;的属性？</td>
        </tr>
        <tr>
            <td align="center">-k</td>
            <td>侦测该档名是否具有&#8216;Sticky bit&#8217;的属性？</td>
        </tr>
        <tr>
            <td align="center">-s</td>
            <td>侦测该档名是否为&#8216;非空白档案&#8217;？</td>
        </tr>
        <tr bgcolor="lightblue">
            <td colspan="2">3. 两个档案之间的比较，如： test file1 -nt file2</td>
        </tr>
        <tr>
            <td align="center">-nt</td>
            <td>(newer than)判断 file1 是否比 file2 新</td>
        </tr>
        <tr>
            <td align="center">-ot</td>
            <td>(older than)判断 file1 是否比 file2 旧</td>
        </tr>
        <tr>
            <td align="center">-ef</td>
            <td>判断 file2 与 file2 是否为同一档案，可用在判断 hard link 的判定上。 主要意义在判定，两个档案是否均指向同一个 inode 哩！</td>
        </tr>
        <tr bgcolor="lightblue">
            <td colspan="2">4. 关于两个整数之间的判定，例如 test n1 -eq n2</td>
        </tr>
        <tr>
            <td align="center">-eq</td>
            <td>两数值相等 (equal)</td>
        </tr>
        <tr>
            <td align="center">-ne</td>
            <td>两数值不等 (not equal)</td>
        </tr>
        <tr>
            <td align="center">-gt</td>
            <td>n1 大于 n2 (greater than)</td>
        </tr>
        <tr>
            <td align="center">-lt</td>
            <td>n1 小于 n2 (less than)</td>
        </tr>
        <tr>
            <td align="center">-ge</td>
            <td>n1 大于等于 n2 (greater than or equal)</td>
        </tr>
        <tr>
            <td align="center">-le</td>
            <td>n1 小于等于 n2 (less than or equal)</td>
        </tr>
        <tr bgcolor="lightblue">
            <td colspan="2">5. 判定字串的资料</td>
        </tr>
        <tr>
            <td align="center">test -z string</td>
            <td>判定字串是否为 0 ？若 string 为空字串，则为 true</td>
        </tr>
        <tr>
            <td align="center">test -n string</td>
            <td>判定字串是否非为 0 ？若 string 为空字串，则为 false。<br />
            注： -n 亦可省略</td>
        </tr>
        <tr>
            <td align="center">test str1 = str2</td>
            <td>判定 str1 是否等于 str2 ，若相等，则回传 true</td>
        </tr>
        <tr>
            <td align="center">test str1 != str2</td>
            <td>判定 str1 是否不等于 str2 ，若相等，则回传 false</td>
        </tr>
        <tr bgcolor="lightblue">
            <td colspan="2">6. 多重条件判定，例如： test -r filename -a -x filename</td>
        </tr>
        <tr>
            <td align="center">-a</td>
            <td>(and)两状况同时成立！例如 test -r file -a -x file，则 file 同时具有 r 与 x 权限时，才回传 true。</td>
        </tr>
        <tr>
            <td align="center">-o</td>
            <td>(or)两状况任何一个成立！例如 test -r file -o -x file，则 file 具有 r 或 x 权限时，就可回传 true。</td>
        </tr>
        <tr>
            <td align="center">!</td>
            <td>反相状态，如 test ! -x file ，当 file 不具有 x 时，回传 true</td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp;&nbsp;&nbsp;shell中使用举例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo -e "The program will show you that filename is exist which input by you.\n\n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;read -p "Input a filename : " filename<br />
&nbsp;&nbsp;&nbsp;&nbsp;test -z $filename &amp;&amp; echo "You MUST input a filename." &amp;&amp; exit 0<br />
<span class="term_say">&nbsp;&nbsp;&nbsp;&nbsp;# 2. 判断档案是否存在？</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;test ! -e $filename &amp;&amp; echo "The filename $filename DO NOT exist" &amp;&amp; exit 0<br />
<span class="term_say">&nbsp;&nbsp;&nbsp;&nbsp;# 3. 开始判断档案类型与属性</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;test -f $filename &amp;&amp; filetype="regulare file"<br />
&nbsp;&nbsp;&nbsp;&nbsp;test -d $filename &amp;&amp; filetype="directory"<br />
&nbsp;&nbsp;&nbsp;&nbsp;test -r $filename &amp;&amp; perm="readable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;test -w $filename &amp;&amp; perm="$perm writable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;test -x $filename &amp;&amp; perm="$perm executable"<br />
<span class="term_say">&nbsp;&nbsp;&nbsp;&nbsp;# 4. 开始输出资讯！</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;echo "The filename: $filename is a $filetype"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo "And the permission are : $perm"<br />
<br />
9、<span class="text_h2">利用判断符号 [ ]<br />
&nbsp;&nbsp;&nbsp;&nbsp;read -p "Please input (Y/N): " yn<br />
&nbsp;&nbsp;&nbsp;&nbsp;[ "$yn" == "Y" -o "$yn" == "y" ] &amp;&amp; echo "OK, continue" &amp;&amp; exit 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;[ "$yn" == "N" -o "$yn" == "n" ] &amp;&amp; echo "Oh, interrupt!" &amp;&amp; exit 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo "I don't know what is your choise" &amp;&amp; exit 0<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;注意，在[ ]中的变量最好使用""括起来，否则容易出错<br />
&nbsp;&nbsp;&nbsp;&nbsp;举例来说，假如我设定了 name="VBird Tsai" ，然后这样判定：<br />
<table class="term">
    <tbody>
        <tr>
            <td class="term">
            <pre>[root@linux ~]# <span class="term_command">name="VBird Tsai"</span>
            [root@linux ~]# <span class="term_command">[ $name == "VBird" ]</span>
            bash: [: too many arguments
            </pre>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp;&nbsp;&nbsp;为什么呢？因为 $name 如果没有使用双引号刮起来，那么上面的判定式会变成：
<ul><span class="text_import2"><font face="细明体">[ VBird Tsai == "VBird" ] </font></span></ul>
    <ul>而不是我们要的： <span class="text_import2"><font face="细明体">[ "VBird Tsai" == "VBird" ] </font></span><font face="细明体"></font></ul>
        9、shell具体代码如下：<br />
        &nbsp;&nbsp; #!/bin/sh<br />
        &nbsp;&nbsp; #<br />
        &nbsp;&nbsp; # This is a simple shell program<br />
        &nbsp;&nbsp; #<br />
        &nbsp;&nbsp; # the first line starts with #!,it means to use /bin/sh to explain<br />
        &nbsp;&nbsp; # this scirpt<br />
        &nbsp;&nbsp; # other lines starting with # means comments,bash ignores these<br />
        &nbsp;&nbsp; #<br />
        <br />
        &nbsp;&nbsp; PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin<br />
        &nbsp;&nbsp; export PATH<br />
        <br />
        &nbsp;&nbsp; name="$1"<br />
        &nbsp;&nbsp; ip="163.26.197.1"<br />
        &nbsp;&nbsp; exacttime=`date +%Y%m%d`<br />
        <br />
        &nbsp;&nbsp; if [ $# != 1 ]; then<br />
        &nbsp;&nbsp;&nbsp; echo "Usage: $0 [username]"<br />
        &nbsp;&nbsp;&nbsp; exit<br />
        &nbsp;&nbsp; fi<br />
        <br />
        &nbsp;&nbsp; echo "today is $exacttime, your name is $name, from $ip"<br />
        &nbsp;&nbsp; echo<br />
        &nbsp;&nbsp; echo "Bye-Bye"<br />
        <br />
<img src ="http://www.blogjava.net/persister/aggbug/248884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/persister/" target="_blank">persister</a> 2008-12-29 14:04 <a href="http://www.blogjava.net/persister/archive/2008/12/29/248884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RedHat Linux中的例行性命令</title><link>http://www.blogjava.net/persister/archive/2008/12/09/245235.html</link><dc:creator>persister</dc:creator><author>persister</author><pubDate>Tue, 09 Dec 2008 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/persister/archive/2008/12/09/245235.html</guid><wfw:comment>http://www.blogjava.net/persister/comments/245235.html</wfw:comment><comments>http://www.blogjava.net/persister/archive/2008/12/09/245235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/persister/comments/commentRss/245235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/persister/services/trackbacks/245235.html</trackback:ping><description><![CDATA[<span class="text_import1">at</span> ： 这个工作仅执行一次就从 Linux 系统中的排程中取消；
<br />
<span class="text_import1">cron</span> ： 这个工作将持续例行性的作下去！<br />
<br />
at命令<br />
<br />
既然是工作排程，那么自然要有写入工作的纪录档啰！没错啦！ <span class="text_import2">我们可以使用 at
这个指令来帮忙写入工作纪录档，工作纪录档预设的放置目录在 /var/spool/at 底下，在写入 at
记录档后，该工作便进入排程当中并等待执行。</span> 当然啦，要让 /var/spool/at 目录底下的工作被实际运作，必须要启动我们上面提到的 atd
那个服务啦！<br />
<br />
不过，并不是所有的人都可以进行 at 工作排程喔！为什么？因为安全的理由啊～
很多主机被所谓的绑架后，最常发现的就是他们的系统当中有很多的怪客程式 (cracker program)
被写入例行性命令的排程当中了，所以，那些可恶的程式就可能定时或不定时的在你的系统当中工作， 呵呵！所以啰，除非是您认可的帐号，否则先不要让他们使用 at 吧！
此外，我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个档案来进行 at 的使用限制呢！ 加上这两个档案后， at
的工作情况其实是这样的：
<ol><span class="text_import2">
    <li>先找寻 <strong>/etc/at.allow</strong> 这个档案，写在这个档案中的使用者才能使用 at ，没有在这个档案中的使用者则不能使用 at (
    即使没有写在 at.deny 当中&nbsp;)；
    </li>
    <li>如果没有 /etc/at.allow 就寻找<strong> /etc/at.deny</strong> 这个档案，若写在这个 at.deny 的使用者则不能使用 at
    ，而没有在这个 at.deny 档案中的使用者，就可以使用 at 咯；
    </li>
    <li>如果两个档案都不存在，那么只有 root 可以使用 at 这个指令。 </li>
    </span></ol>
    上面的情况说明了，其实我们只要有 at.deny
    这个档案存在就好了，因为我们假设系统内的帐号都是懂得操作的使用者， 因此，预设让他们可以任意使用 at 这个好用的东西！这也是系统的预设值。我们的 FC4
    预设也是只有 /etc/at.deny 存在，而且该档案内并未有任何帐号资料！这表示任何人均可使用 at 啦！不过，万一你不希望有某些使用者使用 at
    的话，将那个使用者的帐号写入 /etc/at.deny 即可！ 一个帐号写一行。<br />
    <br />
    crontab命令<br />
    <br />
    例题：假若你的女朋友生日是 5 月 2 日，你想要在 5 月 1 日的 23:59 发一封信给他，这封信的内容已经写在
    /home/dmtsai/lover.txt 内了，该如何进行？<br />
    答：<br />
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp; 直接下达 crontab -e 之后，编辑成为：
    <ul>
        <ul><span class="text_import2"><font face="细明体">59 23 1 5 * mail kiki &lt;
            /home/dmtsai/lover.txt</font></span></ul>
            那样的话，每年 kiki
            都会收到你的这封信喔！（当然啰，信的内容就要每年变一变啦！）<br />
            <br />
        </ul>
        <span class="text_import1">01 * * * * root run-parts
        /etc/cron.hourly</span>：<br />
        五个数字后面接的是 root
        喔！没错，与 crontab -e 的内容是不太一样的！这个栏位的 root 代表的是&#8216; <span class="text_import2">执行的使用者身份为
        root</span> &#8217;当然啰，你 也可以将这一行改写成其他的身份哩！而 run-parts 代表后面接的 /etc/cron.hourly 是&#8216; <span class="text_import2">一个目录内（/etc/cron.hourly）的所有可执行档</span> &#8217;，这也就是说，<span class="text_import2">每个小时的 01 分，系统会以 root 的身份去 /etc/cron.hourly/
        这个目录下执行所有可以执行的档案</span>！后面的三行也都是类似的意思！你可以到 /etc/
        底下去看看，系统本来就预设了这四个目录了！你可以将每天需要执行的命令直接写到 /etc/cron.daily/ 即可，还不需要使用到 crontab -e
        的程式呢！方便吧
        <br />
        <br />
        基本上， /etc/crontab 这个档案里面支援两种下达指令的方式，一种是直接下达指令， 一种则是以目录来规划，例如：
        <ul>
            <li><span class="text_import1">指令型态</span><br />
            <font face="细明体">01 * * * * dmtsai
            mail -s "testing" kiki &lt; /home/dmtsai/test.txt</font><br />
            以 dmtsai
            这个使用者的身份，在每小时执行一次 mail 指令。<br />
            </li>
            <li><span class="text_import1">目录规划</span><br />
            <font face="细明体">*/5 * * * * root
            run-parts /root/runcron</font><br />
            建立一个 /root/runcron
            的目录，将要每隔五分钟执行的&#8216;可执行档&#8217;都写到该目录下， 就可以让系统每五分钟执行一次该目录下的所有可执行档。 </li>
        </ul>
        <br />
<img src ="http://www.blogjava.net/persister/aggbug/245235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/persister/" target="_blank">persister</a> 2008-12-09 13:29 <a href="http://www.blogjava.net/persister/archive/2008/12/09/245235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>