需求:再服务器上启动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
的扩展,支持更...