<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>午夜咖啡 - linux category</title>
  <link>http://jolestar.com/categories/linux/</link>
  <description>jolestar&#039;s blog, 放羊娃王老五的博客</description>
  <language>zh</language>
  <copyright>jolestar</copyright>
  <lastBuildDate>Mon, 30 Nov 2009 05:17:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>OpenSuse 11.2 正式发布</title>
    <link>http://jolestar.com/2009/11/13/1258074840000.html</link>
    
      
      
        <description>
          &lt;p&gt;&lt;a href=&#034;http://news.opensuse.org/2009/11/12/opensuse-11-2-released/&#034; target=&#034;_blank&#034;&gt;http://news.opensuse.org/2009/11/12/opensuse-11-2-released/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OpenSuse11.2 将 KDE 4.3作为默认桌面&lt;/p&gt;
&lt;p&gt;内核使用最新的2.6.31。 2.6.31后，桌面速度确实快了许多，启动速度也快了许多。&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://jolestar.com/2009/11/13/1258074840000.html&#034;&gt;阅读全文...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2009/11/13/1258074840000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2009/11/13/1258074840000.html</guid>
    <pubDate>Fri, 13 Nov 2009 01:14:00 GMT</pubDate>
  </item>
  
  <item>
    <title>eclipse在新版本GTK 上的一个bug--鼠标点击按钮无响应的解决办法</title>
    <link>http://jolestar.com/2009/11/04/1257305160000.html</link>
    
      
      
        <description>
          &lt;p&gt;昨天手闲，升级了一下系统，结果今天写程序，发现eclipse的next和finish按钮点击没反应了，什么都新建不了。以为是啥插件装错了，启动了一个新下载的eclipse，也不行。&lt;/p&gt;
&lt;p&gt;应该是系统问题了。&lt;/p&gt;
&lt;p&gt;搜索了一下，果然是新版本的GTK 和 eclipse 冲突。&lt;/p&gt;
&lt;p&gt;我用的系统是opensuse11.2&lt;/p&gt;
&lt;p&gt;GTK是&lt;span style=&#034;font-family: &#039;Verdana ,Geneva ,Arial ,Helvetica ,sans-serif&#039;; font-size: small; color: #000000;&#034;&gt; 2.18.1-3.5&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://jolestar.com/2009/11/04/1257305160000.html&#034;&gt;阅读全文...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2009/11/04/1257305160000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2009/11/04/1257305160000.html</guid>
    <pubDate>Wed, 04 Nov 2009 03:26:00 GMT</pubDate>
  </item>
  
  <item>
    <title>linux下的几款绘图(Flowchart,UML)软件</title>
    <link>http://jolestar.com/2009/10/20/1256005620000.html</link>
    
      
      
        <description>
          &lt;p&gt;搜集了几款linux下的绘图(Flowchart,UML)软件&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://jolestar.com/2009/10/20/1256005620000.html&#034;&gt;阅读全文...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2009/10/20/1256005620000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2009/10/20/1256005620000.html</guid>
    <pubDate>Tue, 20 Oct 2009 02:27:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Avidemux简易教程</title>
    <link>http://jolestar.com/2009/10/17/1255782360000.html</link>
    
      
      
        <description>
          &lt;p&gt;&lt;strong&gt;Avidemux&lt;/strong&gt; 是一款开源的视频编辑软件。用C++开发,界面基于GTK,支持大多数linux系统，也有Win32以及Mac OS X版本.本文介绍了Avidemux的简单使用，剪辑视频以及转换格式。&lt;/p&gt;
&lt;p&gt;Avidemux官方网站:&lt;a href=&#034;http://avidemux.org/&#034; target=&#034;_blank&#034;&gt;http://avidemux.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;教程地址:&lt;a href=&#034;http://forum.videohelp.com/topic357763.html&#034; target=&#034;_blank&#034;&gt;http://forum.videohelp.com/topic357763.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://jolestar.com/2009/10/17/1255782360000.html&#034;&gt;阅读全文...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2009/10/17/1255782360000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2009/10/17/1255782360000.html</guid>
    <pubDate>Sat, 17 Oct 2009 12:26:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Linux通过socks连接ssh服务器</title>
    <link>http://jolestar.com/2009/06/18/1245320460000.html</link>
    
      
      
        <description>
          &lt;p&gt;本文介绍了在linux下通过socks连接ssh服务器的一个工具 dante ，并给出具体的配置过程。最后又介绍了expect的用法， 用它来实现ssh的自动登录。&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://jolestar.com/2009/06/18/1245320460000.html&#034;&gt;阅读全文...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2009/06/18/1245320460000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2009/06/18/1245320460000.html</guid>
    <pubDate>Thu, 18 Jun 2009 10:21:00 GMT</pubDate>
  </item>
  
  <item>
    <title>linux下文件名特殊符号导致的一个诡异问题</title>
    <link>http://jolestar.com/2009/04/10/1239304860000.html</link>
    
      
        <description>
          &lt;p&gt;写了个bash脚本递归循环遍历文件夹。本地测试的好好的，结果传到服务器上就不行，一直死循环。以为是linux的版本问题，折腾了半天，才发现只有遍历特定那个文件夹的时候才会出现问题。&lt;/p&gt;
