使用 Linux Dialog 图形化 Shell

最近在做自动化 Shell 脚本,用到一些 TUI 的内容。Linux 下的 Dialog 可以完成这个功能,正好在网上发现一篇 Linux Shell 图形化脚本文件,于是转过来并做了下整理。原文在这里:Linux dialog 详解(图形化shell)

Liunx 下的 Dialog 工具是一个可以和 Shell 脚本配合使用的文本界面下的创建对话框的工具。
每个对话框提供的输出有两种形式:
1、将所有输出到 stderr 输出,不显示到屏幕。
2、使用退出状态码:

选项
OK 0
NO 1
ESC 255

一、通用选项 Common Options

这个选项来设置 Dialog Box 的背景、颜色和标题等

--title          | 指定将在对话框的上方显示的标题字符串
--colors                | 解读嵌入式“\ Z”的对话框中的特殊文本序列,序列由下面的字符 0-7, b  B, u, U等,恢复正常的设置使用“\Zn”。
--no-shadow             | 禁止阴影出现在每个对话框的底部
--shadow                | 应该是出现阴影效果
--insecure              | 输入部件的密码时,明文显示不安全,使用星号来代表每个字符
--no-cancel             | 设置在输入框,菜单,和复选框中,不显示“cancel”项
--clear                 | 完成清屏操作。在框体显示结束后,清除框体。这个参数只能单独使用,不能和别的参数联合使用。
--ok-label <str>        | 覆盖使用“OK”按钮的标签,换做其他字符。
--cancel-label <str>    | 功能同上
--backtitle <backtitle> | 指定的backtitle字符串显示在背景顶端。
--begin <y> <x>         | 指定对话框左上角在屏幕的上的做坐标
--timeout <secs>        | 超时(返回的错误代码),如果用户在指定的时间内没有给出相应动作,就按超时处理
--defaultno             | 使的是默认值 yes/no,使用no
--sleep <secs>          | zz
--stderr                | 以标准错误方式输出
--stdout                | 以标准方式输出
--default-item <str>    | 设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认
</code></pre> 
 <h4>二、窗体类型</h4> 
 <p>常见的对话框控件选项有:</p> 
 <pre><code class="plain">--calendar     | 提供了一个日历,让你可以选择日期
--checklist    | 允许你显示一个选项列表,每个选项都可以被单独的选择  (复选框)
--from         | 允许您建立一个带标签的文本字段,并要求填写
--fselect      | 提供一个路径,让你选择浏览的文件
--gauge        | 显示一个表,呈现出完成的百分比,就是显示出进度。
--infobox      | 显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕  (信息框)
--inputbox     | 让用户输入文本  (输入框  )
--inputmenu    | 提供一个可供用户编辑的菜单  (可编辑的菜单框)
--menu         | 显示一个列表供用户选择   (菜单框)
--msgbox       | 显示一条消息,并要求用户选择一个确定按钮  (消息框  )
--pause        | 显示一个表格用来显示一个指定的暂停期的状态
--passwordbox  | 显示一个输入框,它隐藏文本
--passwordfrom | 显示一个来源于标签并且隐藏的文本字段
--radiolist    | 提供一个菜单项目组,只有一个项目,可以选择  (单选框 )
--tailbox      | 在一个滚动窗口文件中使用tail命令来显示文本
--tailboxbg    | 跟tailbox类似,但是在background模式下操作
--textbox      | 在带有滚动条的文本框中显示文件的内容  (文本框)
--timebox      | 提供一个窗口,选择小时,分钟,秒
--yesno        | 提供一个带有yes和no按钮的简单信息框  (是/否框)
</code></pre> 
 <p>如果没有此包请先安装</p> 
 <pre><code class="bash">yum install -y dialog
</code></pre> 
 <h4>三、命令示例</h4> 
 <h5>1、消息框(<code>--msgbox</code>)</h5> 
 <p>格式:<code>dialog --msgbox text height width</code></p> 
 <p>例子:</p> 
 <pre><code class="bash">$ dialog --title "TESTING" --msgbox "this is a test" 10 20
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 426px; max-height: 248px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/40facc0d9aa64dda97b354f5e0b33cdd.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/40facc0d9aa64dda97b354f5e0b33cdd.jpg" width="426" height="248" alt="使用 Linux Dialog 图形化 Shell_第1张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --msgbox 
  </div> 
 </div> 
 <h5>2、yesno 框(<code>--yesno</code>)</h5> 
 <p>格式:<code>dialog --yesno text height width</code><br> 例子:</p> 
 <pre><code class="bash">$ dialog --title "yes/no" --no-shadow --yesno \
"Delete the file /tmp/chensiyao.txt?" 10 30
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 477px; max-height: 296px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/f3d2faf45566431782bb17d91cb80cbb.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/f3d2faf45566431782bb17d91cb80cbb.jpg" width="477" height="296" alt="使用 Linux Dialog 图形化 Shell_第2张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --yesno 
  </div> 
 </div> 
 <h5>3、输入框(<code>--inputbox</code>)</h5> 
 <p>格式:<code>dialog --inputbox text height width</code><br> 例子:</p> 
 <pre><code class="bash">$ dialog --title "Input your name"  \
--inputbox "Please input your name:" 10 30  2> /tmp/name.txt   
# (这里的2>是将错误信息输出重定向到了/tmp/name.txt文件中)
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 392px; max-height: 286px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/cd100f55306244488f0c19c7b60fb711.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/cd100f55306244488f0c19c7b60fb711.jpg" width="392" height="286" alt="使用 Linux Dialog 图形化 Shell_第3张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --inputbox 
  </div> 
 </div> 
 <h5>4、密码框(<code>--passwordbox</code>)</h5> 
 <p>格式:<code>dialog --passwordbox text height width [init]</code></p> 
 <p>例子:</p> 
 <pre><code class="bash">$ dialog --title "Password"  --passwordbox \
"Please give a password for the new user:" 10 35
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 375px; max-height: 236px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/61d4f262ba9a48fa9fdf20e8e1015207.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/61d4f262ba9a48fa9fdf20e8e1015207.jpg" width="375" height="236" alt="使用 Linux Dialog 图形化 Shell_第4张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --passwordbox 
  </div> 
 </div> 
 <p>这样我们的密码就暴露出来了,是不是很不安全,所以通常我们会加上一个安全选项</p> 
 <p><code>--insecure</code> 将每个字符用 <code>*</code> 来显示出来</p> 
 <pre><code class="bash">$ dialog  --title  "Password"  --insecure  \
