使用 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/1891812406858936320.htm"
                           title="栈(Stack)教学资料" target="_blank">栈(Stack)教学资料</a>
                        <span class="text-muted">羊儿~</span>
<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><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/%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92/1.htm">线性回归</a>
                        <div>目录1.栈的基本概念2.栈的操作3.栈的实现4.C++实现栈1.使用C++STL实现栈2.手动实现栈(基于数组)5.栈的复杂度分析6.栈的扩展7.练习题练习1.练习2.练习3.8.总结1.栈的基本概念栈(Stack)是一种常见的数据结构,它遵循后进先出(LIFO,LastInFirstOut)的原则。这意味着最后进入栈的元素会最先被取出。栈的操作主要发生在栈的顶部。2.栈的操作栈的基本操作包括:P</div>
                    </li>
                    <li><a href="/article/1891810769390071808.htm"
                           title="Linux 磁盘满了怎么办?快速排查和清理方法" target="_blank">Linux 磁盘满了怎么办?快速排查和清理方法</a>
                        <span class="text-muted">网硕互联的小客服</span>
<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/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>当Linux磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤:一、快速定位磁盘占用原因1.检查磁盘使用情况使用df命令查看磁盘分区的使用情况:bash复制df-h参数说明:-h:以人类可读的格式显示(GB、MB)。输出示例:plaintext复制FilesystemSizeUsedAvailUse%Mo</div>
                    </li>
                    <li><a href="/article/1891810643145715712.htm"
                           title="一台服务器最多可以允许多少人同时访问?IIS连接数如何计算?" target="_blank">一台服务器最多可以允许多少人同时访问?IIS连接数如何计算?</a>
                        <span class="text-muted">网硕互联的小客服</span>
<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/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>一台服务器能够同时允许多少人访问,取决于多个硬件和软件配置因素,包括服务器的CPU、内存、网络带宽、磁盘I/O性能,以及使用的Web服务器软件(如IIS、Apache等)和应用架构。特别是对于使用IIS(InternetInformationServices)的服务器,最大连接数通常受Windows操作系统的版本、IIS配置和硬件资源等因素的限制。1.服务器允许的最大连接数的影响因素1.1服务器硬</div>
                    </li>
                    <li><a href="/article/1891808878312615936.htm"
                           title="Linux常用指令" target="_blank">Linux常用指令</a>
                        <span class="text-muted">懒人村杂货铺</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Linux系统中有许多常用的指令,以下是一些基本的命令及其用途:文件和目录操作ls-列出目录内容ls-l:以长格式列出ls-a:显示隐藏文件cd-切换目录cd/path/to/directory:进入指定目录cd..:返回上一级目录pwd-显示当前工作目录mkdir-创建目录mkdirdirnamermdir-删除空目录rmdirdirnamerm-删除文件或目录rmfilename:删除文件rm</div>
                    </li>
                    <li><a href="/article/1891807994878947328.htm"
                           title="如何提高网站在百度中的权重?" target="_blank">如何提高网站在百度中的权重?</a>
                        <span class="text-muted">网硕互联的小客服</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>要提高网站在百度搜索引擎中的权重,您可以考虑以下方法来优化网站:###提高网站在百度中的权重方法:1.**优化网站内容**:-提供高质量、有价值的内容,确保内容原创、相关性强,能够吸引用户访问并提供有用信息。2.**关键词优化**:-在网站内容中合理使用关键词,包括在标题、META标签、内容中等位置使用关键词,但避免过度堆砌关键词。3.**网站结构优化**:-确保网站结构清晰、易于导航,有良好的内</div>
                    </li>
                    <li><a href="/article/1891806735279124480.htm"
                           title="望获实时Linux系统在低空经济中的关键作用分析" target="_blank">望获实时Linux系统在低空经济中的关键作用分析</a>
                        <span class="text-muted">望获linux</span>
<a class="tag" taget="_blank" href="/search/%E9%A3%9E%E6%8E%A7Linux/1.htm">飞控Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6/1.htm">开源软件</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E7%A9%BA%E7%BB%8F%E6%B5%8E/1.htm">低空经济</a>
                        <div>在现代经济发展的新赛道上,低空经济正以前所未有的势头迅速崛起,成为一个备受瞩目的创新领域。这一新兴的经济形态,通过充分挖掘低空空域资源,整合有人驾驶与无人驾驶航空器的多元化飞行活动,正在重构传统产业边界,描绘出一幅跨界融合的经济蓝图。国家为何如此重视并大力支持这一充满潜力的产业?低空经济的定义与特点低空经济可以视为通用航空的全新升级版本,是一个多维度、跨领域的综合性产业生态系统。它巧妙地整合了航空</div>
                    </li>
                    <li><a href="/article/1891806482899464192.htm"
                           title="Node.js 中 morgan 依赖详解" target="_blank">Node.js 中 morgan 依赖详解</a>
                        <span class="text-muted">yqcoder</span>
