需求:再服务器上启动Springboot项目上,使用Shell脚本作为启动脚本去执行,然后调用jar包。在本项目,需要从配置文件application.properties中去获取端口号,然后根据端口号去获取进程的PID。

问题:第一,如果获取配置文件中的端口号;第二,把端口号获取到赋予变量时,查询PID时grep的参数是变量,结果查询不出?

解决措施:

针对第一个问题:

在Shell脚本中,使用$(linux命令)或`Linux命令`去把命令查询结果赋予变量

server_port=$(cat ./application.properties | grep "xxl.job.executor.port" | tail -n 1 | cut -d "=" -f 2 | awk '{print $1}')
# cat ./application.properties 读取和当前脚本同目录下application.properties文件
# grep "xxl.job.executor.port"    查询"xxl.job.executro.port"属性所在行内容
# tail -n 1           显示当前数据第一行
# cut -d "=" -f 2     以=为分隔符,截取第二项
# awk '{print $1}'    输出当前数据第一项
# server_port=$(xxx)       把$()中所输出的数据赋予变量server_port 

针对第二个问题,使用以下命令根据端口号去获取PID值

netstat -nlp | grep $server_port | awk '{print $7}' | awk -F"/" '{ print $1 }'

却发现如果把变量$server_port换成固定端口号(如直接在shell脚本中使用server_port=9992)是可以查询出PID,但是动态从配置文件中获取却没有值?这是为什么呢?

原因:配置文件application.properties是windows下编辑的文件内容,在Linux中它的回车/换行符是不一样的,所以从配置文件中获取的数据赋予server_port变量,虽然使用echo $server_port输出都是9992(假设配置文件中设置为9992),但它实际上还带了一个\r换行符。

可以使用命令显示出不可见字符的Shell脚本内容,发现变量$server_port的值为"9992\r"

bash -x xxx.sh

解决办法:在第一个问题的解决方案(即从配置文件中获取端口号)的命令中加一条命令用于去除\r

server_port=$(cat ./application.properties | grep "xxl.job.executor.port" | tail -n 1 | cut -d "=" -f 2 | awk '{print $1}' | tr -d '\r')
001_文件和目录的权限_setuid_chown_chgrp_umask_符号链接.pdf 002_使用find和xargs.pdf 003_后台执行 命令 _crontab_at.pdf 004_文件名置换_匹配文件名 的字符.pdf 005_echo_read_cat_管道_tee_标准输入输出和错误_重定向标准输入输出和错误_exec.pdf 006_ 命令 执行顺序.pdf 007_文本过滤_正则表达式.pdf 008_ grep 家族.pdf 009_awk介绍.pdf 010_sed用法介绍.pdf 011_合并与分割_sort_join_uniq_cut_paste_split.pdf 012_tr的用法.pdf 013_登录环境.pdf 014_环境和 shell 变量 .pdf 015_引号.pdf 016_基础 shell 编程_ shell 脚本 介绍.pdf 017_条件测试_test_expr.pdf 018_控制流结构_if_for_while_case_util_break_continue.pdf 019_ Shell 函数.pdf 020_向 脚本 传递 参数 _shift_getops.pdf 021_创建屏幕输出_tput.pdf 022_创建屏幕输入.pdf 023_测试 脚本 .pdf 024_ shell 嵌入 命令 .pdf 025_快速创建文件_自动菜单_ftp传输_连接至其他应用系统.pdf 026_创建以日期命名的文件和临时文件_信号_trap 命令 以及如何捕获信号_eval 命令 _logger 命令 .pdf 027_ 脚本 例子_pingall_backup_gen_del.lines_acces_deny_logroll_nfsdown.pdf 028_rcN.d_运行级别 脚本 编辑.pdf 029_cgi 脚本 .pdf 030_附录_常用 Shell 命令 .pdf 知乎视频​www.zhihu.com知识概述X shell 5 安装教程:https://blog.csdn.net/MYCSDN6666/article/details/80017056 这里转载其他人的。基础知识部分: 变量 知识概念 脚本 执行方法系统正则知识进阶知识部分 脚本 算法知识 脚本 信息比较判断语句if case循环语句for while until高级知识部分 脚本 函数概念 脚本 数组概念 Shell 脚... Shell 输入输出Read 用来读取输入,并赋值给 变量 echo ,printf可以简单输出 变量 。> file 将输出重定向到另一个文件>> 表示追加等价于tee -a< file 输入重定向| 表示管道,也就是前一个 命令 的输出传入下一个 命令 的输入 文件描述符输入文件—标准输入0输出文件—标准输出1 错误输出文件—标准错误2 使用 2>&1 >/tmp/... 这八个建议,来源于键者几年来编写 shell 脚本 的一些经验和教训。事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条。毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生常谈了。1指定bash shell 脚本 的第一行,#!之后应该是什么?如果拿这个问题去问别人,不同的人的回答可能各不相同。我见过/usr/bin/env bash,也见过/bin/bash,还... shell 脚本 的通信为减少程序的耦合,即便是 shell 脚本 ,我也尽量分成多个文件;再说我对 shell 脚本 比较陌生,分文件处理多个功能也更好 debug。当然,这就需要两个 脚本 之间的通信:两种方式,Environmental Variables 和 Shell Arguments,一般我不会去碰 Environmental Variables,因为许多程序的配置依赖于它们,也在 shell ... 文章目录1. 通配符(globbing)2. grep 2.1 linux 系统支持的三种形式的 grep 命令 3. 正则表达式3.1 扩展正则表达式4. IP的正则4.1 ip地址的类别4.2 ip地址的正则5. shell 的特殊字符6. 练习 正则表达式和 grep 、vim、awk、sed等的关系: 正则表达式是一种方法,相当于一种工艺, grep 命令 相当于是一个具体的加工机器,机器在加工产品的时候,... 功能说明:查找文件里符合条件的字符串。 语  法: grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...] 补充说明: grep 指令... root 1960 1948 7 14:25 ? 00:00:02 node /usr/local/bin/gitbook serve --lrport 24002 --port 4002 可以查到相应的进程 test2.sh文件(用 变量 作... linux 系统 grep 命令 是基本的文本处理工具之一。下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了 linux 系统 grep 命令 参数 及用法详解的相关知识,希望对大家有帮助! linux 系统 grep 命令 参数 及用法详解: 参数 说明1. -a num,--after-context=num除了列出符合行之外,并且列出后num行。ex: $ grep -a 1 panda file(从fi... grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的 grep 家族包括 grep 、e grep 和f grep 。e grep 和f grep 命令 只跟 grep 有很小不同。e grep grep 的扩展,支持更...