--passwordbox  "Please  give  a  password  for the  new  user:"  10  30
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 354px; max-height: 270px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/717784efe17740cd8ef2e01beb3f6029.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/717784efe17740cd8ef2e01beb3f6029.jpg" width="354" height="270" alt="使用 Linux Dialog 图形化 Shell_第5张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --insecure --passwordbox 
  </div> 
 </div> 
 <h5>5、文本框(<code>--textbox</code>)</h5> 
 <p>格式:<code>dialog --textbox file height width</code></p> 
 <p>例子:</p> 
 <pre><code class="bash">$ dialog --title "The fstab" --textbox /etc/fstab 17 40
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 441px; max-height: 337px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/dbff6e282a6d496483543c8a93b313e0.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/dbff6e282a6d496483543c8a93b313e0.jpg" width="441" height="337" alt="使用 Linux Dialog 图形化 Shell_第6张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --textbox 
  </div> 
 </div> 
 <h5>6、菜单框(<code>--menu</code>)</h5> 
 <p>格式:<code>dialog --menu text height width menu-height tag1 item1 tag2 item2 …</code></p> 
 <p>例子:</p> 
 <pre><code class="bash">$ dialog --title "Pick a choice" --menu "Choose one" 12 35 5 \
1 "say hello to everyone" 2 "thanks for your support" 3 "exit"
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 370px; max-height: 270px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/cf2c14baef6242eab00a9370e55c688d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/cf2c14baef6242eab00a9370e55c688d.jpg" width="370" height="270" alt="使用 Linux Dialog 图形化 Shell_第7张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --menu 
  </div> 
 </div> 
 <h5>7、文件选择框(<code>--fselect</code>)</h5> 
 <p>格式:<code>dialog --fselect filepath height width</code></p> 
 <p>例子:</p> 
 <pre><code class="bash">$ dialog --title "Pick one file" --fselect /root/ 7 40
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 386px; max-height: 332px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/2b1f7fc8c7eb4d7f9ca92e33ceaecd37.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/2b1f7fc8c7eb4d7f9ca92e33ceaecd37.jpg" width="386" height="332" alt="使用 Linux Dialog 图形化 Shell_第8张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --fselect 
  </div> 
 </div> 
 <h5>8、复选框(<code>--checklist</code>)</h5> 
 <p>格式:<code>dialog --checklist "Test" height width menu-height tag1 item1 tag2 item2 …</code><br> 例子:</p> 
 <pre><code class="bash">$ dialog --backtitle "Checklist" --checklist "Test" 20 50 10 \
Memory Memory_Size 1 Dsik Disk_Size 2
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 700px; max-height: 473px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/a607df1b7d6b48489432a63fea4194c6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/a607df1b7d6b48489432a63fea4194c6.jpg" width="650" height="414" alt="使用 Linux Dialog 图形化 Shell_第9张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --checklist 
  </div> 
 </div> 
 <h5>9、显示日历(<code>--calendar</code>)</h5> 
 <p>格式:<code>dialog --calendar "Date" height width day month year</code><br> 例子:</p> 
 <ul> 
  <li>显示当前日期</li> 
 </ul> 
 <pre><code class="bash">$ dialog --title "Calendar" --calendar "Date" 5 50
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 440px; max-height: 394px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/95b65cc7df444530b031a8f15db744e8.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/95b65cc7df444530b031a8f15db744e8.jpg" width="440" height="394" alt="使用 Linux Dialog 图形化 Shell_第10张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --calendar 
  </div> 
 </div> 
 <ul> 
  <li>显示指定日期</li> 
 </ul> 
 <pre><code class="bash">$ dialog --title "Calendar" --calendar "Date" 5 50 1 2 2013
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 471px; max-height: 409px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/3a4c98c75fab47c084a03b5eac768ff1.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/3a4c98c75fab47c084a03b5eac768ff1.jpg" width="471" height="409" alt="使用 Linux Dialog 图形化 Shell_第11张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --calendar 指定日期 
  </div> 
 </div> 
 <h5>10、进度框架(<code>--gauge</code>)</h5> 
 <p>格式:<code>dialog --gauge text height width [<percent>]</code></p> 
 <p>例子:</p> 
 <ul> 
  <li>固定进度显示</li> 
 </ul> 
 <pre><code class="bash">$ dialog --title "installation pro" --gauge "installation" 10 30 10
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 307px; max-height: 240px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/33c14eb81d6a46a09916790b6eb5b286.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/33c14eb81d6a46a09916790b6eb5b286.jpg" width="307" height="240" alt="使用 Linux Dialog 图形化 Shell_第12张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --gauge 
  </div> 
 </div> 
 <ul> 
  <li>实时动态进度</li> 
 </ul> 
 <pre><code class="bash">$ for i in {1..100} ;do echo $i;done | dialog --title \
