script
10km
这个作者很懒,什么都没留下…
展开
-
velocity:允许赋值语句赋值null:#set( $var = ...)
因为不能赋值null,在循环语句中,变量的值就还是停留在上一个不为null的值,就会导致生成的内容混乱。所以我在实际应用中需要允许。经过仔细跟踪代码,发现可以通过设置参数配置模板引擎(VelocityEngine)允许null赋值。默认是不允许对变量设置为null的。velocity的模板中赋值语句。也可以将配置参数封装为以。原创 2024-06-11 16:02:04 · 383 阅读 · 0 评论 -
BeanShell:多线程环境下Interpreter解释器的优化使用
是用 Java 编写的一个小型、免费、可嵌入的 Java 代码的脚本解释器。BeanShell动态执行标准Java语法,并使用通用语法对其进行扩展 脚本编写便利性,适用于 Java 的轻量级脚本。本文说明在并发环境下对BeanShell更加优化的使用方式。原创 2023-07-02 18:56:19 · 647 阅读 · 0 评论 -
BeanShell:检查变量是否为null的正确方式
是一个小型、免费、可嵌入的 Java 源代码 具有对象脚本语言功能的解释器,用 Java 编写。BeanShell动态执行标准Java语法,并使用通用语法对其进行扩展 脚本编写便利性,适用于 Java 的轻量级脚本。在Java中判断一个变量是否为null很简单的事儿null == v1BeanShell是一个支持Java语法的的脚本解释器,按道理null == v1也是支持的,我一直是这么理解的, 大量测试也没问题。但是今天在写单元测试时,因为手误,在解释器执行脚本时没有为变量v1定义值。原创 2023-06-23 00:23:10 · 831 阅读 · 0 评论 -
linux:sed修改xml中的值示例
利用sed指定搜索范围的正则表达式匹配(类似 /1,5s/hello/world/1) 实现对XML文档中指定字段的修改基本的思路就是要在指定范围内进行搜索替换。首先确定搜索范围:通过在xml中查找server的起始标记和结束标记来确定搜索起始行号和结束行号然后在搜索范围内进行正则表达式匹配替换原创 2021-12-17 11:24:41 · 3161 阅读 · 7 评论 -
linux shell:bash 正则表达式判断操作符 =~ 的问题
本文描述了在开发一个shell脚本的小项目时,通过在macOS,windows/MSYS,ubuntu,CentOS 下测试发现bash 4.3.48以前的版本在处理正则表达判断操作符=~时存在一个bug,并说明了避开这个bug的方法原创 2021-12-05 00:03:09 · 2978 阅读 · 0 评论 -
macOS:sed -i报错:sed: 1: “xxxxx“: extra characters at the end of p command
在stackoverflow上找到这个帖子《sed command with -i option (in-place editing) works fine on Ubuntu but not Mac》[^1],总算知道了原因:macOS属于类unix,与linux还是有差异的,这个问题就是macOS与linux之间差异造成的。简言之,就是BSD/macOS 的sed和linux(GNU)下的sed 对于`-i`参数的处理有微小的差异。`-i` 即inplace,即对文件原地修改,`-i` 后面可以原创 2021-12-04 15:47:30 · 3309 阅读 · 1 评论 -
linux shell:提取正则表达式捕获组(catch group)匹配的字符串
目前大部分shell(如bash)都提供了正则表达式判断操作符`=~`,如下就可以对一个字符符判断是否匹配正则表达式:```bash$ [[ "hello world" =~ wor(ld)? ]] && echo matchmatched```其实基于上面的表达式不仅可以判断是否匹配正则表达,还可以通过上面表达式创建的变量 `BASH_REGEX`(数组)提取捕获组(catch group)原创 2021-12-03 17:47:15 · 6367 阅读 · 0 评论 -
linux shell:字符串分割并反序输出
我想将一个以.分割的字符串(`com.sun.java`)反序输出为(`java.sun.com`),在这里《Reverse order of dot-delimited elements in a string》找到不少办法,挑了两个简单的通用性好的而且我能看得懂的。原创 2021-12-02 18:25:04 · 1600 阅读 · 0 评论 -
linux shell:find命令批量删除文件或文件夹
linux的find命令功能很强大,本文列举在用find删除文件的示例原创 2021-12-01 13:31:42 · 12167 阅读 · 3 评论 -
linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串
最近的工作有一个需求,需要利用linux shell脚本将_或-作连字符的变量名字符串转为驼峰命名法(camel-case)的字符串,其实吧,'_'做连字符的命名方式有专门的名字,蛇形命名法(snake-case).'-'做连字符的命名方式也有专门的名字,脊柱命名法(spinal-case),也有叫kebab-case(kebab-烤肉串,也挺形象的).关于这些命名方式的由来本文未尾的参考资料1 2 3都有详细说明,我也是这次为了解决这个问题查资料才知道这些名词,以前孤陋寡闻了。通过搜索引擎找到stack原创 2021-11-29 18:11:05 · 2181 阅读 · 0 评论 -
bash shell参数展开(Shell Parameter Expansion):替换变量(variable)中的字符串
shell脚本中如果要替换变量中的字符串,首先想到的就是用sed命令,比如下面的示例将变量str中的数字123替换成UUU:$ str=hello,word,123$ echo $str | sed -E -e 's/[0-9]+/UUUU/g'hello,word,UUUU上面的例子中用到echo,sed两个命令来实现字符串替换,略显麻烦其实bash提供了更简单的语法来实现上面的功能...原创 2021-11-09 10:07:45 · 657 阅读 · 1 评论 -
linux bash shell:最方便的字符串大小写转换(lowercase/uppercase conversion)
关于字符串大小写转换,是写 linux 脚本经常干的事儿,所以总想找个方便的方法让我少打点字儿,搜索国内的中文资源,网上也能找到很多关于这个帖子,介绍的方法都差不多,用typeset是最简单的方法了,但我觉得还是不够简单,因为需要多定义一个变量。google上找到这个stackoverflow上的帖子,才知道Bash 4.0以上版本有更好的办法:《How to convert a strin...原创 2018-10-25 18:24:08 · 14798 阅读 · 1 评论 -
mysql:避免命令行使用password的安全警告:Warning: Using a password on the command line interface can be insecure.
在命令行执行mysql的命令mysql -uroot -p${password} < file.sql,会导致下面的警告:Warning: Using a password on the command line interface can be insecure.意思就是在命令行使用密码明文不安全。但有的时候,我就是需要在命令行这样执行sql脚本啊,显示这个警告看着很不舒服,怎么不...原创 2019-07-22 16:42:30 · 33405 阅读 · 3 评论 -
linux:dialog表单提交示例
dialog是个linux命令行的ui显示工具,可以在命令行显示,以下是在命令显示表单的示例:#!/bin/bash# 表单各字段的默认值shell="bash"groups="1"user="hello"home="/home/hello"# Store data to $VALUES variableVALUES=$(dialog --ok-label "Submit" \...原创 2019-07-30 11:04:26 · 810 阅读 · 1 评论 -
MSYS2:windows下获取ip地址对应的网卡名
基本的原理就是用netsh interface ipv4 show address命令列出所有网卡的地址信息,然后用sed过滤掉无用的内容,具体实现如下:$ netsh interface ipv4 show address |\ sed -E -e '/(DHCP enabled|Subnet Prefix|InterfaceMetric|Default Gateway|Gateway M...原创 2019-07-20 16:11:18 · 1139 阅读 · 1 评论 -
MSYS2:获取本机的ip地址
MSYS2虽然是个linux shell环境,但如果要获取网卡的信息,还是需要windows平台提供的命令参照这篇文章 《bat脚本 - 获取局域网内的本机IP》可以实现在MSYS2环境下获取本机IP,示例如下$ route print -4 |grep -E '0.0.0.0\s+0.0.0.0' | awk '{print $4}'...原创 2019-07-20 11:46:54 · 442 阅读 · 1 评论 -
maven:linux shell获取项目版本号(project.version)的方法
今天写linux shell脚本时需要获取maven项目的版本号,也就是pom.xml中的${project.version}。在Stack OverFlow上找到这个帖子:《How to get Maven project version to the bash command line》大神们提供了好几种方法。摘要如下,经实测都可用,挑一个自己喜欢的就好。mvn org.apach...原创 2019-07-18 14:02:08 · 3433 阅读 · 1 评论 -
linux/shell:读取包含‘.‘键名的.properties文件
如果properties中的key名只是由字母数字组成,那读取properties中的property很简单,示例如下:假设.properties中内容为:prop1.propertiesusername=tom读取prop1.properties中的username. prop1.propertiesecho $username但是如果key的名字包含了.(比如redis.po...原创 2019-06-24 16:01:59 · 5091 阅读 · 1 评论 -
node.js:npm列出安装包的所有版本
npm安装指定的包,很简单如下指定安装包名就可以了。#npm install ${安装包名}# 安装thrift库npm install thrift 如果不指定版本号,则会安装最新版本。如果要安装指定的版本,则后面要指定版本号#npm install ${安装包名}@${version}# 指定安装thrift的0.9.1版本npm install thrift@0.9.1...原创 2019-04-17 10:02:23 · 3762 阅读 · 1 评论 -
linux/bash:用数组模拟栈(FILO)的封装
linux shell中是没有队列这个类型的,如果需要用到队列模型,就需要自己实现,以下是用数组模拟一个栈(FILO)的操作#!/bin/bash# 向栈中添加一个元素# $1 栈变量名# $2 添加到栈中的元素function stack_push(){ # 定义array 为间接引用变量 declare -n array=$1 array=(${array[@]} "$2")...原创 2019-08-04 12:09:38 · 345 阅读 · 1 评论 -
linux/bash:map作为参数传递给function
在linux bash中map是作为数组处理的,不能作为参数直接传递函数,如果一定要传递给函数,要做一些变通处理,示例如下:#!/bin/bashfunction test_map(){ # 获取map变量的声明字符串 # 在本例中为:declare -A user='([name]="tom" [age]="15" [sex]="male" )' local var=$(dec...原创 2019-07-31 16:51:00 · 2109 阅读 · 4 评论 -
axis2:用ant脚本生成webservice client 端的java/c代码
Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security原创 2016-08-05 10:05:10 · 1988 阅读 · 3 评论 -
linux:根据主进程查找子进程
如下是我的项目中创建的一个java系统服务在通过systemctl status显示的服务状态$ systemctl status facelog● facelog.service - facelog service Loaded: loaded (/etc/systemd/system/facelog.service; enabled; vendor preset: enabled)...原创 2019-09-07 18:20:45 · 3581 阅读 · 1 评论 -
msys2:shell下获取node版本号:
最近在写shell脚本时需要获取node的版本号,代码很简单node --version | sed 's/^v//',在linux(ubuntu)下执行都没有任何问题但是在windows下的git-bash(基于msys2)执行时,报错了:stdout is not a tty 是什么鬼,我只知道大概的意思就是标准输出不是当前的控制台(tty),导致shell 管道操作|不能获取node...原创 2019-09-03 10:01:13 · 1172 阅读 · 0 评论 -
shell:获取git当前分支或tag
shell下如何获取git的当前所在分支名或tag呢?为了解决这个小问题,我之前是走了弯路的,之前我简单的想法就是解析git branch输出的内容从中获取 分支或tag名。如下代码,# 返回$1指定的git项目的当前分支(branch)或标签名(tag)# $1 git项目源码位置function current_branch(){ git -C $1 branch | gre...原创 2019-09-01 11:14:07 · 5718 阅读 · 1 评论 -
linux shll:sudo的相关使用
判断当前用户是否有sudo权限判断当前是否有sudo权限可以用sudo -v返回0为sudo user,否则不是。使用示例:if sudo -v &>/dev/null;then echo $(whoami) is sudo user; else echo $(whoami) is not sudo user; fi判断sudo用户密码是否正确想要判断su...原创 2019-08-10 13:55:23 · 327 阅读 · 1 评论 -
wget:重定向响应输出到stdout
wget 访问一个url默认是把主机的响应内容保存到文件比如:$ wget http://www.baidu.com--2019-08-14 12:49:08-- http://www.baidu.com/正在解析主机 www.baidu.com (www.baidu.com)... 163.177.151.110, 163.177.151.109正在连接 www.baidu.co...原创 2019-08-14 13:02:53 · 3795 阅读 · 0 评论 -
linux/shell:列出所有ip地址及对应的物理网卡
基本的思路就是用route命令列出所有的网卡名,然后再用ifconfig配合字符串匹配找出对应的ip地址,示例如下:#!/bin/bashfunction ips(){ local nics=$(route -n | grep ^0.0.0.0 | awk '{print $8}') for nic in $nics do local ip=$(ifconfig $nic |...原创 2019-08-02 09:39:09 · 5566 阅读 · 1 评论 -
linux shell 获取java版本号
获取java版本号$ java -version 2>&1 | sed '1!d' | sed -e 's/"//g' | awk '{print $3}'1.8.0_222获取java类型(openjdk)及版本号$ java -version 2>&1 | sed '1!d' | sed -e 's/"//g' -e 's/version//'openj...原创 2019-08-05 11:50:37 · 4610 阅读 · 1 评论 -
linux shell: 命令运行符号(control operator) terminated ‘&‘的意义塈了解control operator指南
好久以前就看到一些脚本中执行一个命令用’&'结尾,类似如下:#!/bin/bashlcd_test &当时搞明白了意思,但现在又忘记了,赶紧补习一下在此做个记录:根据stackoverflow上这个帖子《What does “&” at the end of a linux command mean?》的回答(如下图红框标),命令以’&'结尾就是让命令以后...原创 2018-10-19 10:13:16 · 866 阅读 · 1 评论 -
git:自动升级源码中版本号,并提交,tag,push的脚本实现
最近在ubuntu下开发一个嵌入式系统下的项目,离开java平台下maven自动管理版本号升级,非常不习惯,升级一个版本要改代码,还要提交,还要打标签,好麻烦。 考虑到后续项目版本管理的重要性,我也希望我的c代码中能像在maven下开发java程序能自动将项目的版本号升级。于是自己写了一个脚本,完成对项目版本号的自动升级,提交。 实现原理也不复杂,主要就是利用正则表达式从源码中读取固定格...原创 2018-08-24 12:52:44 · 4731 阅读 · 1 评论 -
cmake error: includes target which requires target that is not in the export set,解决静态库的PRIVATE依赖导出问题
问题描述最近在使用 interface libraries时出了个小问题。 示例如下,我希望target not_exported只是作为fse_cas_static 的private类的依赖库内部使用,不希望在config file中导出对它的依赖。# 创建静态库add_library(fse_cas_static STATIC ${_SOURCE_FILES})# 创建inter...原创 2018-04-29 14:18:12 · 4596 阅读 · 1 评论 -
eclipse中执行Ant脚本:Class not found: javac1.8
最近把eclipse也升级到neon,java也同步升级到1.8,在eclipse中执行很久之前写的ant脚本(build.xml)时报错了: Class not found: javac1.8在命令行中执行ant脚本是正常的,因为我的电脑中安装了java1.6,1.7,1.8,但默认的版本是1.6,我知道我的ant脚本中指定了生成目标版本(target)是1.6。在网上查了资料后,搞清楚了原原创 2017-05-28 10:58:36 · 2815 阅读 · 1 评论 -
linux bash shell 判断目录是否为空的函数
linux shell中判断目录是否为空#!/bin/sh##方法一 判断输出字符数统计为0is_empty_dir(){ return `ls -A $1|wc -w`}##方法二 判断输出string为空#is_empty_dir(){ #return $[ -z `ls -A $1` ]#}if is_empty_dir $1then echo " $1 is emp原创 2015-12-29 15:55:43 · 13214 阅读 · 9 评论 -
bash shell脚本安装tcmalloc,linunwind,libstdc++ so库
因为项目中使用了tcmalloc,而是用gcc 5.2.0编译的64位代码,所以项目中的so依赖libunwind,tcmalloc,以及gcc5.2.0的libstdc++.so [roo@t2]ldd /usr/local/face/lib/libcmjnidrv.so linux-vdso.so.1 => (0x00007fffa4bff000) libcmimp原创 2016-01-02 10:42:45 · 1185 阅读 · 1 评论 -
cmake:在Makefile中运行ant脚本
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,在Java开发环境中应用非常广泛。 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake,在c/c++跨平台开发中应用非常广泛 。 有的时候,我们原创 2016-07-05 17:21:44 · 1588 阅读 · 1 评论 -
gsoap:启用http compression(gzip)进行数据压缩传输
什么是http compress?HTTP compression即网页压缩,简单说就是web服务器和浏览器客户端传送数据时,将网页数据/客户端响应数据在发送给对方前先进行压缩再传输的一种方式。 使用网页压缩可以减少数据传输大小,减少数据在网上络上传递的时间消耗,提高web服务器和客户端之间的响应速度,改善客户体验。 HTTP compression是由web服务器和浏览器之间共同遵守的协议,也原创 2016-09-06 16:27:37 · 3048 阅读 · 2 评论 -
velocity:在eclipse和ultraedit中增加对vm脚本语法的高亮显示支持
以前一直是用urltraedit来写velocity的脚本,因为没有语法高亮显示这一最基本的功能,工作起来挺费劲,效率很低。最近又要写velocity脚本,实在不能忍了,去velocity的官网仔细研究了一下,原来虽然velocity没有提供velocity的专用编译器,但是贡献者为velocity提供了在各种编译器上的语法高亮等扩展支持。 参见《Velocity and Development原创 2016-08-26 16:58:50 · 3539 阅读 · 1 评论 -
windows:icacls命令行修改文件使用默认继承的ACL及ant脚本实现
windows下修改文件或文件夹的权限是使用icacls命令,关于使用icals的详细说明参见icacls的命令行帮助。 如果你只是简单的想让文件继承来自文件夹默认ACL,就很方便 ,执行下面的命令就可以了 icacls filename /reset下图是icals中命令行说明,红框标注就是上面命令的解释 使用ant 脚本命令replaceregexp修改文件内容的时候会有个毛病: 修原创 2016-08-04 11:43:01 · 4651 阅读 · 1 评论 -
bash shell:脚本中修改profile文件更新LD_LIBRARY_PATH的示例
当我们的一个项目完成,需要在linux下安装,就要写安装脚本,有时还需要修改profile文件修改环境变量。这时就要用到sed编辑器。sed编辑器被称作流编辑器(stream editor),跟普通交互式文件编辑器相反。在交互式编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 于是我们可以利用sed原创 2016-07-19 11:08:44 · 10580 阅读 · 1 评论