使用 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/1950233451282100224.htm"
                           title="python 读excel每行替换_Python脚本操作Excel实现批量替换功能" target="_blank">python 读excel每行替换_Python脚本操作Excel实现批量替换功能</a>
                        <span class="text-muted">weixin_39646695</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%AF%BBexcel%E6%AF%8F%E8%A1%8C%E6%9B%BF%E6%8D%A2/1.htm">读excel每行替换</a>
                        <div>Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的</div>
                    </li>
                    <li><a href="/article/1950233167633903616.htm"
                           title="男士护肤品哪个牌子好?十大男士护肤品排行榜" target="_blank">男士护肤品哪个牌子好?十大男士护肤品排行榜</a>
                        <span class="text-muted">高省APP珊珊</span>

                        <div>很多男生意识到护肤的必要性,开始着手护肤,但不知道该选哪个男士护肤品品牌使用好。目前市面上很多男士护肤品品牌,可谓琳琅满目,让人眼花缭乱。男士挑选护肤品时,根据自己皮肤需求去正规渠道挑选合适的知名护肤品比较放心靠谱。高省APP,是2021年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,也期待你的加入</div>
                    </li>
                    <li><a href="/article/1950232316408295424.htm"
                           title="9、汇编语言编程入门:从环境搭建到简单程序实现" target="_blank">9、汇编语言编程入门:从环境搭建到简单程序实现</a>
                        <span class="text-muted">神经网络酱</span>
<a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80/1.htm">汇编语言</a><a class="tag" taget="_blank" href="/search/MEPIS/1.htm">MEPIS</a><a class="tag" taget="_blank" href="/search/GNU%E5%B7%A5%E5%85%B7%E9%93%BE/1.htm">GNU工具链</a>
                        <div>汇编语言编程入门:从环境搭建到简单程序实现1.数据存储介质问题解决在处理数据存储时,若要使用MEPIS系统,需确保有其可访问的存储介质。目前,MEPIS无法向采用NTFS格式(常用于Windows2000和XP工作站)的硬盘写入数据。不过,若硬盘采用FAT32格式,MEPIS就能进行写入操作。此外,MEPIS还能将文件写入软盘和大多数USB闪存驱动器。若工作站连接到局域网,还可通过FTP协议或挂载</div>
                    </li>
                    <li><a href="/article/1950229922647699456.htm"
                           title="实时数据流计算引擎Flink和Spark剖析" target="_blank">实时数据流计算引擎Flink和Spark剖析</a>
                        <span class="text-muted">程小舰</span>