"installation pro" --gauge "installation" 10 30
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 288px; max-height: 219px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/0a8f1b7b001c43a0b4a42d98593ffc2a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/0a8f1b7b001c43a0b4a42d98593ffc2a.jpg" width="288" height="219" alt="使用 Linux Dialog 图形化 Shell_第13张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --gauge 实时动态进度 
  </div> 
 </div> 
 <ul> 
  <li> <p>编辑到脚本中</p> <p>编辑一个 <code>gauge.sh</code> 的脚本</p> <p>内容如下:</p> </li> 
 </ul> 
 <pre><code class="bash">  #!/bin/bash
  # vim gauge.sh
  declare -i PERCENT=0
  (
      for I in /etc/*;do
        if [ $PERCENT -le 100 ];then
              cp -r $I /tmp/test 2> /dev/null
              echo "XXX"
              echo "Copy the file $I ..."
              echo "XXX"
              echo $PERCENT
        fi
      let PERCENT+=1
      sleep 0.1
      done
  ) | dialog --title "coping" --gauge "starting to copy files..." 6 50 0
</code></pre> 
 <p><code>bash gauge.sh</code> (执行脚本的时候注意修改权限)</p> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 523px; max-height: 145px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/c00234bb20d1493787fd9bbceff35318.png" target="_blank"><img src="http://img.e-com-net.com/image/info10/c00234bb20d1493787fd9bbceff35318.png" width="523" height="145" alt="使用 Linux Dialog 图形化 Shell_第14张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    脚本演示动态进度 
  </div> 
 </div> 
 <h5>11、表单框架(<code>--form</code>)</h5> 
 <p>格式:<code>dialog --form text height width formheight [ label y x item y x flen ilen ] ...</code></p> 
 <p>其中,</p> 
 <ul> 
  <li><p><code>flen</code> 表示 Field Length,定义了:选定字段中显示的长度</p></li> 
  <li><p><code>ilen</code> 表示 Input Length,定义了:输入的数据允许的长度</p></li> 
 </ul> 
 <p>使用 Up/Down(或 Ctrl - N,Ctrl - P)在使用领域之间移动。使用 Tab 键在窗口之间切换。</p> 
 <p>例子:</p> 
 <pre><code class="bash">$ dialog --title "Add a user" --form "Please input the infomation of new user:" 12 40 4  \
  "Username:"  1  1 "" 1  15  15  0  \
  "Full name:" 2  1 "" 2  15  15  0  \
  "Home Dir:"  3  1 "" 3  15  15  0  \
  "Shell:"     4  1 "" 4  15  15  0
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 358px; max-height: 236px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/4598d5d335e04229a5930af8a4fca783.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/4598d5d335e04229a5930af8a4fca783.jpg" width="358" height="236" alt="使用 Linux Dialog 图形化 Shell_第15张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    --form 
  </div> 
 </div> 
 <p>综合应用示例:</p> 
 <pre><code class="bash">#!bin/bash

yesno() {
    dialog --title "First screen" --backtitle "Test Program" --clear --yesno \
        "Start this test program or not ? \nThis decesion have to make by you. " 16 51
    # yes is 0, no is 1 , esc is 255
    result=$?
    if [ $result -eq 1 ] ; then
        exit 1;
    elif [ $result -eq 255 ]; then
        exit 255;
    fi
    username
}

username() {
    cat /dev/null >/tmp/test.username
    dialog --title "Second screen" --backtitle "Test Program" --clear --inputbox \
        "Please input your username (default: hello) " 16 51 "hello" 2>/tmp/test.username
    result=$?
    if [ $result -eq 1 ] ; then
        yesno
    elif [ $result -eq 255 ]; then
        exit 255;
    fi
    password
}


password() {
    cat /dev/null >/tmp/test.password
    dialog --insecure --title "Third screen" --backtitle "Test Program" --clear --passwordbox \
        "Please input your password (default: 123456) " 16 51 "123456" 2>/tmp/test.password
    result=$?
    if [ $result -eq 1 ] ; then
        username
    elif [ $result -eq 255 ]; then
        exit 255;
    fi
    occupation
}


occupation() {
    cat /dev/null >/tmp/test.occupation
    dialog --title "Forth screen" --backtitle "Test Program" --clear --menu \
        "Please choose your occupation: (default: IT)" 16 51 3 \
    IT "The worst occupation" \
    CEO "The best occupation" \
    Teacher "Not the best or worst" 2>/tmp/test.occupation
    result=$?
    if [ $result -eq 1 ] ; then
        password
    elif [ $result -eq 255 ]; then
        exit 255;
    fi
    finish
}


finish() {
    dialog --title "Fifth screen" --backtitle "Test Program" --clear --msgbox \
        "Congratulations! The test program has finished!\n Username: $(cat /tmp/test.username)\n Password: $(cat /tmp/test.password)\n Occupation: $(cat /tmp/test.occupation)" 16 51
    result=$?
    if [ $result -eq 1 ] ; then
        occupation
    elif [ $result -eq 255 ]; then
        exit 255;
    fi
}


yesno
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 412px; max-height: 272px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/07f8459da4454cdea6f43c19ec2585f0.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/07f8459da4454cdea6f43c19ec2585f0.jpg" width="412" height="272" alt="使用 Linux Dialog 图形化 Shell_第16张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    综合应用示例 - 第 1 屏 
  </div> 
 </div> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 410px; max-height: 278px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/4050e57d7f14496f93290fc5ae6c2acc.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/4050e57d7f14496f93290fc5ae6c2acc.jpg" width="410" height="278" alt="使用 Linux Dialog 图形化 Shell_第17张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    综合应用示例 - 第 2 屏 
  </div> 
 </div> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 409px; max-height: 276px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/116ab47562c04bfea83bc7f4c7e3f7f1.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/116ab47562c04bfea83bc7f4c7e3f7f1.jpg" width="409" height="276" alt="使用 Linux Dialog 图形化 Shell_第18张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    综合应用示例 - 第 3 屏 
  </div> 
 </div> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 418px; max-height: 276px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/97307e8b557f494bbe29f8b30767e8b6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/97307e8b557f494bbe29f8b30767e8b6.jpg" width="418" height="276" alt="使用 Linux Dialog 图形化 Shell_第19张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    综合应用示例 - 第 4 屏 
  </div> 
 </div> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 408px; max-height: 275px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/1f7f151d8d4a4e0b9e4a1c09b293602f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/1f7f151d8d4a4e0b9e4a1c09b293602f.jpg" width="408" height="275" alt="使用 Linux Dialog 图形化 Shell_第20张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    综合应用示例 - 第 5 屏 
  </div> 
 </div> 
 <p>文中脚本详见:GitHub - 使用 Linux Dialog 图形化 Shell</p> 
 <h4>四、获取返回值</h4> 
 <h5>1、按钮操作</h5> 
 <p>执行 <code>dialog</code> 执行之后,可以通过 <code>$?</code> 来获取用户操作的按钮:</p> 
 <pre><code class="plain">0 .......... OK / Yes
1 .......... Cancel / No
255 ........ ESC
</code></pre> 
 <p>判断返回值:</p> 
 <pre><code class="bash">case $? in

  0)
    echo -n "Yes / OK"
    ;;

  1)
    echo -n "No / Cancel"
    ;;

  255)
    echo -n "ESC"
    ;;

  *)
    echo -n "unknown"
    ;;
esac

</code></pre> 
 <p>case 语句的使用:Bash Case Statement</p> 
 <h5>2、用户输入</h5> 
 <p>对于用户输入,需要通过变量接收 <code>dialog</code> 的执行结果,这要求必须通过 <code>--output-fd 1</code> 指定输出方式。如果返回内容包含多项,默认以 <code>\n</code> 分割。</p> 
 <p>这里分别以获取表单输入和多选示例:</p> 
 <ul> 
  <li>表单输入</li> 
 </ul> 
 <pre><code class="bash"># 指定分隔符
IFS=','

# 使用 USER_INPUT 存放返回值
USER_INPUT=$(dialog --title "Add a user" \
                    --output-fd 1 \
                    --output-separator "${IFS}" \
                    --form "Please input the infomation of new user:" 12 40 4  \
                        "Username:"  1  1 "aa 11" 1  15  15  0  \
                        "Full name:" 2  1 "bb 22" 2  15  15  0  \
                        "Home Dir:"  3  1 "cc 33" 3  15  15  0  \
                        "Shell:"     4  1 "dd 44" 4  15  15  0)

# 将 用户输入 拆分为数组,将以指定的 $IFS 进行分割
RET_ARRAY=($USER_INPUT)

# 显示得到的 数组
echo =========================
echo --- ${RET_ARRAY[0]}
echo --- ${RET_ARRAY[1]}
echo --- ${RET_ARRAY[2]}
echo --- ${RET_ARRAY[3]}
echo =========================
</code></pre> 
 <ul> 
  <li>多选</li> 
 </ul> 
 <pre><code class="bash"># 指定分隔符
IFS=','

# 使用 USER_INPUT 存放返回值
USER_INPUT=$(dialog --backtitle 'Checklist' \
                    --output-fd 1 \
                    --output-separator "${IFS}" \
                    --checklist "Test" 20 50 10 \
                        'Memory mmm' Memory_Size 1 \
                        'Dsik ddd' Disk_Size 2)

# 将 用户输入 拆分为数组,将以指定的 $IFS 进行分割
RET_ARRAY=($USER_INPUT)

# 显示得到的 数组
echo =========================
echo --- ${RET_ARRAY[0]}
echo --- ${RET_ARRAY[1]}
echo --- ${RET_ARRAY[2]}
echo --- ${RET_ARRAY[3]}
echo =========================
</code></pre> 
 <h4>五、颜色配置</h4> 
 <p>创建 <code>~/.dialogrc</code> 文件样例:</p> 
 <pre><code class="bash">$ dialog --create-rc ~/.dialogrc
</code></pre> 
 <p>常用配置项说明:</p> 
 <pre><code class="ini"># Turn on shadow dialog boxes
use_shadow = ON

# Turn on color support ON
use_colors = ON

# Change default blue background color to BLACK
screen_color = (CYAN,BLACK,ON)
</code></pre> 
 <p>配置样例:</p> 
 <pre><code class="ini">#
# Run-time configuration file for dialog
#
# Automatically generated by "dialog --create-rc <file>"
#
#
# Types of values:
#
# Number     -  <number>
# String     -  "string"
# Boolean    -  <ON|OFF>
# Attribute  -  (foreground,background,highlight?)

# Set aspect-ration.
aspect = 0

# Set separator (for multiple widgets output).
separate_widget = ""

# Set tab-length (for textbox tab-conversion).
tab_len = 0

# Make tab-traversal for checklist, etc., include the list.
visit_items = OFF

# Shadow dialog boxes? This also turns on color.
use_shadow = ON

# Turn color support ON or OFF
use_colors = ON

# Screen color
screen_color = (CYAN,GREEN,ON)

# Shadow color
shadow_color = (BLACK,BLACK,ON)

# Dialog box color
dialog_color = (BLACK,WHITE,OFF)

# Dialog box title color
title_color = (BLUE,WHITE,ON)

# Dialog box border color
border_color = (WHITE,WHITE,ON)

# Active button color
button_active_color = (WHITE,BLUE,ON)

# Inactive button color
button_inactive_color = (BLACK,WHITE,OFF)

# Active button key color
button_key_active_color = (WHITE,BLUE,ON)

# Inactive button key color
button_key_inactive_color = (RED,WHITE,OFF)

# Active button label color
button_label_active_color = (YELLOW,BLUE,ON)

# Inactive button label color
button_label_inactive_color = (BLACK,WHITE,ON)

# Input box color
inputbox_color = (BLACK,WHITE,OFF)

# Input box border color
inputbox_border_color = (BLACK,WHITE,OFF)

# Search box color
searchbox_color = (BLACK,WHITE,OFF)

# Search box title color
searchbox_title_color = (BLUE,WHITE,ON)

# Search box border color
searchbox_border_color = (WHITE,WHITE,ON)

# File position indicator color
position_indicator_color = (BLUE,WHITE,ON)

# Menu box color
menubox_color = (BLACK,WHITE,OFF)

# Menu box border color
menubox_border_color = (WHITE,WHITE,ON)

# Item color
item_color = (BLACK,WHITE,OFF)

# Selected item color
item_selected_color = (WHITE,BLUE,ON)

# Tag color
tag_color = (BLUE,WHITE,ON)

# Selected tag color
tag_selected_color = (YELLOW,BLUE,ON)

# Tag key color
tag_key_color = (RED,WHITE,OFF)

# Selected tag key color
tag_key_selected_color = (RED,BLUE,ON)

# Check box color
check_color = (BLACK,WHITE,OFF)

# Selected check box color
check_selected_color = (WHITE,BLUE,ON)

# Up arrow color
uarrow_color = (GREEN,WHITE,ON)

# Down arrow color
darrow_color = (GREEN,WHITE,ON)

# Item help-text color
itemhelp_color = (WHITE,BLACK,OFF)

# Active form text color
form_active_text_color = (WHITE,BLUE,ON)

# Form text color
form_text_color = (WHITE,CYAN,ON)

# Readonly form item color
form_item_readonly_color = (CYAN,WHITE,ON)
</code></pre> 
 <h4>六、参考资料</h4> 
 <ul> 
  <li>Linux dialog详解(图形化shell)</li> 
  <li>Text-based user interface</li> 
  <li>Dialog customization with configuration file</li> 
  <li>Bash Case Statement</li> 
  <li>shell 分割字符串存至数组</li> 
  <li>shell - IFS分隔符</li> 
  <li>Shell中的IFS解惑</li> 
  <li>详细解析Shell中的IFS变量</li> 
  <li>在Bash中将字符串拆分成数组</li> 
  <li>Bash数组操作教程</li> 
  <li>linux shell 图形界面之dialog小结</li> 
 </ul> 
 <p>(完)</p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1214760475682770944"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(使用 Linux Dialog 图形化 Shell)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835513699826233344.htm"
                           title="android系统selinux中添加新属性property" target="_blank">android系统selinux中添加新属性property</a>
                        <span class="text-muted">辉色投像</span>

                        <div>1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property</div>
                    </li>
                    <li><a href="/article/1835512920797179904.htm"
                           title="element实现动态路由+面包屑" target="_blank">element实现动态路由+面包屑</a>
                        <span class="text-muted">软件技术NINI</span>
<a class="tag" taget="_blank" href="/search/vue%E6%A1%88%E4%BE%8B/1.htm">vue案例</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi</div>
                    </li>
                    <li><a href="/article/1835512542735200256.htm"
                           title="C语言宏函数" target="_blank">C语言宏函数</a>
                        <span class="text-muted">南林yan</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>一、什么是宏函数?通过宏定义的函数是宏函数。如下,编译器在预处理阶段会将Add(x,y)替换为((x)*(y))#defineAdd(x,y)((x)*(y))#defineAdd(x,y)((x)*(y))intmain(){inta=10;intb=20;intd=10;intc=Add(a+d,b)*2;cout<<c<<endl;//800return0;}二、为什么要使用宏函数使用宏函数</div>
                    </li>
                    <li><a href="/article/1835511911769272320.htm"
                           title="C语言如何定义宏函数?" target="_blank">C语言如何定义宏函数?</a>
                        <span class="text-muted">小九格物</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>在C语言中,宏函数是通过预处理器定义的,它在编译之前替换代码中的宏调用。宏函数可以模拟函数的行为,但它们不是真正的函数,因为它们在编译时不会进行类型检查,也不会分配存储空间。宏函数的定义通常使用#define指令,后面跟着宏的名称和参数列表,以及宏展开后的代码。宏函数的定义方式:1.基本宏函数:这是最简单的宏函数形式,它直接定义一个表达式。#defineSQUARE(x)((x)*(x))2.带参</div>
                    </li>
                    <li><a href="/article/1835511030260789248.htm"
                           title="c++ 的iostream 和 c++的stdio的区别和联系" target="_blank">c++ 的iostream 和 c++的stdio的区别和联系</a>
                        <span class="text-muted">黄卷青灯77</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/iostream/1.htm">iostream</a><a class="tag" taget="_blank" href="/search/stdio/1.htm">stdio</a>
                        <div>在C++中,iostream和C语言的stdio.h都是用于处理输入输出的库,但它们在设计、用法和功能上有许多不同。以下是两者的区别和联系:区别1.编程风格iostream(C++风格):C++标准库中的输入输出流类库,支持面向对象的输入输出操作。典型用法是cin(输入)和cout(输出),使用>操作符来处理数据。更加类型安全,支持用户自定义类型的输入输出。#includeintmain(){in</div>
                    </li>
                    <li><a href="/article/1835509897106649088.htm"
                           title="Long类型前后端数据不一致" target="_blank">Long类型前后端数据不一致</a>
                        <span class="text-muted">igotyback</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问</div>
                    </li>
                    <li><a href="/article/1835509391361667072.htm"
                           title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a>
                        <span class="text-muted">13jjyao</span>
<a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div>
                    </li>
                    <li><a href="/article/1835508130268672000.htm"
                           title="消息中间件有哪些常见类型" target="_blank">消息中间件有哪些常见类型</a>
                        <span class="text-muted">xmh-sxh-1314</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>消息中间件根据其设计理念和用途,可以大致分为以下几种常见类型:点对点消息队列(Point-to-PointMessagingQueues):在这种模型中,消息被发送到特定的队列中,消费者从队列中取出并处理消息。队列中的消息只能被一个消费者消费,消费后即被删除。常见的实现包括IBM的MQSeries、RabbitMQ的部分使用场景等。适用于任务分发、负载均衡等场景。发布/订阅消息模型(Pub/Sub</div>
                    </li>
                    <li><a href="/article/1835508130608410624.htm"
                           title="html 中如何使用 uniapp 的部分方法" target="_blank">html 中如何使用 uniapp 的部分方法</a>
                        <span class="text-muted">某公司摸鱼前端</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>示例代码:Documentconsole.log(window);效果展示:好了,现在就可以uni.使用相关的方法了</div>
                    </li>
                    <li><a href="/article/1835508131032035328.htm"
                           title="ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)" target="_blank">ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)</a>
                        <span class="text-muted">研学随笔</span>
<a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>我们在使用ArcGIS时通常经常用到栅格计算器,今天主要给大家介绍我日常中经常用到的几个公式,供大家参考学习。将特定值(-9999)赋值为0,例如-9999.Con("raster"==-9999,0,"raster")2.给空值赋予特定的值(如0)Con(IsNull("raster"),0,"raster")3.将特定的栅格值(如1)赋值为空值,其他保留原值SetNull("raster"==</div>
                    </li>
                    <li><a href="/article/1835508131489214464.htm"
                           title="高级编程--XML+socket练习题" target="_blank">高级编程--XML+socket练习题</a>
                        <span class="text-muted">masa010</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.北京华北2114.8万人上海华东2,500万人广州华南1292.68万人成都华西1417万人(1)使用dom4j将信息存入xml中(2)读取信息,并打印控制台(3)添加一个city节点与子节点(4)使用socketTCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息(5)使用socketTCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j</div>
                    </li>
                    <li><a href="/article/1835507626276909056.htm"
                           title="水平垂直居中的几种方法(总结)" target="_blank">水平垂直居中的几种方法(总结)</a>
                        <span class="text-muted">LJ小番茄</span>
<a class="tag" taget="_blank" href="/search/CSS_%E7%8E%84%E5%AD%A6%E8%AF%AD%E8%A8%80/1.htm">CSS_玄学语言</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a>
                        <div>1.使用flexbox的justify-content和align-items.parent{display:flex;justify-content:center;/*水平居中*/align-items:center;/*垂直居中*/height:100vh;/*需要指定高度*/}2.使用grid的place-items:center.parent{display:grid;place-item</div>
                    </li>
                    <li><a href="/article/1835507248395284480.htm"
                           title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a>
                        <span class="text-muted">广龙宇</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div>
                    </li>
                    <li><a href="/article/1835506869838376960.htm"
                           title="Python数据分析与可视化实战指南" target="_blank">Python数据分析与可视化实战指南</a>
                        <span class="text-muted">William数据分析</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a>
                        <div>在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学</div>
                    </li>
                    <li><a href="/article/1835506236842405888.htm"
                           title="C#中使用split分割字符串" target="_blank">C#中使用split分割字符串</a>
                        <span class="text-muted">互联网打工人no1</span>
<a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a>
                        <div>1、用字符串分隔:usingSystem.Text.RegularExpressions;stringstr="aaajsbbbjsccc";string[]sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);foreach(stringiinsArray)Response.Write(i.ToString()+"");输出结果:aaabbbc</div>
                    </li>
                    <li><a href="/article/1835505606245576704.htm"
                           title="Python中os.environ基本介绍及使用方法" target="_blank">Python中os.environ基本介绍及使用方法</a>
                        <span class="text-muted">鹤冲天Pro</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>文章目录python中os.environos.environ简介os.environ进行环境变量的增删改查python中os.environ的使用详解1.简介2.key字段详解2.1常见key字段3.os.environ.get()用法4.环境变量的增删改查和判断是否存在4.1新增环境变量4.2更新环境变量4.3获取环境变量4.4删除环境变量4.5判断环境变量是否存在python中os.envi</div>
                    </li>
                    <li><a href="/article/1835504596898902016.htm"
                           title="linux sdl windows.h,Windows下的SDL安装" target="_blank">linux sdl windows.h,Windows下的SDL安装</a>
                        <span class="text-muted">奔跑吧linux内核</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sdl/1.htm">sdl</a><a class="tag" taget="_blank" href="/search/windows.h/1.htm">windows.h</a>
                        <div>首先你要下载并安装SDL开发包。如果装在C盘下,路径为C:\SDL1.2.5如果在WINDOWS下。你可以按以下步骤:1.打开VC++,点击"Tools",Options2,点击directories选项3.选择"Includefiles"增加一个新的路径。"C:\SDL1.2.5\include"4,现在选择"Libaryfiles“增加"C:\SDL1.2.5\lib"现在你可以开始编写你的第</div>
                    </li>
                    <li><a href="/article/1835504217729626112.htm"
                           title="Python教程:一文了解使用Python处理XPath" target="_blank">Python教程:一文了解使用Python处理XPath</a>
                        <span class="text-muted">旦莫</span>