&lt;p&gt;最后发现竟然有个文件夹的名字叫 \&lt;/p&gt;
&lt;p&gt;当遍历到\文件夹的时候，路径就成为 /home/image/\&lt;/p&gt;
&lt;p&gt;而\符号在bash里是转义符号，必须用/home/image/\\才行， /home/image/\表示的还是 /home/image/。所以导致死循环了。&lt;/p&gt;
&lt;p&gt;然后又实验了一下，linux下的文件夹没有限制字符，所有的可打印字符都可以作文件夹名。比方
＊，\,|,&amp;lt;,&amp;gt;等在windows下是不允许做文件夹名的，但linux下就可以。但这样的文件名确实会给用户造成迷惑。比方一个叫
＊的文件夹，用户如果删除的时候忘记转义,输出成&amp;nbsp; rm -rf *，那就惨了。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;不知道linux的设计者为什么没考虑到这个问题？或者说考虑到了，但觉得这样的问题应该让用户自己掌控？&lt;/p&gt;&lt;p&gt;&lt;b&gt;Related Posts&lt;/b&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/11/13/1258074840000.html&#034;&gt;OpenSuse 11.2 正式发布&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/10/17/1255782360000.html&#034;&gt;Avidemux简易教程&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/10/20/1256005620000.html&#034;&gt;linux下的几款绘图(Flowchart,UML)软件&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/06/18/1245320460000.html&#034;&gt;Linux通过socks连接ssh服务器&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2008/12/18/1229541300000.html&#034;&gt;mysqldump导出数据到mssql&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2008/04/06/1207420620000.html&#034;&gt;Shell(Bash)学习笔记(一)&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;br/&gt;
        </description>
      
      
    
    
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2009/04/10/1239304860000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2009/04/10/1239304860000.html</guid>
    <pubDate>Thu, 09 Apr 2009 19:21:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Shell(Bash)学习笔记(一)</title>
    <link>http://jolestar.com/2008/04/06/1207420620000.html</link>
    
      
        <description>
          &lt;p&gt;以前只是简单看过一些文章，了解一些。平时也就是写个简单的命令组合啥的，没写过复杂的脚本。最近一次为了恢复数据，写了一下脚本，发现这东西光学不练确实不行。顺便记一下学习笔记备用。&lt;/p&gt;
&lt;p&gt;约定：本文中的shell特指bash.&lt;/p&gt;
&lt;p&gt;由于javaeye博客编辑器没有提供shell代码格式，就只好勉强用javascript脚本格式插入代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一.变量&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;变量直接赋值，不用提前声明。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;var=&#034;Hello&#034;
var=Hello
var=&#039;Hello&#039;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;注意几点：&lt;/p&gt;
&lt;p&gt;1.变量和值之间不能有空格，否则解释器会认为是几个命令。很多程序员的习惯是在＝号两边留空格为了好看，但这点在shell中行不通。&lt;/p&gt;
&lt;p&gt;2.字符串不必用&#034;号或者&#039;，上面的几种赋值方式是等价的。除非字符串之间有空格的时候。&lt;/p&gt;
&lt;p&gt;如:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;var=&#034;Hello World&#034;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;这时候就需要用引号。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3.&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;var=&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;这样的语句也是合法的，表示var的值为空。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4.使用变量的时候需要在变量前面加上$符号。这一点php程序员比较熟悉。 &lt;/p&gt;
&lt;p&gt;如:&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;echo $var&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;这也就是为什么shell中的字符串不必用引号的原因。你如果直接运行&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;echo var&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;系统会将var当作字符串，而不是变量处理。在变量前加上$号还有个好处就是在字符串中输出变量的时候，直接在字符串里面用变量就行。&lt;/p&gt;
&lt;p&gt;如：&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;var=World
var2=&#034;$var World&#034;
echo $var2&lt;/pre&gt;
&amp;nbsp;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;但与php不同的是变量赋值的时候不用加$符号。因为shell中没有==这个符号，判断相等也是用＝号。如果赋值的时候加上$号，会产生混淆。&lt;/p&gt;
&lt;p&gt;还有一点要注意的就是单引号（&#039;）字符串 中的变量不会被替换。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;var=World
var2=&#039;$var World&#039;
echo $var2&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;上面的语句输出结果：$var World&lt;/p&gt;
&lt;p&gt;这个可以用来输出$等特殊符号，而不用担心字符被当作变量替换。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二.语句&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.shell的语句不必用;号结束，除非是同一行写几个语句的时候。&lt;/p&gt;
&lt;p&gt;2.shell中的语句块不用{}号扩起来。if语句一般就用fi表示结束。当然这个也有特例，后面会提到。&lt;/p&gt;
&lt;p&gt;3.if语句
&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;if [ condition ]
then 
    action