<a class="tag" taget="_blank" href="/search/flink/1.htm">flink</a><a class="tag" taget="_blank" href="/search/spark/1.htm">spark</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/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                        <div>在过去几年,业界的主流流计算引擎大多采用SparkStreaming,随着近两年Flink的快速发展,Flink的使用也越来越广泛。与此同时,Spark针对SparkStreaming的不足,也继而推出了新的流计算组件。本文旨在深入分析不同的流计算引擎的内在机制和功能特点,为流处理场景的选型提供参考。(DLab数据实验室w.x.公众号出品)一.SparkStreamingSparkStreamin</div>
                    </li>
                    <li><a href="/article/1950229040682037248.htm"
                           title="48. 旋转图像 - 力扣(LeetCode)" target="_blank">48. 旋转图像 - 力扣(LeetCode)</a>
                        <span class="text-muted">Fiee-77</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</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%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a>
                        <div>题目:给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例2:输入:matrix=[[5,1,9,11],[2,4,8,10],[13,3,6,</div>
                    </li>
                    <li><a href="/article/1950228285266915328.htm"
                           title="Git 与 GitHub 的对比与使用指南" target="_blank">Git 与 GitHub 的对比与使用指南</a>
                        <span class="text-muted">一念&</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>Git与GitHub的对比与使用指南在软件开发中,Git和GitHub是两个密切相关但本质不同的工具。下面我将逐步解释它们的定义、区别、核心概念以及如何协同使用,确保内容真实可靠,基于广泛的技术实践。1.什么是Git?Git是一个分布式版本控制系统,由LinusTorvalds于2005年创建。它的核心功能是跟踪代码文件的变化,帮助开发者管理项目历史记录、协作和回滚错误。Git是开源的,可以在本地</div>
                    </li>
                    <li><a href="/article/1950227023859347456.htm"
                           title="Linux系统配置(应用程序)" target="_blank">Linux系统配置(应用程序)</a>
                        <span class="text-muted">1风天云月</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/1.htm">应用程序</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/1.htm">编译安装</a><a class="tag" taget="_blank" href="/search/rpm/1.htm">rpm</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a>
                        <div>目录前言一、应用程序概述1、命令与程序的关系2、程序的组成3、软件包封装类型二、RPM1、RPM概述2、RPM用法三、编译安装1、解包2、配置3、编译4、安装5、启用httpd服务结语前言在Linux中的应用程序被视为将软件包安装到系统中后产生的各种文档,其中包括可执行文件、配置文件、用户手册等内容,这些文档被组织为一个有机的整体,为用户提供特定的功能,因此对于“安装软件包”与“安装应用程序”这两</div>
                    </li>
                    <li><a href="/article/1950224745093984256.htm"
                           title="在线人数统计业务设计(场景八股文)" target="_blank">在线人数统计业务设计(场景八股文)</a>
                        <span class="text-muted"></span>

                        <div>业务问题在当经的网站中,在线人数的实时统计已经是一个必不可少的模块了,并且该统计功能最好能够按不同的时间间隔做的统计,现在需要你设计一个在线人数统计的模块,你应该怎么进行设计的呢?背景一个网校下会有多个学员。目前平台大概有十个,平台对应的网校大概五十几个,平均一个网校会有5w个用户,预计总人数为200w,最该学员的在线人数在10w左右。设计思路最开始的时候,想到的就是使用mysql直接实现,但是明</div>
                    </li>
                    <li><a href="/article/1950224639502381056.htm"
                           title="2018-09-27 aop相关" target="_blank">2018-09-27 aop相关</a>
                        <span class="text-muted">蒋超_58dc</span>

                        <div>1.静态织入,需要使用aspectj专用的compilermaven工程可以采用:https://www.mojohaus.org/aspectj-maven-plugin/2.动态织入,配合spring,创建代理来执行3.</div>
                    </li>
                    <li><a href="/article/1950224618606358528.htm"
                           title="Aop +反射 实现方法版本动态切换" target="_blank">Aop +反射 实现方法版本动态切换</a>
                        <span class="text-muted"></span>

                        <div>需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)</div>
                    </li>
                    <li><a href="/article/1950223483048882176.htm"
                           title="【ARM】FPU,VFP,ASE,NEON,SVE...是什么意思?" target="_blank">【ARM】FPU,VFP,ASE,NEON,SVE...是什么意思?</a>
                        <span class="text-muted">亿道电子Emdoor</span>
<a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a>
                        <div>1、文档目标对执行浮点和SIMD操作的逻辑的各种名称的缩写词进行简要解释。2、问题场景Arm处理器内核中有用于执行浮点和SIMD操作的逻辑,有各种名称。它们通常是一系列的缩写形式,因此本文旨在对每一个缩写词进行简要解释。3、软硬件环境1、软件版本:不涉及2、电脑环境:不涉及4、相关缩写FPU(Floating-PointUnit)浮点单元浮点单元是处理器核心中的一个模块,用于使用浮点数执行算术运算</div>
                    </li>
                    <li><a href="/article/1950219166367674368.htm"
                           title="包含日志获取webshell" target="_blank">包含日志获取webshell</a>
                        <span class="text-muted">陈望_ning</span>

                        <div>日志文件关闭:Apache目录下的httpd.conf文件#ErrorLog"logs/error.log"#CustomLog"logs/access.log"common加#号为注释不产生日志文件如果去掉#将会在Apache/logs/目录下产生日志文件linux:access_logerror_logwindows:access.logerror.logaccess_log每一行记录了一次网</div>
                    </li>
                    <li><a href="/article/1950218819616174080.htm"
                           title="基于redis的Zset实现作者的轻量级排名" target="_blank">基于redis的Zset实现作者的轻量级排名</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/redis/1.htm">redis</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/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                        <div>基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的</div>
                    </li>
                    <li><a href="/article/1950218818781507584.htm"
                           title="【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge" target="_blank">【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge</a>
                        <span class="text-muted">本本本添哥</span>
<a class="tag" taget="_blank" href="/search/002/1.htm">002</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E9%98%B6%E5%BC%80%E5%8F%91%E8%83%BD%E5%8A%9B/1.htm">进阶开发能力</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>一、报错内容Causedby:com.yomahub.liteflow.exception.ChainDuplicateException:[chainnameduplicate]chainName=categoryChallengeatcom.yomahub.liteflow.parser.helper.ParserHelper.lambda$null$0(ParserHelper.java:1</div>
                    </li>
                    <li><a href="/article/1950218314064130048.htm"
                           title="Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)" target="_blank">Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)</a>
                        <span class="text-muted">bug菌¹</span>