<a class="tag" taget="_blank" href="/search/Python%E8%BF%9B%E9%98%B6/1.htm">Python进阶</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代</div>
                    </li>
                    <li><a href="/article/1835504218178416640.htm"
                           title="Google earth studio 简介" target="_blank">Google earth studio 简介</a>
                        <span class="text-muted">陟彼高冈yu</span>
<a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a>
                        <div>GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G</div>
                    </li>
                    <li><a href="/article/1835503965563875328.htm"
                           title="python os.environ_python os.environ 读取和设置环境变量" target="_blank">python os.environ_python os.environ 读取和设置环境变量</a>
                        <span class="text-muted">weixin_39605414</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/os.environ/1.htm">os.environ</a>
                        <div>>>>importos>>>os.environ.keys()['LC_NUMERIC','GOPATH','GOROOT','GOBIN','LESSOPEN','SSH_CLIENT','LOGNAME','USER','HOME','LC_PAPER','PATH','DISPLAY','LANG','TERM','SHELL','J2REDIR','LC_MONETARY','QT_QPA</div>
                    </li>
                    <li><a href="/article/1835503712899002368.htm"
                           title="linux中sdl的使用教程,sdl使用入门" target="_blank">linux中sdl的使用教程,sdl使用入门</a>
                        <span class="text-muted">Melissa Corvinus</span>
<a class="tag" taget="_blank" href="/search/linux%E4%B8%ADsdl%E7%9A%84%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1.htm">linux中sdl的使用教程</a>
                        <div>本文通过一个简单示例讲解SDL的基本使用流程。示例中展示一个窗口,窗口里面有个随机颜色快随机移动。当我们鼠标点击关闭按钮时间窗口关闭。基本步骤如下:1.初始化SDL并创建一个窗口。SDL_Init()初始化SDL_CreateWindow()创建窗口2.纹理渲染存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一</div>
                    </li>
                    <li><a href="/article/1835502705553010688.htm"
                           title="LLM 词汇表" target="_blank">LLM 词汇表</a>
                        <span class="text-muted">落难Coder</span>
<a class="tag" taget="_blank" href="/search/LLMs/1.htm">LLMs</a><a class="tag" taget="_blank" href="/search/NLP/1.htm">NLP</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大语言模型</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/llama/1.htm">llama</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>Contextwindow“上下文窗口”是指语言模型在生成新文本时能够回溯和参考的文本量。这不同于语言模型训练时所使用的大量数据集,而是代表了模型的“工作记忆”。较大的上下文窗口可以让模型理解和响应更复杂和更长的提示,而较小的上下文窗口可能会限制模型处理较长提示或在长时间对话中保持连贯性的能力。Fine-tuning微调是使用额外的数据进一步训练预训练语言模型的过程。这使得模型开始表示和模仿微调数</div>
                    </li>
                    <li><a href="/article/1835502578050363392.htm"
                           title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a>
                        <span class="text-muted">好看资源平台</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div>
                    </li>
                    <li><a href="/article/1835502578511736832.htm"
                           title="下载github patch到本地" target="_blank">下载github patch到本地</a>
                        <span class="text-muted">小米人er</span>
<a class="tag" taget="_blank" href="/search/%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2/1.htm">我的博客</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/patch/1.htm">patch</a>
                        <div>以下是几种从GitHub上下载以.patch结尾的补丁文件的方法:通过浏览器直接下载打开包含该.patch文件的GitHub仓库。在仓库的文件列表中找到对应的.patch文件。点击该文件,浏览器会显示文件的内容,在页面的右上角通常会有一个“Raw”按钮,点击它可以获取原始文件内容。然后在浏览器中使用快捷键(如Ctrl+S或者Command+S)将原始文件保存到本地,选择保存的文件名并确保后缀为.p</div>
                    </li>
                    <li><a href="/article/1835501948011376640.htm"
                           title="使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)" target="_blank">使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)</a>
                        <span class="text-muted">编程经验分享</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/ssh/1.htm">ssh</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能</div>
                    </li>
                    <li><a href="/article/1835500751997202432.htm"
                           title="直返最高等级与直返APP:无需邀请码的返利新体验" target="_blank">直返最高等级与直返APP:无需邀请码的返利新体验</a>
                        <span class="text-muted">古楼</span>

                        <div>随着互联网的普及和电商的兴起,直返模式逐渐成为一种流行的商业模式。在这种模式下,消费者通过购买产品或服务,获得一定的返利,并可以分享给更多的人。其中,直返最高等级和直返APP是直返模式中的重要概念和工具。本文将详细介绍直返最高等级的概念、直返APP的使用以及与邀请码的关系。【高省】APP(高佣金领导者)是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,运行三年,稳定可靠。高省APP,</div>
                    </li>
                    <li><a href="/article/1835499681732456448.htm"
                           title="SQL Server_查询某一数据库中的所有表的内容" target="_blank">SQL Server_查询某一数据库中的所有表的内容</a>
                        <span class="text-muted">qq_42772833</span>
