原文:https://www.toutiao.com/i6964632560504816164/

获取命令行入参

#!/bin/sh
echo "Usage: run-dev.sh \$moduleName \$port"
echo 'e.g: run-dev.sh huskar-web 7001'moduleName=$1
port=$2

while 循环

while [ -h "\$PRG" ] ; dols=`ls -ld "\$PRG"`link=`expr "\$ls" : '.*-> \\(.*\\)\$'`done

if 分支控制

if expr "\$link" : '/.*' > /dev/null; thenPRG="\$link"
elsePRG=`dirname "\$PRG"`"/\$link"
fi

kill 进程

kill java server.port=PORT进程

ps -ef | grep java | grep "server.port=$port" | awk '{print $2}' | xargs kill -9

定义函数

run() {...
}

执行函数

run

替换文件中的字符串

find -P $bootstrapShellPath | xargs perl -pi -e 's|\$profile|dev|g'

执行一个脚本

exec bootstrap.sh

完整脚本:

#!/bin/sh
echo "Usage: run-dev.sh \$moduleName \$port"
echo 'e.g: run-dev.sh huskar-web 7001'
moduleName=$1
port=$2
#1.kill java server.port=PORT进程
ps -ef | grep java | grep "server.port=$port" | awk '{print $2}' | xargs kill -9
echo "Start Run $moduleName ..."
#Set env profile,PORT
run() {echo "Set env profile,PORT of ./output/$moduleName/bootstrap.sh"bootstrapShellPath="./output/$moduleName/bootstrap.sh"#set --spring.profiles.active=$profile --server.port=$PORTecho $bootstrapShellPathfind -P $bootstrapShellPath | xargs perl -pi -e 's|\$profile|dev|g'find -P $bootstrapShellPath | xargs perl -pi -e 's|\$PORT|'${port}'|g'cat $bootstrapShellPath#4.execute bootstrap.shbootstrapShellDir="./output/$moduleName"#cd bootstrap.sh dircd $bootstrapShellDirexec bootstrap.sh
}
# main function
run
#!/usr/bin/env sh##############################################################################
##
##  start up script for UN*X
##
##############################################################################
# set -o nounset
# set -e -x# Attempt to set APP_HOME
# Resolve links: \$0 may be a link
PRG="\$0"
# Need this for relative symlinks.
while [ -h "\$PRG" ] ; dols=`ls -ld "\$PRG"`link=`expr "\$ls" : '.*-> \\(.*\\)\$'`if expr "\$link" : '/.*' > /dev/null; thenPRG="\$link"elsePRG=`dirname "\$PRG"`"/\$link"fi
done
cd "`dirname \"\$PRG\"`/${appHomeRelativePath}" >/dev/null
APP_HOME="`pwd -P`"APP_BASE_NAME=`basename "\$0"`# deal with jJVM_OPTS and START_OPS
if [ ! -d "logs" ] ; thenmkdir logs
fi
if [ ! -d "tmp" ] ; thenmkdir tmp
fiDT=`date +"%Y%m%d_%H%M%S"`# STANDARD_JVM_OPTS="-Xloggc:\$APP_HOME/logs/gc_\$DT.log"
# STANDARD_JVM_OPTS="\$STANDARD_JVM_OPTS -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationConcurrentTime"
# STANDARD_JVM_OPTS="\$STANDARD_JVM_OPTS -XX:+PrintHeapAtGC -XX:+PrintAdaptiveSizePolicy"
# STANDARD_JVM_OPTS="\$STANDARD_JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\$APP_HOME/tmp/heapdump_\$DT.hprof"
# STANDARD_JVM_OPTS="\$STANDARD_JVM_OPTS -XX:-OmitStackTraceInFastThrow"
# STANDARD_JVM_OPTS="\$STANDARD_JVM_OPTS -XX:SoftRefLRUPolicyMSPerMB=0"
# STANDARD_JVM_OPTS="\$STANDARD_JVM_OPTS -XX:-ReduceInitialCardMarks"STANDARD_START_OPTS="-Djava.io.tmpdir=\$APP_HOME/tmp/"
STANDARD_START_OPTS="\$STANDARD_START_OPTS -Duser.dir=\$APP_HOME"
STANDARD_START_OPTS="\$STANDARD_START_OPTS -Djava.net.preferIPv4Stack=true"warn () {echo "\$*"
}die () {echoecho "\$*"echoexit 1
}CLASSPATH=huskar-web-1.0.0.jarjava  -server -Xms4096m -Xmx4096m -Xmn614m -XX:SurvivorRatio=15 -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:CMSInitiatingPermOccupancyFraction=70 -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDetails -Xloggc:/opt/log/gc.log -XX:+PrintGCTimeStamps -jar huskar-web-1.0.0.jar ${main_class} --spring.profiles.active=dev --server.port=7001