<a class="tag" taget="_blank" href="/search/Java%E5%AE%9E%E6%88%98%28%E8%BF%9B%E9%98%B6%E7%89%88%29/1.htm">Java实战(进阶版)</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Java%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Java零基础入门</a><a class="tag" taget="_blank" href="/search/Java%E5%B9%B6%E5%8F%91/1.htm">Java并发</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">线程池</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%AF%87/1.htm">多线程篇</a>
                        <div>本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行</div>
                    </li>
                    <li><a href="/article/1950217304876838912.htm"
                           title="STM32入门之TIM基本定时器" target="_blank">STM32入门之TIM基本定时器</a>
                        <span class="text-muted">嵌入式白话</span>
<a class="tag" taget="_blank" href="/search/STM32%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0/1.htm">STM32入门学习</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                        <div>一、定时器简介定时器是嵌入式系统中的关键外设之一,它可以用于生成精确的延时、周期性中断、PWM波形生成等功能。在STM32F1系列单片机中,定时器不仅能为系统提供精确的时钟,还支持外部事件的捕获以及信号输出。对于定时器的功能,我们可以通过一个生活中非常常见的例子来形象地描述:微波炉的定时器。想象你正在使用微波炉加热食物。在微波炉里,定时器的作用就是帮助你控制食物加热的时间。当你设置了加热时间后,定</div>
                    </li>
                    <li><a href="/article/1950216170401492992.htm"
                           title="常规笔记本和加固笔记本的区别" target="_blank">常规笔记本和加固笔记本的区别</a>
                        <span class="text-muted">luchengtech</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E9%98%B2%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">三防笔记本</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">加固计算机</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">加固笔记本</a>
                        <div>在现代科技产品中,笔记本电脑因其便携性和功能性被广泛应用。根据使用场景和需求的不同,笔记本可分为常规笔记本和加固笔记本,二者在多个方面存在显著区别。适用场景是区分二者的重要标志。常规笔记本主要面向普通消费者和办公人群,适用于家庭娱乐、日常办公、学生学习等相对稳定的室内环境。比如,人们在家用它追剧、处理文档,学生在教室用它完成作业。而加固笔记本则专为特殊行业设计,像军事、野外勘探、工业制造、交通运输</div>
                    </li>
                    <li><a href="/article/1950215473043927040.htm"
                           title="云集怎么赚钱?云集APP分享购物赚钱攻略" target="_blank">云集怎么赚钱?云集APP分享购物赚钱攻略</a>
                        <span class="text-muted">古楼</span>

                        <div>云集app怎么赚钱?云集app作为是一个全面的电商导购平台,提供诸如淘宝、京东、拼多多等各大平台的优惠券,其他同类型的导购平台相比,更加的全面,线上线下全面出击。如果你想通过云集赚钱,那你可以把这款APP推荐给淘宝(10亿用户)、拼多多(3亿用户)、京东(1亿用户)使用,那你能赚到他们购物返佣,也可以自己购物领优惠券能省不少钱,以后还有更多的商家与粉象合作,这么免费的App人人都需要,很好推广。至</div>
                    </li>
                    <li><a href="/article/1950214205252628480.htm"
                           title="为了在未来的人工智能世界中取得成功,学生们必须学习人类写作的优点" target="_blank">为了在未来的人工智能世界中取得成功,学生们必须学习人类写作的优点</a>
                        <span class="text-muted">睿邸管家</span>

                        <div>澳大利亚各地的学生在新学年开始使用铅笔、钢笔和键盘学习写字。在工作场所,机器也在学习写作,如此有效,几年之内,它们可能会写得比人类更好。有时它们已经做到了,就像Grammarly这样的应用程序所展示的那样。当然,人类现在的日常写作可能很快就会由具有人工智能(AI)的机器来完成。手机和电子邮件软件常用的预测文本是无数人每天都在使用的一种人工智能写作形式。据AI行业研究机构称,到2022年,人工智能及</div>
                    </li>
                    <li><a href="/article/1950212281807728640.htm"
                           title="淘宝内部优惠劵领取教程,淘宝内部优惠劵软件使用方法!" target="_blank">淘宝内部优惠劵领取教程,淘宝内部优惠劵软件使用方法!</a>
                        <span class="text-muted">测评君高省</span>

                        <div>淘宝优惠券一般分为2种:第1种:是你在淘宝上买东西经常能看到的那种店铺优惠券,商家主动将一些有门槛的优惠券摆在旁边,这种券一般需要你满足消费金额或者去邀请好友才能减个几块钱。第2种:就是淘宝内部优惠券,商家为了打造爆款时会低价促销从而发放一些低价优惠券,只要下单就能立减,而且优惠的金额都非常高。但是为了控制成本并设置一定的销售目标,一旦达成预订销售额,就会停止发送优惠券。优惠劵导购平台哪个好?今天</div>
                    </li>
                    <li><a href="/article/1950209621381672960.htm"
                           title="Android 应用权限管理详解" target="_blank">Android 应用权限管理详解</a>
                        <span class="text-muted"></span>

                        <div>文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G</div>
                    </li>
                    <li><a href="/article/1950209236877242368.htm"
                           title="严重的DDoS 攻击澳大利亚主要宽带提供商" target="_blank">严重的DDoS 攻击澳大利亚主要宽带提供商</a>
                        <span class="text-muted">Fancy1816575412</span>

                        <div>本周早些时候,澳大利亚最大的固定无线宽带运营商CirrusCommunications遭受了一次重大的DDoS攻击,导致其一半以上的网络瘫痪。该公司在其网站上声称:“强大的架构、数百个传输站点以及光纤和微波回程的使用使其能够以非常高的正常运行时间提供高速”。CirrusCommunications表示,它覆盖了澳大利亚十大人口中心以及几个主要的区域中心,主要为企业和政府客户提供服务。然而,据The</div>
                    </li>
                    <li><a href="/article/1950208989954371584.htm"
                           title="Selenium 特殊控件操作与 ActionChains 实践详解" target="_blank">Selenium 特殊控件操作与 ActionChains 实践详解</a>
                        <span class="text-muted">小馋喵知识杂货铺</span>