<a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/Server/1.htm">Server</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/sqlserver/1.htm">sqlserver</a>
                        <div>1.查看所有表的表名要列出CrabFarmDB数据库中的所有表(名),可以使用以下SQL语句:USECrabFarmDB;--切换到目标数据库GOSELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_TYPE='BASETABLE';对这段SQL脚本的解释:SELECTTABLE_NAME:这个语句的作用是从查询结果中选择TABLE_NAM</div>
                    </li>
                    <li><a href="/article/1835499615491813376.htm"
                           title="四章-32-点要素的聚合" target="_blank">四章-32-点要素的聚合</a>
                        <span class="text-muted">彩云飘过</span>

                        <div>本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers5.3.xapi。源码见1032.html,对应的官网示例https://openlayers.org/en/latest/examples/cluster.htmlhttps://openlayers.org/en/latest/examples/earthquake-clusters.</div>
                    </li>
                    <li><a href="/article/1835498218293653504.htm"
                           title="2020-04-12每天三百字之连接与替代" target="_blank">2020-04-12每天三百字之连接与替代</a>
                        <span class="text-muted">冷眼看潮</span>

                        <div>不知道是不是好为人师,有时候还真想和别人分享一下我对某些现象的看法或者解释。人类社会不断发展进步的过程,就是不断连接与替代的过程。人类发现了火并应用火以后,告别了茹毛饮血的野兽般的原始生活(火烧、烹饪替代了生食)人类用石器代替了完全手工,工具的使用使人类进步一大步。类似这样的替代还有很多,随着科技的发展,有更多的原始的事物被替代,代之以更高效、更先进的技术。在近现代,汽车替代了马车,高速公路和铁路</div>
                    </li>
                    <li><a href="/article/1835497792265613312.htm"
                           title="【加密社】Solidity 中的事件机制及其应用" target="_blank">【加密社】Solidity 中的事件机制及其应用</a>
                        <span class="text-muted">加密社</span>