elif [ condition2 ]
then 
    action2
.
.
.
elif [ condition3 ]
then 
else
    actionx
fi&lt;/pre&gt;
&amp;nbsp;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;需要注意的是shell中没有elseif，而是elif(这个缩写也太变态了吧，有必要么？).&lt;/p&gt;
&lt;p&gt;每个或者elif后跟着then，并且要换行或者用;分开。then可以和后面的action在一行。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3.for循环
&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;var=&#034;one two three four&#034;
for x in $var
do
     echo $x
done&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;for循环用do&amp;nbsp; 和 done表示开始结束，不要举一反三，认为是用 rof结束。&lt;/p&gt;
&lt;p&gt;4.while和util循环&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;while [ condition ]
 do
     statements
 done&lt;/pre&gt;
&amp;nbsp;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;until [ condition ]
 do
     statements
 done&lt;/pre&gt;
&amp;nbsp;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5.条件语句&lt;/p&gt;
&lt;p&gt; shell中的条件语句用[]号括起来，用于if,while,until等结构。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;条件判断用=号，而不是==号。条件语句与[] 号之间要有空格分开。&lt;/p&gt;
&lt;p&gt;如:
&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;gender=&#034;boy&#034;
if [ &#034;$gender&#034; = &#034;girl&#034; ]
then
      echo &#039;Welcome!&#039;
else
      echo &#039;We only welcome girl.&#039;
fi&lt;/pre&gt;
&amp;nbsp;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;还有要注意的是条件语句中=号两旁要有空格分开，否则shell会将条件语句整个作为一个字符串处理，条件永远为真。条件语句中的变量最好用&#034;号引
起来，否则如果该变量中有空格，shell就会报too many arguments错误。如果变量正好为空，则会报 =: unary
operator expected.错误。因为变量为空的话，条件语句少了一边，当然会出错。所以，&lt;strong&gt;将字符串&lt;/strong&gt;&lt;strong&gt;变量用双引号括起来是shell编程的好习惯,尤其在条件语句中。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;其他的比较符号,如 &amp;gt;,&amp;lt;，不能直接在条件语句中使用，因为&amp;gt;号在shell中有特殊含义。下面是shell的比较运算符号表示方法:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:text&#034;&gt;算术比较运算符

num1-eq num2 	等于	[ 3 -eq $mynum ]
num1-ne num2 	不等于	[ 3 -ne $mynum ]
num1-lt num2 	小于	[ 3 -lt $mynum ]
num1-le num2 	小于或等于	[ 3 -le $mynum ]
num1-gt num2 	大于	[ 3 -gt $mynum ]
num1-ge num2 	大于或等于	[ 3 -ge $mynum ]&lt;/pre&gt;
&amp;nbsp;
&lt;pre name=&#034;code&#034; class=&#034;brush:text&#034;&gt;字符串比较运算符 

-z string 	如果 string长度为零，则为真 	[ -z &#034;$myvar&#034; ]
-n string 	如果 string长度非零，则为真 	[ -n &#034;$myvar&#034; ]
string1= string2 	如果 string1与 string2相同，则为真 	[ &#034;$myvar&#034; = &#034;one two three&#034; ]
string1!= string2 	如果 string1与 string2不同，则为真 	[ &#034;$myvar&#034; != &#034;one two three&#034; ]&lt;/pre&gt;
&lt;p&gt;6.case 语句&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;gender=&#034;boy&#034; 
case &#034;$gender&#034; in
      boy)
            echo &#034;We only welcome girl.&#034;
            ;;
      girl)
            echo &#039;Welcome !&#039;
            ;;
      *)
            echo &#034;unknow.&#034;
            ;;
 esac  &lt;/pre&gt;
&amp;nbsp;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;case语句的语法比较怪，乍一看比较别扭。每个pattern用 半括号括起来,用;;结束。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三.算术&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;shell 默认是用来处理字符串的，所以如果你直接运行:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;echo 1+1&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;它会直接输出1+1，而不会输出2。 如果需要计算表达式的值，则只需用&#034;$((&#034; 和 &#034;))&#034;将表达式
括起。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;echo $((1+1))&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四.函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;add(){
    result=0
    for n in $*
    do
        result=$(($result+$n))
    done
    return $result
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;执行:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;add 1 2 3
echo $?
echo $result&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;两个输出结果都是:6.&lt;/p&gt;
&lt;p&gt;这里需要几点说明.shell中是不能直接获得函数的返回值的，如果你要用函数返回值，只能用全局变量传输。
shell中的变量默认都是全局的，除非你在前面加了local修饰符。如上面的例子，在函数外面，result变量也是可见的。如果你在result前
加local修饰，result变量在函数外就不可见了。但shell会把函数返回值放在$?全局变量中，你可以用$?
来取得前个函数调用的返回值。$*可以获得函数的所有输入参数，$1表示第一个参数，以此类推。 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;五.其他&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;shell内置的一些特征，可以很容易的处理文件,以及和其他程序交互。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:text&#034;&gt;文件比较运算符

-e filename 	如果 filename存在，则为真 	[ -e /var/log/syslog ]
-d filename 	如果 filename为目录，则为真 	[ -d /tmp/mydir ]
-f filename 	如果 filename为常规文件，则为真 	[ -f /usr/bin/grep ]
-L filename 	如果 filename为符号链接，则为真 	[ -L /usr/bin/grep ]
-r filename 	如果 filename可读，则为真 	[ -r /var/log/syslog ]
-w filename 	如果 filename可写，则为真 	[ -w /var/mytmp.txt ]
-x filename 	如果 filename可执行，则为真 	[ -L /usr/bin/grep ]
filename1-nt filename2 	如果 filename1比 filename2新，则为真 	[ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 	如果 filename1比 filename2旧，则为真 	[ /boot/bzImage -ot arch/i386/boot/bzImage ]
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;for 循环中很容易遍历文件&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;for file in /home/*
do
   if [ -d &#034;$file&#034; ] 
   then
      echo $file is a directory
    fi
done&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;很容易调用其他程序的输出结果：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre name=&#034;code&#034; class=&#034;brush:bash&#034;&gt;for user in `awk -F&#034;:&#034; &#039;{ print $1 }&#039; /etc/passwd`
do
    echo find user $user
done&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;shell脚本中要使用其他命令的输出结果，只需用`符号把命令包含起来。注意：这个符号不是单引号，在键盘左上角那个位置。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;六. 后记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;基本的shell语法就学了这些，高级的还没弄通。这篇笔记也差不多长了，别的再边学边写。shell是基础，要配合awk，grep，sed这些工具才能发挥出效果。最近在看《unix编程艺术》,上面谈到了*nix系统的几个哲学基础原则，其中有个原则就是：&lt;/p&gt;
&lt;p&gt;&lt;em&gt;组合原则：设计时考虑拼接组合&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;*nix系统程序的的输入和输出一般都是简单，文本化，面向流的格式。这样便于程序和程序之间的交互和拼接。*nix系统下的程序一般都只完成单一功能，如果你需要要一个复杂的功能，那就需要把小程序拼接在一起。这一特征也决定了shell在*uix系统中的重要性。 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;七.shell学习资料&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.&lt;a href=&#034;http://www.ibm.com/developerworks/cn/linux/shell/&#034; target=&#034;_blank&#034;&gt;IBM Shell编程系列&amp;nbsp; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt; 本文中的许多例子以及资料就是来自该系列教程&lt;/p&gt;
&lt;p&gt;2.&lt;a href=&#034;http://www.gnu.org/software/bash/manual/bash.html&#034; target=&#034;_blank&#034;&gt;Bash 参考手册&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gnu的bash官方参考手册&lt;/p&gt;&lt;p&gt;&lt;b&gt;Related Posts&lt;/b&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/11/13/1258074840000.html&#034;&gt;OpenSuse 11.2 正式发布&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/10/17/1255782360000.html&#034;&gt;Avidemux简易教程&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/10/20/1256005620000.html&#034;&gt;linux下的几款绘图(Flowchart,UML)软件&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/06/18/1245320460000.html&#034;&gt;Linux通过socks连接ssh服务器&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2009/04/10/1239304860000.html&#034;&gt;linux下文件名特殊符号导致的一个诡异问题&lt;/a&gt;&lt;br/&gt;&lt;a href=&#034;http://jolestar.com/2008/12/18/1229541300000.html&#034;&gt;mysqldump导出数据到mssql&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;br/&gt;
        </description>
      
      
    
    
    
    <category>脚本语言</category>
    
    <category>linux</category>
    
    <comments>http://jolestar.com/2008/04/06/1207420620000.html#comments</comments>
    <guid isPermaLink="true">http://jolestar.com/2008/04/06/1207420620000.html</guid>
    <pubDate>Sat, 05 Apr 2008 18:37:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