<a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a>
                        <div>1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个</div>
                    </li>
                    <li><a href="/article/1950207097023033344.htm"
                           title="Pktgen-DPDK:开源网络测试工具的深度解析与应用" target="_blank">Pktgen-DPDK:开源网络测试工具的深度解析与应用</a>
                        <span class="text-muted">艾古力斯</span>

                        <div>本文还有配套的精品资源,点击获取简介:Pktgen-DPDK是基于DPDK的高性能流量生成工具,适用于网络性能测试、硬件验证及协议栈开发。它支持多种网络协议,能够模拟高吞吐量的数据包发送。本项目通过利用DPDK的高速数据包处理能力,允许用户自定义数据包内容,并实现高效的数据包管理与传输。文章将指导如何安装DPDK、编译Pktgen、配置工具以及使用方法,最终帮助开发者和网络管理员深入理解并优化网络</div>
                    </li>
                    <li><a href="/article/1950207097413103616.htm"
                           title="微信公众号回调java_处理微信公众号消息回调" target="_blank">微信公众号回调java_处理微信公众号消息回调</a>
                        <span class="text-muted">weixin_39607620</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E5%9B%9E%E8%B0%83java/1.htm">微信公众号回调java</a>
                        <div>1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.</div>
                    </li>
                    <li><a href="/article/1950206970766094336.htm"
                           title="C++编程基础与面向对象概念解析" target="_blank">C++编程基础与面向对象概念解析</a>
                        <span class="text-muted">侯昂</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/1.htm">面向对象编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E8%AF%AD%E6%B3%95/1.htm">C++语法</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E4%B8%8E%E5%AF%B9%E8%B1%A1/1.htm">类与对象</a><a class="tag" taget="_blank" href="/search/%E7%BB%A7%E6%89%BF%E4%B8%8E%E5%A4%9A%E6%80%81%E6%80%A7/1.htm">继承与多态性</a>
                        <div>C++编程基础与面向对象概念解析背景简介C++是一种广泛使用的面向对象编程语言,它允许开发者创建高效、灵活且功能强大的程序。本文基于《C++Primer》一书的章节内容,深入解析C++的核心概念和面向对象编程原则,旨在帮助读者构建扎实的C++编程基础。面向对象编程的原则软件危机与进化介绍了软件危机的产生和软件进化的必要性,强调了面向对象编程(OOP)在应对这些问题中的优势。面向对象编程范式讨论了面</div>
                    </li>
                    <li><a href="/article/1950206718524846080.htm"
                           title="手把手教你用C语言实现顺序表" target="_blank">手把手教你用C语言实现顺序表</a>
                        <span class="text-muted"></span>

                        <div>hello,大家好,本篇文章旨在为大家讲解如何使用C语言实现顺序表,还有就是小编自己复习一下相关知识,OK,那我们现在开始。在通讯录中,有增删查改等功能,那么顺序表我们也会对以上功能进行实现。一、创建并初始化顺序表1.创建typedefintSLDataType;#defineINIT_CAPACITY4//动态顺序表--按需申请typedefstructSeqList{SLDataType*a;</div>
                    </li>
                    <li><a href="/article/1950205711409541120.htm"
                           title="selenium特殊场景处理" target="_blank">selenium特殊场景处理</a>
                        <span class="text-muted">Monica_ll</span>