<a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>记录每个HTTP请求的详细信息,方便开发者调试和监控应用程序。一、安装npminstallmorgan二、基本使用constexpress=require("express");constmorgan=require("morgan");constapp=express();//使用morgan中间件,默认日志格式为'dev'app.use(morgan("dev"));app.get("/",(</div>
                    </li>
                    <li><a href="/article/1891805837605793792.htm"
                           title="Java永久性修改Linux(Debian/Ubuntu)网络" target="_blank">Java永久性修改Linux(Debian/Ubuntu)网络</a>
                        <span class="text-muted">久违放晴</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/debian/1.htm">debian</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>文章目录前言一、实现思路二、手动配置网络(一)编辑/etc/network/interfaces文件(二)重启网络(三)查看网络配置三、shell脚本配置网络(一)脚本执行流程(二)编写脚本(三)完整代码(四)脚本执行方式(五)直接覆盖版(六)使用工具包的实现方案四、通过Java调用shell脚本(一)SSH远程连接调用(二)使用本地指令调用的方案总结前言对于一些私有化部署的系统,部署完毕后经常需</div>
                    </li>
                    <li><a href="/article/1891805203657715712.htm"
                           title="helm部署jenkins及使用pipeline流水线" target="_blank">helm部署jenkins及使用pipeline流水线</a>
                        <span class="text-muted">意海还念か</span>
<a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>helm部署jenkins及使用pipeline流水线1.安装helm略,请参考本专栏helm文档2.创建存储类storageClass请参考《helm搭建NFS的StorageClass》,本专栏可以查看到3.helm添加jenkins官方仓库#helmrepoaddjenkinscihttps://charts.jenkins.io#helmrepoupdate4.helm去pull下载jen</div>
                    </li>
                    <li><a href="/article/1891805198125428736.htm"
                           title="双频光猫很实用,2.4G 和 5G WiFi信号怎么选择?" target="_blank">双频光猫很实用,2.4G 和 5G WiFi信号怎么选择?</a>
                        <span class="text-muted">wljslmz</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF/1.htm">网络技术</a><a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%85%89%E7%8C%AB/1.htm">光猫</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E7%BA%BF/1.htm">无线</a>
                        <div>随着网络技术的发展,家庭和办公场景中的宽带设备越来越先进,而双频光猫就是其中一种广泛使用的设备。双频光猫的出现让用户在上网时能够根据不同的需求选择不同的频段,从而提高上网体验。本文将详细介绍双频光猫的2.4G和5GWiFi信号,以及如何在日常使用中进行合理选择,以确保网络的稳定和高效。什么是双频光猫?双频光猫是指能够同时提供2.4GHz和5GHz两个频段无线信号的光纤猫设备。传统的光猫只支持单一频</div>
                    </li>
                    <li><a href="/article/1891804189613420544.htm"
                           title="python输出值保留两位小数" target="_blank">python输出值保留两位小数</a>
                        <span class="text-muted">Xi Zi</span>
<a class="tag" taget="_blank" href="/search/numpy/1.htm">numpy</a>
                        <div>可以使用python的格式化字符串功能来输出保留两位小数的值。例如:value=3.1415926print(f'{value:.2f}')这将会输出3.14。也可以使用format()函数来输出保留两位小数的值,例如:value=3.1415926print('{:.2f}'.format(value))这也会输出3.14。还有一种方法是使用Python的内置函数round(),例如:value</div>
                    </li>
                    <li><a href="/article/1891803308159463424.htm"
                           title="java-mongo-driver使用" target="_blank">java-mongo-driver使用</a>
                        <span class="text-muted">WePlayDirty</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%AA%E5%88%86%E7%B1%BB/1.htm">未分类</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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>packagecdc.personalTool;importcdc.DBHelper;importcdc.ProgramI;importcdc.SubmissionBase;importcom.mongodb.BasicDBObject;importcom.mongodb.MongoClient;importcom.mongodb.MongoException;importcom.mongodb.</div>
                    </li>
                    <li><a href="/article/1891803048498491392.htm"
                           title="NoSQL数据库介绍与分类" target="_blank">NoSQL数据库介绍与分类</a>
                        <span class="text-muted">码农老起</span>