Shell脚本解释器

Shell脚本通常不是复杂的程序,并且它是按行解释的。脚本第一行通常会以类似于 #!/bin/bash 开始,这段脚本用于通知 Shell 使用系统上的 Bourne Shell 解释器。为什么说“类似于”呢?因为,实际上我们不仅可以使用 bash 解释器,还可以使用其他一些解释器,甚至是以命令开头,后面紧跟其参数。例如:

#!/usr/bin/awk
#!/bin/sed

Shell命令的通配符

  星号“ * ”可以匹配文件名中的任何字符串。例如我们给出文件名模式 file*,它的意思是文件名以 file 开头,后面可以跟随任何字符串,包括空字符串。

$ ls file*
file    file1   file2   file3   file_test

  注意:在通配符里,一个星号“ * ”可以代表0个或多个任意字符。

  问号“ ? ”可以匹配任何单个字符。例如我们给出文件名模式 file?,它的意思是文件名以 file 开头,以任意1个字符结尾的文件:

$ ls file?
file1   file2   file3

  注意:一个问号“ ? ”要匹配1个任意字符。

  方括号“ [ ] ”可以匹配任意单个指定的字符。下面的例子将列出文件名以 file 开头,以任意1个数字结尾的文件:

$ ls file[0-9]
file1  file2  file3

  方括号“ [! ] ”可以匹配任意除指定的字符之外的单个字符。下面的例子中将列出文件名以 file 开头,不以数字结尾的文件:

$ ls file*[!0-9]
file_test

Linux Shell 极简教程:一个例子相关推荐

  1. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  2. 【编程实践】Linux / UNIX Shell编程极简教程

    不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向"对象" 的方式引入大量的实例介绍 Shell 日常操作,"对象&qu ...

  3. 写一个操作系统有多难?自制 os 极简教程

    不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...

  4. Linux Shell脚本入门教程系列之(二)第一个shell脚本

    本文是Linux Shell脚本系列教程的第(二)篇,更多shell教程请看:Linux Shell脚本系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们 ...

  5. 自制 os 极简教程 3 :终于把90%的人劝退了!

    在上一篇<自制 os 极简教程 2:史上最难的 hello world>中,我们已经完成了最基本的环境搭建并实现了从零自制操作系统的 hello world 程序,下面我急速过一遍主要步骤 ...

  6. 负载分析及问题排查极简教程

    作者 | Hollis ,来自 | Hollis 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线上出现问题时 ...

  7. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  8. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  9. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

  10. Linux Shell脚本入门教程系列之(十四) Shell Select教程

    本文是Linux Shell脚本系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句 ...

最新文章

  1. 用AI为美国政府“助纣为虐”,微软员工怒了
  2. linux 下共享库创建及使用
  3. 用于大数据开发的Centos7操作系统安装过程中遇到的问题总结
  4. 腾讯朱华:数据中心下一个风向的探索
  5. 适配器和绑定 没找到_亚马逊如何收款?附亚马逊收款绑定流程
  6. Sql Server 部署SSIS包完成远程数据传输
  7. linux openoffice centos,centos8 openoffice安装
  8. 钱老,外国人能搞的,今天中国人也能搞了!
  9. 图解Kafka中的基本概念
  10. Magento教程 7:客制化网站
  11. pytorch学习笔记(三十一):门控循环单元(GRU)
  12. 印度为何能频频诞生顶尖的程序员?
  13. v97fp5后, load问题诊断方法增强.
  14. Docker破解AWVS和Nessus
  15. 京东数科发布《京东区块链技术实践白皮书2020》(附白皮书下载链接)
  16. windows下安装apache
  17. ios mfi手柄_适用于iPhone或iPad的最佳MFi游戏手柄
  18. 深圳大学软工专硕数二英二改为数一英一,计算机专硕改为英一
  19. PHP连接MSSQL配置和PHP代码演示
  20. 介绍Namada:链间资产不可知(Asset-agnostic)隐私

热门文章

  1. CTF Blind pwn题型学习笔记
  2. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 6月29日
  3. 三国时代微博(佩服博主琢磨先生太有才了!)
  4. js文件 格式_robots文件只能放在网站根目录吗?
  5. gin endless 热重启
  6. java编程获取屏幕分辨率_Java及Jquery获取屏幕分辨率的实现代码
  7. 最全互联网Linux工作规划!
  8. 从维密天使到编程大拿,她的彪悍人生不需要解释!
  9. word里边页眉下面的下划线怎么去掉
  10. php阿里支付回调逻辑,php 银联支付回调