<a class="tag" taget="_blank" href="/search/%E9%97%B2%E4%BE%83/1.htm">闲侃</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/1.htm">智能合约</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a>
                        <div>加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件</div>
                    </li>
                                <li><a href="/article/81.htm"
                                       title="java短路运算符和逻辑运算符的区别" target="_blank">java短路运算符和逻辑运算符的区别</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a>
                                    <div>
/*
		 * 逻辑运算符——不论是什么条件都要执行左右两边代码
		 * 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的
		 * 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。
		 * 
		 * 并联电路两个开关只要有一个开关闭合,电路就会通。
		 * 类似于短路或(||),只要有其中一个为true(开关闭合)是</div>
                                </li>
                                <li><a href="/article/208.htm"
                                       title="Java异常那些不得不说的事" target="_blank">Java异常那些不得不说的事</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a>
                                    <div>一、在finally块中做数据回收操作 
比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。 
JDBCAgent jdbc = new JDBCAgent();
try{
jdbc.excute("select * from ctp_log");
}catch(SQLException e){
...
}finally{
jdbc.close();
</div>
                                </li>
                                <li><a href="/article/335.htm"
                                       title="utf-8与utf-8(无BOM)的区别" target="_blank">utf-8与utf-8(无BOM)的区别</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>BOM——Byte Order Mark,就是字节序标记       在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如</div>
                                </li>
                                <li><a href="/article/462.htm"
                                       title="JAVA Annotation之定义篇" target="_blank">JAVA Annotation之定义篇</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E8%A7%A3/1.htm">注解</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E9%87%8A/1.htm">注释</a>
                                    <div>    Annotation: 译为注释或注解 
An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa</div>
                                </li>
                                <li><a href="/article/589.htm"
                                       title="tomcat的多域名、虚拟主机配置" target="_blank">tomcat的多域名、虚拟主机配置</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。 
很多朋友搜索的内容基本是告诉我们这么配置: 
在Engine标签下增面积Host标签,如下: 
<Host name="www.site1.com"  appBase="webapps"</div>
                                </li>
                                <li><a href="/article/716.htm"
                                       title="Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )" target="_blank">Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/capistrano/1.htm">capistrano</a>
                                    <div> 
1.ssh -v hdfs@192.168.18.133 出现 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 
错误 
 
运行状况如下: 
 
 
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuratio</div>
                                </li>
                                <li><a href="/article/843.htm"
                                       title="log4j的用法" target="_blank">log4j的用法</a>
                                    <span class="text-muted">Harry642</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a>
                                    <div>一、前言:     log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现,     当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中</div>
                                </li>
                                <li><a href="/article/970.htm"
                                       title="mysql、sqlserver、oracle分页,java分页统一接口实现" target="_blank">mysql、sqlserver、oracle分页,java分页统一接口实现</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/jave/1.htm">jave</a>
                                    <div>  
定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量 
oracle分页: 
    select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart 
sqlServer分页: 
 </div>
                                </li>
                                <li><a href="/article/1097.htm"
                                       title="Hessian 简单例子" target="_blank">Hessian 简单例子</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a>
                                    <div>hello.hessian.MyCar.java 
package hessian.pojo;

import java.io.Serializable;


public class MyCar implements Serializable {

    private static final long serialVersionUID = 473690540190845543</div>
                                </li>
                                <li><a href="/article/1224.htm"
                                       title="数据库对象的同义词和序列" target="_blank">数据库对象的同义词和序列</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E4%B9%89%E8%AF%8D/1.htm">同义词</a><a class="tag" taget="_blank" href="/search/ORACLE%E6%9D%83%E9%99%90/1.htm">ORACLE权限</a>
                                    <div>回顾简单的数据库权限等命令; 
解锁用户和锁定用户
alter user scott account lock/unlock;
//system下查看系统中的用户
select * dba_users;

//创建用户名和密码
create user wj identified by wj;
identified by 
//授予连接权和建表权
grant connect to </div>
                                </li>
                                <li><a href="/article/1351.htm"
                                       title="使用Powermock和mockito测试静态方法" target="_blank">使用Powermock和mockito测试静态方法</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/Powermock/1.htm">Powermock</a>
                                    <div>        实例: 
package com.bijian.study;

import static org.junit.Assert.assertEquals;

import java.io.IOException;

import org.junit.Before;
import org.junit.Test;
import or</div>
                                </li>
                                <li><a href="/article/1478.htm"
                                       title="精通Oracle10编程SQL(6)访问ORACLE" target="_blank">精通Oracle10编程SQL(6)访问ORACLE</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *访问ORACLE
*/

