linux系统shell脚本中使用图形对话框

linux系统shell脚本中使用图形对话框

本文提供两种图形化方法
第一种是图形化shell即dialog,另一种是gtk+的zenity;

liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。
默认是已安装的,如果没有安装使用以下命令安装
sudo apt install dialog

每个对话框提供的输出有两种形式:
1. 将所有输出到stderr,不显示到屏幕。如果要将输出重定向到文件可以使用2>filename;
2. 使用退出状态码,“OK”为0,“NO”为1,"ESC"为255

通用选项 common options:(这个选项来设置dialog box的背景,颜色和 标题等)

[--title ]  指定将在对话框的上方显示的标题字符串<br> [--colors]    解读嵌入式“\ Z”的对话框中的特殊文本序列,序列由下面的字符 0-7, b  B, u, U等,恢复正常的设置使用“\Zn”。<br> [--no-shadow]   禁止阴影出现在每个对话框的底部<br> [--shadow]   应该是出现阴影效果<br> [--insecure]   输入部件的密码时,明文显示不安全,使用星号来代表每个字符</p> <p>[--no-cancel]   设置在输入框,菜单,和复选框中,不显示“cancel”项<br> [--clear]   完成清屏操作。在框体显示结束后,清除框体。这个参数只能单独使用,不能和别的参数联合使用。<br> [--ok-label <str>]   覆盖使用“OK”按钮的标签,换做其他字符。<br> [--cancel-label <str>]  功能同上<br> [--backtitle <backtitle>] 指定的backtitle字符串显示在背景顶端。<br> [--begin <y> <x>]   指定对话框左上角在屏幕的上的做坐标<br> [--timeout <secs>]   超时(返回的错误代码),如果用户在指定的时间内没有给出相应动作,就按超时处理<br> [--defaultno]   使的是默认值 yes/no,使用no<br> [--sleep <secs>]<br> [--stderr]  以标准错误方式输出<br> [--stdout]  以标准方式输出<br> [--output-fd <fd>] 指定输出文件描述符,如果是标准输出则使用--output-fd 1<br> [--output-separator <str>] 指定输出多个值时之间的分隔符,如--output-separator ','<br> [--default-item <str>]  设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认</p> <p>窗体类型:<br> 使用命令dialog也可以直接查看具体参数 </p> <p>常见的对话框控件选项有: <br> [ –calendar ] 提供了一个日历,让你可以选择日期 <br> [ –checklist ] 允许你显示一个选项列表,每个选项都可以被单独的选择 (复选框) <br> [ –from ] 允许您建立一个带标签的文本字段,并要求填写 <br> [ –fselect ] 提供一个路径,让你选择浏览的文件 <br> [ –gauge ] 显示一个表,呈现出完成的百分比,就是显示出进度。 <br> [ –infobox ] 显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕 (信息框) <br> [ –inputbox ] 让用户输入文本 (输入框 ) <br> [ –inputmenu ] 提供一个可供用户编辑的菜单 (可编辑的菜单框) <br> [ –menu ] 显示一个列表供用户选择 (菜单框) <br> [ –msgbox ] 显示一条消息,并要求用户选择一个确定按钮 (消息框 ) <br> [ –pause ] 显示一个表格用来显示一个指定的暂停期的状态 <br> [ –passwordbox ] 显示一个输入框,它隐藏文本 <br> [ –passwordfrom ] 显示一个来源于标签并且隐藏的文本字段 <br> [ –radiolist ] 提供一个菜单项目组,只有一个项目,可以选择 (单选框 ) <br> [ –tailbox ] 在一个滚动窗口文件中使用tail命令来显示文本 <br> [ –tailboxbg] 跟tailbox类似,但是在background模式下操作 <br> [ –textbox ] 在带有滚动条的文本框中显示文件的内容 (文本框) <br> [ –timebox ] 提供一个窗口,选择小时,分钟,秒</p> <p>[ –yesno ] 提供一个带有yes和no按钮的简单信息框 (是/否框)</p> <p>命令示例<br> 1.消息框<br> 格式:dialog --msgbox text height width<br> 例子:</p> <pre><code class="language-bash">(dialog --title TESTING --msgbox "this is a msgbox" 10 20) ret=$? if [ ${ret} -eq 0 ] ;then     echo "ok" fi</code></pre> <p>2.yesno框<br> 格式:dialog –yesno text height width<br> 例子:<br>  </p> <pre><code class="language-bash">(dialog --title "yes/no" --no-shadow --yesno "do you want to click yes?" 10 30) ret = $? if [ ${ret} -eq 0 ] ;then     echo "yes clicked" else     echo "not yes" fi</code></pre> <p>3.输入框<br> 格式:dialog --inputbox text height width<br> 例子:<br>  </p> <pre><code class="language-bash">inputtxt=$(dialog --output-fd 1 --title "Input your name" --inputbox "Please input your name:" 10 30) echo ${inputtxt}</code></pre> <p>4.密码框<br> 格式:<br> dialog  --passwordbox text height width [init]<br> 例子:<br>  </p> <pre><code class="language-bash">passwd=$(dialog --output-fd 1 --title "Password" --passwordbox "Please type password:" 10 35) echo ${passwd}</code></pre> <p>这样我们的密码就暴露出来了,是不是很不安全,所以通常我们会加上一个安全选项<br> --insecure 将每个字符用*来显示出来<br>  </p> <pre><code class="language-bash">passwd=$(dialog --output-fd 1 --title "Password" --insecure --passwordbox  "Please type password:" 10 30) echo ${passwd}</code></pre> <p>5.文本框<br> 格式:dialog --textbox file height width<br> 例子:</p> <pre><code class="language-bash">dialog --title "Please review the fstab" --textbox /etc/fstab 28 60</code></pre> <p>6.菜单框<br> 格式:dialog --menu text height width menu-height tag1 item1 tag2 item2 …<br> 例子:<br>  </p> <pre><code class="language-bash">selectedid=$(dialog --output-fd 1 --title "Pick a choice" --menu "Choose one" 12 35 5 1 "say hello to everyone" 2 "thanks for your support" 3 "exit") echo ${selectedid}</code></pre> <p>7.Fselect框(文件选择框)<br> 格式:dialog --fselect filepath height width<br> 例子:</p> <pre><code class="language-bash">filename=$(dialog --output-fd 1 --title "Pick one file" --fselect /etc/ 7 40) echo ${filename}</code></pre> <p>8.复选框<br> 格式:dialog --checklist "Test" height width menu-height [tag1 item1 status1] [tag2 item2 status2] …<br> 例子:</p> <pre><code class="language-bash">lst=$(dialog --output-fd 1 --backtitle "Checklist" --checklist "Test" 20 50 10 Memory Memory_Size on Disk Disk_Size off CPU CPU_count on) for item in ${lst} do echo ${item} selected. done</code></pre> <p>9.显示日历<br> 格式:dialog --calendar "Date" height width day month year<br> 例子:<br> #显示当前日期</p> <pre><code class="language-bash">thisdate=$(dialog --output-fd 1 --title "Calendar" --calendar "Date" 5 50) echo ${thisdate}</code></pre> <p>#显示指定日期</p> <pre><code class="language-bash">thisdate=$(dialog --output-fd 1 --title "Calendar" --calendar "Date" 5 50 1 5 2020) echo ${thisdate}</code></pre> <p>10.进度框架<br> 格式:dialog --gauge text height width  [<percent>]<br> 例子:<br> #固定进度显示<br> dialog --title "installation pro" --gauge "installation" 10 30 10 </p> <p>#实时动态进度</p> <pre><code class="language-bash">for i in {1..100} ;do echo $i;done |dialog --title "installation pro" --gauge "installation" 10 30</code></pre> <p>顺便补充一个tar命令压缩解压缩带进度条的实现<br> 需要用到pv命令,默认是已经安装的,如果没有安装参考以下命令<br> yum install pv    #centos<br> apt install pv    #ubuntu<br> brew install pv   #mac<br> # 解压缩<br><strong>pv ${filename} | tar -zxf -</strong></p> <p># 压缩<br><strong>tar -cf - "${filename}" | pv -s $(($(du -sk "${filename}" | awk '{print $1}') * 1024)) | gzip > ${filename}.tar.gz</strong><br> # 还可以在tar命令后加上以下选项用逗号代替进度 --checkpoint=100 --checkpoint-action=dot --totals</p> <p><br><strong>zenity</strong><br> zenity是一个开源显示GTK+对话框的命令行应用程序,它允许在图形框中与shell交互信息。<br> 该应用程序允许您在命令行中创建图形对话框,并使用户和shell之间的交互非常容易。</p> <p>Zenity特性<br>   FOSS软件<br>   跨平台应用程序<br>   允许GTK +对话框执行<br>   命令行工具<br>   在Shell脚本中的支持<br> 用处<br>   轻松创建GUI<br>   比其他复杂工具更少的功能<br>   使shell脚本能够与GUI用户交互<br>   对于图形用户交互,可以进行简单的对话创建<br> Zentity默认安装或者在今天大多数的标准Linux发行库可用。<br> 如果没有安装使用以下命令安装<br> sudo apt install zenity</p> <p>Zenity基本对话框<br> 1.快速日历对话框</p> <pre><code class="language-bash">thisdate=$(zenity --calendar) echo ${thisdate}</code></pre> <p>2.错误提示框</p> <pre><code class="language-bash">zenity --title="error" --text="hhaha" --error</code></pre> <p>3.一般文本输入对话框</p> <pre><code class="language-bash">thistxt=$(zenity --entry --title="name" --text="please input your name:") echo ${thistxt}</code></pre> <p>4.信息提示框</p> <pre><code class="language-bash">zenity --info --title="info" --text="hello info"</code></pre> <p>5.问题对话框</p> <pre><code class="language-bash">zenity --title="?" --text="1 are you ok ?" --question</code></pre> <p>6.进度条<br> zenity --title="progess of xxx" --text="runing ..." --progress --auto-close --percentage=30<br> #实时动态进度</p> <pre><code class="language-bash">for i in {1..100} ;do echo $i; sleep 0.2;done | zenity --title="progess of xxx" --text="runing ..." --progress --auto-close</code></pre> <p><br> #实时动态进度示例2</p> <pre><code class="language-bash">(     echo "50";     tar -zxvf test.tar.gz ;     echo "100"; ) |zenity --progress --title="test" --text="test" --auto-close</code></pre> <p>7.缩放对话框</p> <pre><code class="language-bash">zenity --title="scale of xxx" --text="scale:" --scale</code></pre> <p>8.密码输入框</p> <pre><code class="language-bash">zenity --title="password of xxx" --text="password:" --password</code></pre> <p>9.窗体对话框<br> zenity --title="forms of xxx" --text="forms ..." --forms<br> --text=STRING<br> --separator=STRING<br> --add-entry=FIELDNAME<br> --add-password=FIELDNAME<br> --add-calendar=FIELDNAME</p> <pre><code class="language-bash">thisform=$(zenity --forms --title "" --text="信息" --separator="," \ --ok-label="确定" --cancel-label="取消" \ --add-entry="IP地址" --add-entry="端口号" \ --add-entry="域名" --add-entry="用户名" \ --add-password="密码") if [ "$?" = "0" ] ;then     ip=$(awk -F, '{print $1}' <<<${thisform})     domain=$(awk -F, '{print $3}' <<<${thisform})     port=$(awk -F, '{print $2}' <<<${thisform})     username=$(awk -F, '{print $4}' <<<${thisform}) fi echo "ip: ${ip}" echo "port: ${port}" echo "name: ${username}"</code></pre> <p>10.关于对话</p> <pre><code class="language-bash">zenity --about</code></pre> <p>11. 拾色器</p> <pre><code class="language-bash">thisrgb=$(zenity --title="please select your color" --color-selection) echo ${thisrgb}</code></pre> <p>12. 文件选择器</p> <pre><code class="language-bash">thisfile=$(zenity --title="please select your file" --file-selection) echo ${thisfile}</code></pre> <p>13. 列表对话框<br> zenity --list<br> List options<br> --text=STRING        Set the dialog text<br> --column=STRING      Set the column header<br> --checklist          Use check boxes for first column<br> --radiolist          Use radio buttons for first column<br> --separator=STRING   Set output separator character<br> --multiple           Allow multiple rows to be selected<br> --editable           Allow changes to text<br> --print-column=NUMBER<br>       Specify what column to print to standard output. The default is to return the first<br>       column. 'ALL' may be used to print all columns.<br> --hide-column=NUMBER Hide a specific column<br> --hide-header        Hides the column headers</p> <p># radiolist:</p> <pre><code class="language-bash">thisradio=$(zenity --list --text "Is this helpful?" \ --radiolist --column "Pick" --column "Opinion" \ TRUE Amazing FALSE Average FALSE "Difficult to follow" FALSE "Not helpful"); echo ${thisradio}</code></pre> <p># checklist:</p> <pre><code class="language-bash">thisoption=$(zenity --list --text "What do you think of this?" \ --checklist --column "Pick" --column "options" \ TRUE "More pictures" TRUE "More complete post" \ FALSE "Includes Installation guidelines" \ FALSE "Create a forum for question queries" \ --separator=":"); echo ${thisoption}</code></pre> <p>14. 通知对话框</p> <pre><code class="language-bash">zenity  --notification --text "Please update your system."</code></pre> <p><br> 参考资料<br> https://www.jianshu.com/p/fd2122832a1e<br> https://www.howtoing.com/zenity-creates-graphical-gtk-dialog-boxes-in-command-line-and-shell-scripts/<br>  </p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1275287837301817344"></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_env,#,07shell)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1506099230886920192.htm" title="《前端运维》一、Linux基础--07Shell函数" target="_blank">《前端运维》一、Linux基础--07Shell函数</a> <span class="text-muted">Zaking</span> <div>linuxshell可以用户定义函数,然后在shell脚本中可以随便调用。shell中函数的定义格式如下:[function]funname[()]{action;[returnint;]}Shell中的函数有两种写法,一种是:functiona(){action;returninit;}另外一种是:a(){action;returninit;}这两种的含义都是一样的。参数的返回,可以显示加ret</div> </li> <li><a href="/article/1274763999619072000.htm" title="07shell printf格式化输出" target="_blank">07shell printf格式化输出</a> <span class="text-muted">毛子阿卡西</span> <div>printf"%-10s%-8s%-4s\n"姓名性别体重kgprintf"%-10s%-8s%-4.2f\n"郭靖男66.1234printf"%-10s%-8s%-4.2f\n"杨过男48.6543printf"%-10s%-8s%-4.2f\n"郭芙女47.9876out:姓名性别体重kg郭靖男66.12杨过男48.65郭芙女47.99%-10s10个空格左对齐%4.2f保留2位小数</div> </li> <li><a href="/article/1214566847916118016.htm" title="07Shell数组" target="_blank">07Shell数组</a> <span class="text-muted">D小调的微笑</span> <div>Shell数组变量普通数组:只能使用整数作为数组索引关联数组:可以使用字符串作为数组索引普通数组定义数组方法1:一次赋一个值数组名[索引]=变量值示例#array1[0]=pear#array1[1]=apple#array1[2]=orange#array1[3]=peach方法2:一次赋多个值数组名=(变量值1变量值2变量值3...)示例#books=(linuxshellawkopensta</div> </li> <li><a href="/article/1736208384639688704.htm" title="致需要扩展ubuntu工具认识的Linuxer | apps shell" target="_blank">致需要扩展ubuntu工具认识的Linuxer | apps shell</a> <span class="text-muted">AlicFeng</span> <div>前言前端时间抽出时间整理了一下自己常用的ubuntu软件工具并分享给了大家,点击那个程序员的Linux常用软件清单可以查看,有趣的是早些天也学习gtk桌面入门开发,碰巧又遇到了zenity,其实我想表达的是:"我将常用的ubuntu工具软件继承到了一个桌面的安装工具",更便于安装。使用方法wgethttps://github.com/alicfeng/Linux_env/blob/master/s</div> </li> <li><a href="/article/18.htm" title="jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque" target="_blank">jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E8%B7%A8%E5%9F%9F/1.htm">跨域</a><a class="tag" taget="_blank" href="/search/%E4%BC%97%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">众观千象</a> <div>XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1 </div> </li> <li><a href="/article/145.htm" title="mysql 分区查询优化" target="_blank">mysql 分区查询优化</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%8C%BA/1.htm">分区</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8C%96/1.htm">优化</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 分区查询优化 引入分区可以给查询带来一定的优势,但同时也会引入一些bug. 分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。 所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。 可以通过查看explain执行计划,是否携带 partitions</div> </li> <li><a href="/article/272.htm" title="MYSQL存储过程中使用游标" target="_blank">MYSQL存储过程中使用游标</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/Mysql%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/1.htm">Mysql存储过程</a> <div>DELIMITER $$ DROP PROCEDURE IF EXISTS getUserInfo $$ CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08--    BEGINdecla</div> </li> <li><a href="/article/399.htm" title="mysql 和 sqlite 区别" target="_blank">mysql 和 sqlite 区别</a> <span class="text-muted">Array_06</span> <a class="tag" taget="_blank" href="/search/sqlite/1.htm">sqlite</a> <div>转载: http://www.cnblogs.com/ygm900/p/3460663.html mysql 和 sqlite 区别 SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率 MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率 MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq</div> </li> <li><a href="/article/526.htm" title="pinyin4j使用" target="_blank">pinyin4j使用</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/pinyin4j/1.htm">pinyin4j</a> <div>首先需要pinyin4j的jar包支持;jar包已上传至附件内 方法一:把汉字转换为拼音;例如:编程转换后则为biancheng      /** * 将汉字转换为全拼 * @param src 你的需要转换的汉字 * @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal</div> </li> <li><a href="/article/653.htm" title="微博发送私信" target="_blank">微博发送私信</a> <span class="text-muted">随意而生</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E5%8D%9A/1.htm">微博</a> <div>在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面 http://weibo.com/message/history?uid=****&name=**** 可以发现其发送提交的Post请求和其中的数据, 让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。 </div> </li> <li><a href="/article/780.htm" title="jsp" target="_blank">jsp</a> <span class="text-muted">香水浓</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>JSP初始化     容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了 JSP执行     这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。     当JSP网页完成初始化后</div> </li> <li><a href="/article/907.htm" title="在 Windows 上安装 SVN Subversion 服务端" target="_blank">在 Windows 上安装 SVN Subversion 服务端</a> <span class="text-muted">AdyZhang</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a> <div>在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号   最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx   现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使</div> </li> <li><a href="/article/1034.htm" title="android开发中如何使用 alertDialog从listView中删除数据?" target="_blank">android开发中如何使用 alertDialog从listView中删除数据?</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2  是选中的序号,但是我不知道如何继续处理下去 1 2 3 </div> </li> <li><a href="/article/1161.htm" title="jdk-6u26-linux-x64.bin 安装" target="_blank">jdk-6u26-linux-x64.bin 安装</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1.上传安装文件(jdk-6u26-linux-x64.bin) 2.修改权限 [root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin 3.执行安装文件 [root@localhost ~]# cd /usr/local [root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs</div> </li> <li><a href="/article/1288.htm" title="MongoDB经典面试题集锦" target="_blank">MongoDB经典面试题集锦</a> <span class="text-muted">BigBird2012</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库? NoSQL是非关系型数据库,NoSQL = Not Only SQL。 关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。 在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。 在考虑数据库的成熟</div> </li> <li><a href="/article/1415.htm" title="JavaScript异步编程Promise模式的6个特性" target="_blank">JavaScript异步编程Promise模式的6个特性</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Promise/1.htm">Promise</a> <div>        Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。         在我们开始正式介绍之前,我们想看看Javascript Promise的样子: var p = new Promise(function(r</div> </li> <li><a href="/article/1542.htm" title="[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager" target="_blank">[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>ClientWatchManager接口 //接口的唯一方法materialize用于确定那些Watcher需要被通知 //确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path public interface ClientWatchManager { /** * Return a set of watchers that should</div> </li> <li><a href="/article/1669.htm" title="【Scala十五】Scala核心九:隐式转换之二" target="_blank">【Scala十五】Scala核心九:隐式转换之二</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>隐式转换存在的必要性,   在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:   val button = new JButton button.addActionListener( new ActionListener { def actionPerformed(event: ActionEvent) { </div> </li> <li><a href="/article/1796.htm" title="Android JSON数据的解析与封装小Demo" target="_blank">Android JSON数据的解析与封装小Demo</a> <span class="text-muted">ronin47</span> <div>转自:http://www.open-open.com/lib/view/open1420529336406.html package com.example.jsondemo; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;    impor</div> </li> <li><a href="/article/1923.htm" title="[设计]字体创意设计方法谈" target="_blank">[设计]字体创意设计方法谈</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a> <div>  从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。 如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔</div> </li> <li><a href="/article/2050.htm" title="单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值" target="_blank">单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值</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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a> <div>import java.util.LinkedList; /* 单调队列 滑动窗口 单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减 题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1 问题的另一种描述就</div> </li> <li><a href="/article/2177.htm" title="struts2处理一个form多个submit" target="_blank">struts2处理一个form多个submit</a> <span class="text-muted">chiangfai</span> <a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a> <div>web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码: <s:form action="submit" method="post" namespace="/my"> <s:textfield name="msg" label="叙述:"></div> </li> <li><a href="/article/2304.htm" title="shell查找上个月,陷阱及野路子" target="_blank">shell查找上个月,陷阱及野路子</a> <span class="text-muted">chenchao051</span> <a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a> <div>date -d "-1 month" +%F     以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。     野路子解决:假设当天日期大于15号</div> </li> <li><a href="/article/2431.htm" title="mysql导出数据中文乱码问题" target="_blank">mysql导出数据中文乱码问题</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a><a class="tag" taget="_blank" href="/search/%E5%AF%BC%E6%95%B0%E6%8D%AE/1.htm">导数据</a> <div>解决mysql导入导出数据乱码问题方法: 1、进入mysql,通过如下命令查看数据库编码方式: mysql>  show variables like 'character_set_%'; +--------------------------+----------------------------------------+ | Variable_name&nbs</div> </li> <li><a href="/article/2558.htm" title="SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write" target="_blank">SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/smarty/1.htm">smarty</a><a class="tag" taget="_blank" href="/search/sae/1.htm">sae</a> <div>  对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。 官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213 解决方案为:   01 $path </div> </li> <li><a href="/article/2685.htm" title="《教父》系列台词" target="_blank">《教父》系列台词</a> <span class="text-muted">dcj3sjt126com</span> <div>Your love is also your weak point. 你的所爱同时也是你的弱点。   If anything in this life is certain, if history has taught us anything, it is that you can kill anyone.   不顾家的人永远不可能成为一个真正的男人。 &</div> </li> <li><a href="/article/2812.htm" title="mongodb安装与使用" target="_blank">mongodb安装与使用</a> <span class="text-muted">dyy_gusi</span> <a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a> <div>一.MongoDB安装和启动,widndows和linux基本相同 1.下载数据库,     linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz 2.解压文件,并且放置到合适的位置     tar -vxf mongodb-linux-x86_64-ubun</div> </li> <li><a href="/article/2939.htm" title="Git排除目录" target="_blank">Git排除目录</a> <span class="text-muted">geeksun</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。   有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。 1.  针对单一工程排除文件 这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一</div> </li> <li><a href="/article/3066.htm" title="Ubuntu 创建开机自启动脚本的方法" target="_blank">Ubuntu 创建开机自启动脚本的方法</a> <span class="text-muted">hongtoushizi</span> <a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a> <div>转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/ Ubuntu 创建开机自启动脚本的步骤如下: 1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。   2) 设置脚本文件的权限 $ sudo chmod 755</div> </li> <li><a href="/article/3193.htm" title="第八章 流量复制/AB测试/协程" target="_blank">第八章 流量复制/AB测试/协程</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/coroutine/1.htm">coroutine</a> <div>流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发</div> </li> <li><a href="/article/3320.htm" title="电商系统商品表设计" target="_blank">电商系统商品表设计</a> <span class="text-muted">lkl</span> <div>DROP TABLE IF EXISTS `category`; -- 类目表 /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `category` ( `id` int(11) NOT NUL</div> </li> <li><a href="/article/3447.htm" title="修改phpMyAdmin导入SQL文件的大小限制" target="_blank">修改phpMyAdmin导入SQL文件的大小限制</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 用phpMyAdmin导入mysql数据库时,我的10M的 数据库不能导入,提示mysql数据库最大只能导入2M。    phpMyAdmin数据库导入出错:   You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit. </div> </li> <li><a href="/article/3574.htm" title="Tomcat性能调优方案" target="_blank">Tomcat性能调优方案</a> <span class="text-muted">Sobfist</span> <a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a> <div>一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。 【适用场景】 任何项目。 二、Java虚拟机调优 应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。 J</div> </li> <li><a href="/article/3701.htm" title="SQLServer学习笔记" target="_blank">SQLServer学习笔记</a> <span class="text-muted">vipbooks</span> <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/xml/1.htm">xml</a> <div>1、create database school 创建数据库school 2、drop database school 删除数据库school 3、use school 连接到school数据库,使其成为当前数据库 4、create table class(classID int primary key identity not null) 创建一个名为class的表,其有一</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>