<a class="tag" taget="_blank" href="/search/nosql/1.htm">nosql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>目录一.NoSQL数据库的定义及其特点二.NoSQL的四种主要类型2.1文档型数据库(Document-BasedDatabase)2.2键值型数据库(Key-ValueStore)2.3列族型数据库(Column-FamilyStore)2.4图数据库(GraphDatabase)三.主要的NoSQL数据库3.1MongoDB3.2Redis3.3Cassandra3.4Neo4j四.使用NoS</div>
                    </li>
                    <li><a href="/article/1891803033545797632.htm"
                           title="清华大学DeepSeek手册又双叒叕更新!第Ⅲ册《普通人如何抓住DeepSeek红利》" target="_blank">清华大学DeepSeek手册又双叒叕更新!第Ⅲ册《普通人如何抓住DeepSeek红利》</a>
                        <span class="text-muted">纪元A梦</span>
<a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90%E5%88%86%E4%BA%AB/1.htm">资源分享</a><a class="tag" taget="_blank" href="/search/%E5%8A%9E%E5%85%AC%E8%BD%AF%E4%BB%B6/1.htm">办公软件</a><a class="tag" taget="_blank" href="/search/AI%E5%B7%A5%E5%85%B7/1.htm">AI工具</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/DeepSeek%E6%89%8B%E5%86%8C/1.htm">DeepSeek手册</a><a class="tag" taget="_blank" href="/search/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8A%93%E4%BD%8FDS%E7%BA%A2%E5%88%A9/1.htm">普通人如何抓住DS红利</a>
                        <div>继清华大学DeepSeek手册第Ⅰ册《从入门到精通》和第Ⅱ册《如何赋能职场应用》之后,很多小伙伴都能够熟练的使用DeepSeek处理工作中的问题,也对DeepSeek的应用有了更深的理解;为了让每个人都能够利用DeepSeek处理日常生活、工作、学习等方面的诸多问题,清华大学推出了DeepSeek使用手册第Ⅲ册《普通人如何抓住DeepSeek红利》,让DeepSeek能够在各个方面充分发挥其作用和</div>
                    </li>
                    <li><a href="/article/1891802277111459840.htm"
                           title="抛弃手册,开启TongWeb+TongLINK/Q的开发方式" target="_blank">抛弃手册,开启TongWeb+TongLINK/Q的开发方式</a>
                        <span class="text-muted">萝卜白菜。</span>
