
script
文章平均质量分 50
10km
这个作者很懒,什么都没留下…
展开
-
Bash环境定制git分支提示符暨JDK版本切换脚本
Git分支集成:通过修改PS1变量实现动态分支显示,依赖Git的脚本支持。JDK版本管理:利用环境变量JAVA_HOME和PATH控制Java版本,exec bash确保配置生效。原创 2025-03-18 15:14:41 · 435 阅读 · 0 评论 -
velocity:允许赋值语句赋值null:#set( $var = ...)
因为不能赋值null,在循环语句中,变量的值就还是停留在上一个不为null的值,就会导致生成的内容混乱。所以我在实际应用中需要允许。经过仔细跟踪代码,发现可以通过设置参数配置模板引擎(VelocityEngine)允许null赋值。默认是不允许对变量设置为null的。velocity的模板中赋值语句。也可以将配置参数封装为以。原创 2024-06-11 16:02:04 · 493 阅读 · 0 评论 -
BeanShell:多线程环境下Interpreter解释器的优化使用
是用 Java 编写的一个小型、免费、可嵌入的 Java 代码的脚本解释器。BeanShell动态执行标准Java语法,并使用通用语法对其进行扩展 脚本编写便利性,适用于 Java 的轻量级脚本。本文说明在并发环境下对BeanShell更加优化的使用方式。原创 2023-07-02 18:56:19 · 759 阅读 · 0 评论 -
BeanShell:检查变量是否为null的正确方式
是一个小型、免费、可嵌入的 Java 源代码 具有对象脚本语言功能的解释器,用 Java 编写。BeanShell动态执行标准Java语法,并使用通用语法对其进行扩展 脚本编写便利性,适用于 Java 的轻量级脚本。在Java中判断一个变量是否为null很简单的事儿null == v1BeanShell是一个支持Java语法的的脚本解释器,按道理null == v1也是支持的,我一直是这么理解的, 大量测试也没问题。但是今天在写单元测试时,因为手误,在解释器执行脚本时没有为变量v1定义值。原创 2023-06-23 00:23:10 · 1048 阅读 · 0 评论 -
linux:sed修改xml中的值示例
利用sed指定搜索范围的正则表达式匹配(类似 /1,5s/hello/world/1) 实现对XML文档中指定字段的修改基本的思路就是要在指定范围内进行搜索替换。首先确定搜索范围:通过在xml中查找server的起始标记和结束标记来确定搜索起始行号和结束行号然后在搜索范围内进行正则表达式匹配替换原创 2021-12-17 11:24:41 · 3548 阅读 · 7 评论 -
linux shell:bash 正则表达式判断操作符 =~ 的问题
本文描述了在开发一个shell脚本的小项目时,通过在macOS,windows/MSYS,ubuntu,CentOS 下测试发现bash 4.3.48以前的版本在处理正则表达判断操作符=~时存在一个bug,并说明了避开这个bug的方法原创 2021-12-05 00:03:09 · 3333 阅读 · 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 · 3683 阅读 · 1 评论 -
linux shell:提取正则表达式捕获组(catch group)匹配的字符串
目前大部分shell(如bash)都提供了正则表达式判断操作符`=~`,如下就可以对一个字符符判断是否匹配正则表达式:```bash$ [[ "hello world" =~ wor(ld)? ]] && echo matchmatched```其实基于上面的表达式不仅可以判断是否匹配正则表达,还可以通过上面表达式创建的变量 `BASH_REGEX`(数组)提取捕获组(catch group)原创 2021-12-03 17:47:15 · 6846 阅读 · 0 评论 -
linux shell:字符串分割并反序输出
我想将一个以.分割的字符串(`com.sun.java`)反序输出为(`java.sun.com`),在这里《Reverse order of dot-delimited elements in a string》找到不少办法,挑了两个简单的通用性好的而且我能看得懂的。原创 2021-12-02 18:25:04 · 1671 阅读 · 0 评论 -
linux shell:find命令批量删除文件或文件夹
linux的find命令功能很强大,本文列举在用find删除文件的示例原创 2021-12-01 13:31:42 · 13735 阅读 · 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 · 2319 阅读 · 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 · 745 阅读 · 1 评论 -
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 · 3668 阅读 · 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 · 1247 阅读 · 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 · 5895 阅读 · 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 · 4048 阅读 · 0 评论 -
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 · 389 阅读 · 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 · 4763 阅读 · 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 · 369 阅读 · 1 评论 -
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 · 5779 阅读 · 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 · 2238 阅读 · 4 评论 -
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 · 869 阅读 · 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 · 34852 阅读 · 3 评论 -
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 · 1238 阅读 · 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 · 511 阅读 · 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 · 3636 阅读 · 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 · 5270 阅读 · 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 · 3939 阅读 · 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 · 15205 阅读 · 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 · 951 阅读 · 1 评论 -
git:自动升级源码中版本号,并提交,tag,push的脚本实现
最近在ubuntu下开发一个嵌入式系统下的项目,离开java平台下maven自动管理版本号升级,非常不习惯,升级一个版本要改代码,还要提交,还要打标签,好麻烦。 考虑到后续项目版本管理的重要性,我也希望我的c代码中能像在maven下开发java程序能自动将项目的版本号升级。于是自己写了一个脚本,完成对项目版本号的自动升级,提交。 实现原理也不复杂,主要就是利用正则表达式从源码中读取固定格...原创 2018-08-24 12:52:44 · 4921 阅读 · 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 · 5023 阅读 · 1 评论 -
bat脚本根据mingw版本判断是否可编译32/64位程序
MinGW编译器是否可以编译32/64位程序,取决于MinGW的版本。 一般我们下载的mingw-w64版本名是类似下面这样的名字:i686-5.2.0-posix-dwarf-rt_v4-rev1x86_64-5.2.0-posix-seh-rt_v4-rev1x86_64-5.2.0-posix-sjlj-rt_v4-rev1开始的i686,x86_64好理解,代表适用的处理...原创 2018-04-21 23:41:25 · 2275 阅读 · 1 评论 -
msvc:BAT脚本判断是否设置MSVC编译的环境变量(执行vcvarsall.bat)
关于设置MSVC环境变量的方式参见我之前写一篇博客:《msvc交叉编译:使用vcvarsall.bat设置命令行编译环境》。 如果你在CMD中反复执行vcvarsall.bat会导致环境变量存储空间溢出而出错。 所以写BAT脚本如果不判断是否设置了MSVC环境变量,而每次编译的时候都执行vcvarsall.bat,在同一个CMD下执行几次就会出错了,只能关闭当前的CMD,再重开一个。 这...原创 2018-04-18 23:33:44 · 2857 阅读 · 1 评论 -
maven:sql-maven-plugin插件执行sql脚本
sql-maven-plugin插件提供了sql脚本的执行功能,允许用户执行指定的sql脚本文件或语句。最近在进行一个项目是基于maven管理的java开发项目,其中有一个环节要对数据库初始化创建表,需要在maven中执行,正好有机会学习了sql-maven-plugin的使用. 关于sql-maven-plugin的详细说明参见http://www.mojohaus.org/sql-maven原创 2017-08-16 23:21:55 · 4662 阅读 · 1 评论 -
maven:调用ant执行build.xml的两种方式
sql2java是通过ant脚本组织项目来实现java代码生成的,所以要使用sql2java就必须使用ant来执行build.xml脚本。如果自己项目是用maven来组织管理的,那么要使用sql2java来生成代码就涉及到maven执行ant脚本的问题。 maven提供了执行ant脚本的功能,这里就用到了maven插件maven-antrun-plugin。sql2java/pom.xml原创 2017-08-14 14:58:00 · 6385 阅读 · 1 评论 -
Windows下MSYS2中编译OpenBLAS过程记录
OpenBLAS(https://github.com/xianyi/OpenBLAS)目前已经提供了CMakeLists.txt,在Windows下可以通过cmake生成Makefile脚本,然后用MinGW或GCC编译。 但是,CMakeLists.txt中已经有警告申明,cmake支持还在实验中,并不会生成与OpenBLAS自带的Makefiles相同的内容,而且只支持32位编译,而且目前版原创 2017-07-08 12:51:07 · 3823 阅读 · 1 评论 -
powershell: 判断PSObject中是否有指定property的靠谱方法
如何判断一个PSObject中是否定义指定名称的属性,下面的代码中举出了三个方法$test=New-Object PSObject -Property @{ compiler=$null }#方法一(不完全靠谱) $test.compiler -ne $null#方法二(Get-Member -inputobject $test -name "compiler" ) -原创 2017-06-29 10:47:15 · 1634 阅读 · 0 评论 -
powershell:脚本中检查mingw-w64编译器是否能生成 32/64位代码
mingw提供的编译器不同的版本生成代码的能力是不一样的,有的只能生成32位代码 有的只能生成64位代码,在powershell脚本中,为了自动化执行编译,就需要事先检查指定编译的生成代码的能力。 基本的原理就是让指定-m32或-m64选项让编译器编译一个.c文件,如果不报错,就说明它能生成32或64位代码。poershell代码实现实现如下:# 上一条命令执行出错则中止脚本执行function原创 2017-06-21 14:59:03 · 1153 阅读 · 1 评论 -
powershell:调用7z,haozip解压缩文件
因为windows内置了zip格式文件的解压缩,但对于更多的压缩格式,所以powershell中可以直接调用powershell的函数就能实现zip解压缩,利用powershell内置功能实现zip解压缩的代码如下:# 调用powershell内置功能解压缩 $package 指定的 zip 文件到 $targetFolder# 如果 $targetFolder为空则默认解压到 $package所原创 2017-06-18 18:02:45 · 4950 阅读 · 1 评论