<a class="tag" taget="_blank" href="/search/Selenium/1.htm">Selenium</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>文章目录前言一、多窗口处理二、浏览器弹窗处理包含alert、confirm、prompt三、鼠标和键盘事件处理前言在使用selenium操作浏览器的过程中可能需要借助键盘和鼠标功能完成一些操作,或者操作弹窗处理,本文主要是整理自己工作过程中使用过的一些方法一、多窗口处理在实际测试过程中经常会有通过点击或者连接打开新的窗口,这种情况下就需要切换webDriver到对应浏览器对象才能操作新窗口的元素。</div>
                    </li>
                    <li><a href="/article/1950204701714739200.htm"
                           title="环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用" target="_blank">环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用</a>
                        <span class="text-muted"></span>

                        <div>本文将分别介绍Python、Anaconda/Miniconda、PyCharm的安装、配置与使用,详细介绍Python环境搭建的全过程,涵盖Python、Pip、PythonLauncher、Anaconda、Miniconda、Pycharm等内容,以官方文档为参照,使用经验为补充,内容全面而详实。由于图片太多,就先贴一个无图简化版吧,详情请查看Python+Anaconda/Minicond</div>
                    </li>
                    <li><a href="/article/1950202936449626112.htm"
                           title="Qwen3 大模型实战:使用 vLLM 部署与函数调用(Function Call)全攻略" target="_blank">Qwen3 大模型实战:使用 vLLM 部署与函数调用(Function Call)全攻略</a>
                        <span class="text-muted">曦紫沐</span>
<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/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2/1.htm">大模型部署</a><a class="tag" taget="_blank" href="/search/Qwen3/1.htm">Qwen3</a><a class="tag" taget="_blank" href="/search/vLLM/1.htm">vLLM</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8/1.htm">函数调用</a>
                        <div>文章摘要本文将带你从零开始,深入掌握如何使用Qwen3-8B大语言模型,结合vLLM进行高性能部署,并通过函数调用(FunctionCall)实现模型与外部工具的智能联动。我们将详细讲解部署命令、调用方式、代码示例及实际应用场景,帮助你快速构建基于Qwen3的智能应用。一、Qwen3简介与部署环境准备Qwen3是通义千问系列的最新一代大语言模型,具备强大的自然语言理解和生成能力,尤其在函数调用、工</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>