<a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jms/1.htm">jms</a>
                        <div>问题:当使用TongWeb+TongLINK/Q产品,想用JMS开发消息服务时,不知如何使用?1.当你看TongLINK/Q手册《JMS编程参考》时,在给你讲TongWeb5.0+TongLINK/Q8.1的消息驱动bean(Message-DrivenBean,MDB)配置。2.当你去看TongWeb7的《用户手册》时,在给你讲TongWeb7.0+TongLINK/Q8.1的消息驱动bean(</div>
                    </li>
                    <li><a href="/article/1891800382598868992.htm"
                           title="Python语言保留两位小数常用的方法!" target="_blank">Python语言保留两位小数常用的方法!</a>
                        <span class="text-muted">老男孩IT教育</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a>
                        <div>很多小伙伴在刚学习Python的时候,可能会遇到需要对数据进行格式化输出的需求,其中最常见的的要求就是保留X位小数,今天本篇文章将为大家介绍一下Python数据格式化输出的方法,以下是详细的内容:1、使用字符串格式化大部分语言都可以使用字符串格式化的方法来实现保留两位小数的效果,python也不例外:a=12.345print("%.2f"%a)#%代表格式化输出,.2代表小数点后保留两位,f代表</div>
                    </li>
                    <li><a href="/article/1891800255943471104.htm"
                           title="如何使用EchartS" target="_blank">如何使用EchartS</a>
                        <span class="text-muted">前段技术人</span>
<a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>1.引入ECharts库你可以通过以下两种方式引入ECharts库:方法一:使用CDN在HTML文件的标签中添加以下代码:EChartsExample方法二:下载并本地引入你可以从ECharts官方网站下载ECharts的压缩包,解压后将echarts.min.js文件复制到你的项目目录中,然后在HTML文件中引入:EChartsExample2.创建DOM容器在HTML文件的标签中创建一个具有指</div>
                    </li>
                    <li><a href="/article/1891800255192690688.htm"
                           title="C++集群聊天服务器项目博客目录" target="_blank">C++集群聊天服务器项目博客目录</a>
                        <span class="text-muted">为了前进而后退,为了走直路而走弯路</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</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>C++集群聊天服务器项目博客目录C++集群聊天服务器项目总概述-CSDN博客github源码地址:DarlingGYQ/chatserver:基于C++11的可以工作在nginxtcp负载均衡环境中的集群聊天服务器和客户端源码环境配置windows下使用vscode远程连接Linux服务器进行开发-CSDN博客ubuntu安装MySQL-CSDN博客ubuntu安装Redis-CSDN博客Ubun</div>
                    </li>
                    <li><a href="/article/1891797479012233216.htm"
                           title="JAVA从零开始:数组" target="_blank">JAVA从零开始:数组</a>
                        <span class="text-muted">heiheitong</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录数组1.数组的基本概念2.数组的声明与创建3.数组的使用for-each循环:数组在方法中的使用:Arrays类中的常用方法:4.多维数组5.稀疏数组数组1.数组的基本概念数组是一种数据结构,是同一类型数据的有序集合。每一个数据称作一个数组元素,每个数组元素可以通过一个整型下标来访问它们。2.数组的声明与创建首先必须声明数组变量,才能在程序中使用数组。java中有两种方法声明数组变量: int</div>
                    </li>
                    <li><a href="/article/1891796848293769216.htm"
                           title="SFT(监督微调)和RLHF(基于人类反馈的强化学习)的区别" target="_blank">SFT(监督微调)和RLHF(基于人类反馈的强化学习)的区别</a>
                        <span class="text-muted">钟小宇</span>
<a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a>
                        <div>SFT(监督微调)和RLHF(基于人类反馈的强化学习)的区别STF(SupervisedFine-Tuning)和RLHF(ReinforcementLearningfromHumanFeedback)是两种不同的模型训练方法,分别用于不同的阶段和目的。以下是它们的主要区别:1.方法概述STF(监督微调):定义:STF是指在已经预训练好的模型基础上,使用标注好的数据进一步训练模型,使其在特定任务上</div>
                    </li>
                    <li><a href="/article/1891796594647429120.htm"
                           title="Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像" target="_blank">Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像</a>
                        <span class="text-muted">行路见知</span>
<a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>1.定义参数:使用booleanParam定义一个布尔参数,示例如下booleanParam(name:'BUILD_DOCKER',description:'是否构建Docker镜像',defaultValue:false)2.使用参数:在stage中,根据参数的值决定构建方式:stage('编译打包'){steps{script{if(params.BUILD_DOCKER){echo"Bui</div>
                    </li>
                    <li><a href="/article/1891795962129608704.htm"
                           title="接口自动化测试框架设计之参数传递" target="_blank">接口自动化测试框架设计之参数传递</a>
                        <span class="text-muted">测试杂货铺</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95/1.htm">接口测试</a>
                        <div>点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快在我们设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML)中,实现测试脚本与测试数据解耦,方便后期维护。当涉及到业务场景接口用例时,由于接口与接口存在关联关系,需要从上游接口取出来相关字段传递给下游接口作为入参使用,比如在Excel中我们会这样做:在excel中新增一列【提取响应】,将上游接口的响应字段</div>
                    </li>
                    <li><a href="/article/1891795963354345472.htm"
                           title="基于 Spring Cloud + Sentinel 的全面流量治理方案" target="_blank">基于 Spring Cloud + Sentinel 的全面流量治理方案</a>
                        <span class="text-muted">power-辰南</span>
<a class="tag" taget="_blank" href="/search/java%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84%E5%B8%88%E6%88%90%E9%95%BF%E4%B8%93%E6%A0%8F/1.htm">java技术架构师成长专栏</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E9%87%8F%E6%B2%BB%E7%90%86/1.htm">流量治理</a>
                        <div>一、精准评估系统最大负载1.流量建模历史日志分析流量特征提取业务场景拆解流量模型构建容量预测模型实施方法:使用ELK分析6个月Nginx日志,提取分时/分业务QPS曲线构建典型场景模型:日常流量(正态分布)、促销流量(脉冲模型)、恶意攻击(毛刺识别)容量公式:单实例容量=(CPU核心数*1000ms)/平均RT(ms)2.数据模拟与环境搭建#使用tcpcopy复制生产流量./tcpcopy-x80</div>
                    </li>
                    <li><a href="/article/1891795204717998080.htm"
                           title="消息队列简述" target="_blank">消息队列简述</a>
                        <span class="text-muted">八二年的栗子</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>消息队列(MessageQueue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。消息队列主要解决了应用耦合、异步处理、流量削锋等问题。当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及</div>
                    </li>
                    <li><a href="/article/1891795205191954432.htm"
                           title="在Linux/Ubuntu/Debian中使用SSH连接远程服务器VPS" target="_blank">在Linux/Ubuntu/Debian中使用SSH连接远程服务器VPS</a>
                        <span class="text-muted">理工男老K</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</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/ubuntu/1.htm">ubuntu</a>
                        <div>在Linux/Ubuntu/Debian中使用SSH连接远程服务器VPS在远程管理服务器时,SSH(SecureShell)协议是我们常用的工具之一。它提供了一种加密的方式来访问和管理远程主机。默认情况下,SSH使用22端口,但有时我们需要通过指定其他端口或者通过跳板机来连接目标服务器。在这种情况下,-p和-J参数就非常有用。本文将详细介绍如何使用SSH的-p和-J参数。SSH-P参数-p参数用于</div>
                    </li>
                    <li><a href="/article/1891791677329305600.htm"
                           title="Redis:深入理解阻塞列表弹出与消息发布订阅机制_brpop原理" target="_blank">Redis:深入理解阻塞列表弹出与消息发布订阅机制_brpop原理</a>
                        <span class="text-muted">高级工程师2024</span>
<a class="tag" taget="_blank" href="/search/2024%E5%B9%B4%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AD%A6%E4%B9%A0/1.htm">2024年程序员学习</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶</div>
                    </li>
                    <li><a href="/article/1891791549948293120.htm"
                           title="307 跳转 getshell" target="_blank">307 跳转 getshell</a>
                        <span class="text-muted">饮长安千年月</span>
<a class="tag" taget="_blank" href="/search/WEB%E5%AE%89%E5%85%A8/1.htm">WEB安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>307跳转getshell前言没事网上乱翻阅,看到了p神的一个文章,通过307去getshell,说实话,真的是觉得思路很妙,特别是利用的过程,这里属实是学习了。怎么说心里面的感觉呢,就是关关难过,但是关关过前面是用的靶场环境,然后因为一直要开启的原因,后面自己搭建了一个环境搭建首先开启docker的api下面会讲的,就不说了首先我们可以自己搭建环境,需要开启docker的api接口然后安装min</div>
                    </li>
                    <li><a href="/article/1891790723192254464.htm"
                           title="DolphinScheduler环境搭建、服务启动等常见问题及解决方案" target="_blank">DolphinScheduler环境搭建、服务启动等常见问题及解决方案</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>ApacheDolphinScheduler作为一款分布式易扩展的工作流调度系统,广泛应用于大数据任务编排。然而,在实际使用中,用户可能会遇到环境搭建、服务启动、工作流执行等问题。本文结合社区文档与用户实践经验,整理以下高频问题及详细解决方案,帮助用户快速定位并解决问题。一、安装与部署问题环境依赖配置错误问题:部署时因缺少JDK、Maven或数据库配置导致失败。解决方案:安装JDK1.8+并配置J</div>
                    </li>
                    <li><a href="/article/1891790413023473664.htm"
                           title="Spring Boot 架构入门学习指南" target="_blank">Spring Boot 架构入门学习指南</a>
                        <span class="text-muted">Just_Paranoid</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%B5%81Clip/1.htm">技术流Clip</a><a class="tag" taget="_blank" href="/search/1024%E7%A8%8B%E5%BA%8F%E5%91%98%E8%8A%82/1.htm">1024程序员节</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a><a class="tag" taget="_blank" href="/search/web%E5%BA%94%E7%94%A8/1.htm">web应用</a><a class="tag" taget="_blank" href="/search/API/1.htm">API</a>
                        <div>SpringBoot架构入门学习指南1.什么是SpringBoot2.快速入门3.核心概念3.1自动配置3.2配置管理3.3Profiles4.数据访问4.1使用SpringDataJPA5.目录结构5.1目录结构5.2目录及文件作用6.拓展开发SpringBoot是Spring框架家族中的一员,由于其简洁和高效广受欢迎。本文将带你从入门到精通,逐步探索SpringBoot的架构及其丰富特性。1.</div>
                    </li>
                    <li><a href="/article/1891790415410032640.htm"
                           title="什么关系型数据库和非关系型数据库" target="_blank">什么关系型数据库和非关系型数据库</a>
                        <span class="text-muted">yqcoder</span>
<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/nosql/1.htm">nosql</a>
                        <div>一、关系型数据库1.定义关系型数据库是基于关系模型的数据库,用二维表结构来存储数据,表与表之间可以通过关系(如主键-外键关系)相互关联。2.特点2.1数据结构化数据按照预定义的表结构进行存储,每个表有固定的列和数据类型。例如,一个存储员工信息的表,可能包含“员工ID”“姓名”“部门”等列,每列都有明确的数据类型。2.2支持SQL查询使用结构化查询语言(SQL)进行数据的增删改查操作,SQL是一种标</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>