--检索单行数据
--使用标量变量接收数据
DECLARE
  v_ename emp.ename%TYPE;
  v_sal emp.sal%TYPE;
BEGIN
  select ename,sal into v_ename,v_sal
  from emp where empno=&no;
  dbms_output.pu</div>
                                </li>
                                <li><a href="/article/1605.htm"
                                       title="【Nginx四】Nginx作为HTTP负载均衡服务器" target="_blank">【Nginx四】Nginx作为HTTP负载均衡服务器</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a>
                                    <div> Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处: 
  负载均衡的好处 
 
 增加可用资源 
 增加吞吐量 
 加快响应速度,降低延时 
 出错的重试验机制 
 Nginx主要支持三种均衡算法: 
 
 round-robin 
 l</div>
                                </li>
                                <li><a href="/article/1732.htm"
                                       title="jquery-validation备忘" target="_blank">jquery-validation备忘</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a><a class="tag" taget="_blank" href="/search/Firebug/1.htm">Firebug</a>
                                    <div>留点学习jquery validation总结的代码: 
  
function checkForm(){
	validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID
		errorElement :"span",// 使用"div"标签标记错误, 默认:&</div>
                                </li>
                                <li><a href="/article/1859.htm"
                                       title="solr限制admin界面访问(端口限制和http授权限制)" target="_blank">solr限制admin界面访问(端口限制和http授权限制)</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/%E9%99%90%E5%AE%9AIp%E8%AE%BF%E9%97%AE/1.htm">限定Ip访问</a>
                                    <div>solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。 
可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。 
我们先看如何通过tomcat配置http授权限制。 
第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如: 
<userusername="ad</div>
                                </li>
                                <li><a href="/article/1986.htm"
                                       title="多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1" target="_blank">多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a>
                                    <div>

public class IncDecThread {

	private int j=10;
	
	/*
	 * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
	 * 两个问题:
	 * 1、线程同步--synchronized
	 * 2、线程之间如何共享同一个j变量--内部类
	 */
	public static </div>
                                </li>
                                <li><a href="/article/2113.htm"
                                       title="买房历程" target="_blank">买房历程</a>
                                    <span class="text-muted">cfyme</span>

                                    <div>  
  
2015-06-21: 万科未来城,看房子 
  
2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675 
  
2015-06-27: 房子首付,签完合同 
  
2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。 
  
首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-</div>
                                </li>
                                <li><a href="/article/2240.htm"
                                       title="[军事与科技]制造大型太空战舰的前奏" target="_blank">[军事与科技]制造大型太空战舰的前奏</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a>
                                    <div> 
 
       天气热了........空调和电扇要准备好.......... 
 
       最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界.......... 
 
 
       所以,我们不得不关</div>
                                </li>
                                <li><a href="/article/2367.htm"
                                       title="dateformat" target="_blank">dateformat</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/DateFormat/1.htm">DateFormat</a>
                                    <div>
"Symbol  Meaning             Presentation   Ex."
"------  -------             ------------   ----"
"G       era designator      (Text)         AD"
"y       year</div>
                                </li>
                                <li><a href="/article/2494.htm"
                                       title="Hadoop如何实现关联计算" target="_blank">Hadoop如何实现关联计算</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E8%81%94%E8%AE%A1%E7%AE%97/1.htm">关联计算</a>
                                    <div>    选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。 
    以关联计算为例。 
    假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中? 
  &nbs</div>
                                </li>
                                <li><a href="/article/2621.htm"
                                       title="用户模型中修改用户信息时,密码是如何处理的" target="_blank">用户模型中修改用户信息时,密码是如何处理的</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。 
场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。 
面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这</div>
                                </li>
                                <li><a href="/article/2748.htm"
                                       title="中文 iOS/Mac 开发博客列表" target="_blank">中文 iOS/Mac 开发博客列表</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/Blog/1.htm">Blog</a>
                                    <div>  
本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。 
本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。 
本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。   </div>
                                </li>
                                <li><a href="/article/2875.htm"
                                       title="js去除空格,去除左右两端的空格" target="_blank">js去除空格,去除左右两端的空格</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%99%A4%E5%B7%A6%E5%8F%B3%E4%B8%A4%E7%AB%AF%E7%9A%84%E7%A9%BA%E6%A0%BC/1.htm">去除左右两端的空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E6%8E%89%E6%89%80%E6%9C%89%E7%A9%BA%E6%A0%BC/1.htm">js去掉所有空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E9%99%A4%E7%A9%BA%E6%A0%BC/1.htm">js去除空格</a>
                                    <div>js去除空格,去除左右两端的空格 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g</div>
                                </li>
                                <li><a href="/article/3002.htm"
                                       title="SpringMVC4零配置--web.xml" target="_blank">SpringMVC4零配置--web.xml</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a>
                                    <div>servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。 
ServletContainerInitializer:启动容器时负责加载相关配置 
package javax.servlet;
import java.util.Set;
public interface ServletContainer</div>
                                </li>
                                <li><a href="/article/3129.htm"
                                       title="《开源框架那些事儿21》:巧借力与借巧力" target="_blank">《开源框架那些事儿21》:巧借力与借巧力</a>
                                    <span class="text-muted">j2eetop</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a>
                                    <div>同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。 
故事1:巧借力,乌鸦也可以吃核桃 
有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。 
核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,</div>
                                </li>
                                <li><a href="/article/3256.htm"
                                       title="JQuery EasyUI 验证扩展" target="_blank">JQuery EasyUI 验证扩展</a>
                                    <span class="text-muted">可怜的猫</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E9%AA%8C%E8%AF%81/1.htm">验证</a>
                                    <div>  最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。 
  以下内容只需要在公用js中添加即可。 
  使用类似于如下: 
 <input class="easyui-textbox" name="mobile" id="mobile&</div>
                                </li>
                                <li><a href="/article/3383.htm"
                                       title="架构师之httpurlconnection----------读取和发送(流读取效率通用类)" target="_blank">架构师之httpurlconnection----------读取和发送(流读取效率通用类)</a>
                                    <span class="text-muted">nannan408</span>

                                    <div>1.前言. 
   如题. 
2.代码. 
 

/* 
 * Copyright (c) 2015, S.F. Express Inc. All rights reserved.
 */
package com.test.test.test.send;

import java.io.IOException;
import java.io.InputStream</div>
                                </li>
                                <li><a href="/article/3510.htm"
                                       title="Jquery性能优化" target="_blank">Jquery性能优化</a>
                                    <span class="text-muted">r361251</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div>一、注意定义jQuery变量的时候添加var关键字 
这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: 
$loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的 
二、请使用一个var来定义变量 
如果你使用多个变量的话,请如下方式定义: 
. 代码如下: 
 
var page </div>
                                </li>
                                <li><a href="/article/3637.htm"
                                       title="在eclipse项目中使用maven管理依赖" target="_blank">在eclipse项目中使用maven管理依赖</a>
                                    <span class="text-muted">tjj006</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>概览: 
 
 如何导入maven项目至eclipse中 
 
 
 建立自有Maven  Java类库服务器 
 
 
 建立符合maven代码库标准的自定义类库 
 
Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。 
我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把</div>
                                </li>
                                <li><a href="/article/3764.htm"
                                       title="中国天气网省市级联页面" target="_blank">中国天气网省市级联页面</a>
                                    <span class="text-muted">x125858805</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%A7%E8%81%94/1.htm">级联</a>
                                    <div>1、页面及级联js 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&l</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>