Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)

news2024/12/23 19:43:07

文章目录

    • 1,shell核心概念
      • 1. 1,变量
      • 1. 2. 引号
      • 1. 3. 循环
      • 1. 4. 条件判断
      • 1. 5. 函数
      • 1. 6. 重定向
      • 1. 7. 管道
      • 1. 8. 通配符
    • 2,案例

本文通过介绍Linux Shell编程中最重要的十个核心概念,帮助初学者快速入门。

1,shell核心概念

1. 1,变量

变量是存储数据值的标识符。在Shell脚本中,变量分为环境变量、位置变量和用户自定义变量。
示例:

# 定义变量
my_variable="Hello, World!"
# 使用变量
echo $my_variable 

在这里插入图片描述

1. 2. 引号

在Shell脚本中,引号用于定义字符串。单引号和双引号有不同的作用,单引号会忽略特殊字符,而双引号会保留特殊字符的原本含义。

示例:

# 单引号
echo 'Hello, $my_variable'
# 双引号
echo "Hello, $my_variable" 

在这里插入图片描述

1. 3. 循环

循环用于重复执行一系列命令。常见的循环有for循环、while循环和until循环。

示例(for循环):

for i in {1..5}; 
do 
  echo "Loop $i"
done 

在这里插入图片描述

1. 4. 条件判断

条件判断用于根据特定条件执行不同的操作。常见的条件判断有if语句、case语句等。

示例(if语句):

if [ $i -eq 1 ]; 
then  
echo "i is equal to 1."
fi

在这里插入图片描述

1. 5. 函数

函数是一段可重复使用的代码块,可以提高代码的模块化程度。

示例:

my_function() {
  echo "Hello, $1"
}
 
my_function "World"

在这里插入图片描述

1. 6. 重定向

重定向用于改变命令的输入输出方向,常见的重定向有标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)。

示例:

# 将输出重定向到文件
echo "Hello, World!" > output.txt 

在这里插入图片描述

1. 7. 管道

管道用于将一个命令的输出作为另一个命令的输入。

示例:

# 查找当前目录下包含“txt”的文件,并统计数量
ls | grep txt | wc -l 

在这里插入图片描述

1. 8. 通配符

通配符用于匹配文件名,常见的通配符有*(匹配任意字符)、?(匹配单个字符)等。

示例:

# 删除当前目录下所有.txt文件
rm *.txt
  1. Shell脚本执行权限
    为Shell脚本设置执行权限,使其能够独立运行。

示例:

# 为脚本添加执行权限
chmod +x my_script.sh
# 运行脚本./my_script.sh 
  1. 调试
    在编写Shell脚本时,调试是必不可少的环节。使用set命令可以开启调试模式。

示例:

# 开启调试模式
set -x
# 执行命令
ls 

2,案例

Linux一键批量启动、停止、重启Jar包Shell脚本

#!/bin/bash
#C机子启动停止5个vts微服务
#端口号,根据此端口号确定PID

export PORT1=8078
export PORT2=8079
export PORT3=8086
export PORT4=8088
export PORT5=8089
export PORT6=8091
export PORT7=8092
export PORT8=8093
export PORT9=8095
export PORT10=8099
#启动命令所在目录
export HOME='/home/project'
#jar包所在目录
export jt809_monitor8078=/home/project/jt809-monitor-0.0.1-SNAPSHOT.jar
export jt809_service8079=/home/project/jt809-service-0.0.1-SNAPSHOT.jar
export protocol_service8086=/home/project/protocol-service-1.0-SNAPSHOT.jar
export trans_service8088=/home/project/trans-service-1.0-SNAPSHOT.jar
export info_sys_service8089=/home/project/info-sys-service-1.0-SNAPSHOT.jar
export vts_consumer8091=/home/project/vts-consumer-0.0.1-SNAPSHOT.jar
export report_service8092=/home/project/report-service-1.0-SNAPSHOT.jar
export peripheral_data_protocol_service8093=/home/project/peripheral-data-protocol-service-1.0-SNAPSHOT.jar
export peripheral_data_business_service8095=/home/project/peripheral-data-business-service-1.0-SNAPSHOT.jar
export jt808_service8099=/home/project/jt808-service-1.0-SNAPSHOT.jar
#查询出监听了PORT端口TCP协议的程序
pid1=`ps -ef|grep $jt809_monitor8078|grep -v grep|awk '{print $2}' `
pid2=`ps -ef|grep $jt809_service8079|grep -v grep|awk '{print $2}' `
pid3=`ps -ef|grep $protocol_service8086|grep -v grep|awk '{print $2}' `
pid4=`ps -ef|grep $trans_service8088|grep -v grep|awk '{print $2}' `
pid5=`ps -ef|grep $info_sys_service8089|grep -v grep|awk '{print $2}' `
pid6=`ps -ef|grep $vts_consumer8091|grep -v grep|awk '{print $2}' `
pid7=`ps -ef|grep $report_service8092|grep -v grep|awk '{print $2}' `
pid8=`ps -ef|grep $peripheral_data_protocol_service8093|grep -v grep|awk '{print $2}' `
pid9=`ps -ef|grep $peripheral_data_business_service8095|grep -v grep|awk '{print $2}' `
pid10=`ps -ef|grep $jt808_service8099|grep -v grep|awk '{print $2}' `
start(){
    if [ -n "$pid5" ]; then
       echo "info_sys_service8089 already start,pid:$pid5"
       return 0
    fi
    #进入命令所在目录
    cd $HOME
    nohup java -Dspring.datasource.workId=13 -Dspring.datasource.dataCenterId=13 -Dhsf.server.ip=192.168.1.93 -Dhsf.server.port=12299 -Dpandora.location=/home/tools/taobao-hsf.sar-2019-06-stable.jar -Dlog4j2.formatMsgNoLookups=true -Dhsf.http.port=12232 -Dpandora.qos.port=12233 -Djmenv.tbsite.net=127.0.0.1 -jar $HOME/info-sys-service-1.0-SNAPSHOT.jar --server.port=8089 > /dev/null 2>&1 &
	#启动服务 日志输出
    echo "info_sys_service8089 start at port:$PORT5"
    if [ -n "$pid6" ]; then
        echo "vts_consumer8091 already start,pid:$pid6"
        return 0
    fi
    #进入命令所在目录
    cd $HOME
    nohup java -Dhsf.server.ip=192.168.1.93 -Dhsf.server.port=12205 -Dlog4j2.formatMsgNoLookups=true -Dpandora.location=/home/tools/taobao-hsf.sar-2019-06-stable.jar -jar $HOME/vts-consumer-0.0.1-SNAPSHOT.jar --server.port=8091 > /dev/null 2>&1 &
    #启动聊天服务器 把日志输出到HOME目录的server.log文件中
    echo "vts_consumer8091 start at port:$PORT6"
}
stop(){
    if [ -z "$pid5" ]; then
       echo "not find info_sys_service8089 on port:$PORT5"
       return 0
    fi
    #结束程序,使用讯号2,如果不行可以尝试讯号9强制结束
    kill -9 $pid5
    rm -rf $pid5
    echo "kill info_sys_service8089 use signal 2,pid:$pid5"
    if [ -z "$pid6" ]; then
            echo "not find vts_consumer8091 on port:$PORT6"
            return 0
    fi
    #结束程序,使用讯号2,如果不行可以尝试讯号9强制结束
    kill -9 $pid6
    rm -rf $pid6
    echo "kill vts_consumer8091 use signal 2,pid:$pid6"
}
status(){
    if [ -z "$pid5" ]; then
       echo "not find info_sys_service8089 on port:$PORT5"
    else
       echo "info_sys_service8089 is running,pid:$pid5"
    fi

    if [ -z "$pid6" ]; then
            echo "not find vts_consumer8091 on port:$PORT6"
    else
            echo "vts_consumer8091 is running,pid:$pid6"
    fi
}

case $1 in
    start)
       start
    ;;
    stop)
  ;;
    restart)
       $0 stop
       sleep 2
       $0 start
     ;;
    status)
       status
    ;;
    *)
       echo "Usage: {start|stop|status}"
        exit 0
esac
fileformat=unix

本文针对Linux初学者,详细介绍了Shell编程的十个核心概念,并通过具体示例帮助读者理解和掌握这些概念。希望本文能为Linux初学者在学习Shell编程的道路上提供有益的指导。

在这里插入图片描述


人生从来没有真正的绝境。只要一个人的心中还怀着一粒信念的种子,那么总有一天,他就能走出困境,让生命重新开花结果。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

事业单位2024最新资料大全(均已更新)

为了帮助广大考生更加高效、精准地备考,我们特别推出了2024事业单位考试最新资料大全,这份资料已全面更新,确保与最新考试大纲和趋势同步,是你备考路上的得力助手! 文章目录 一、资料亮点二、为何选择我们?…

Sqlserver 连接 chche 数据库详细步骤

zihao 第一步,安装ODBC驱动 在windows资源管理器里粘贴以下地址,会进入到驱动文件夹 ftp://ftp.intersystems.com/pub/cache/odbc/2018/ 第二步,添加ODBC 安装后,可能需要重启。然后打开控制面板,搜素ODBC&#xf…

波动方程(将麦克斯韦方程组求出只有E或H的表达式)

都在无源线性介质下求解波动方程,且复数形式的波动方程有两种解法,我们用4方法求解复数形式波动方程 电场强度E满足的波动方程: 先写出线性介质的麦克斯韦方程组 2、根据麦克斯韦方程组,获得只有E的表达式 3、再根据场的复数表示…

国外电商系统开发-需求记录

一、客户需求 1、商城后台需要添加产品、添加一级代理商; 2、一级代理商可以添加二级代理商,二级代理商需要添加店铺; 3、店铺需要购买产品(进货)、店铺也可以推广给用户(用户在用户APP里最近店铺下单、购买产品); 4、需要对接当地…

简单的微信小程序个人 个人详情页

一、示例 1.个人页面 2.个人详情页面 二、示例代码 1.wxml页面 <!--pages/user/user.wxml--> <view class"mine-wrapper"><view class"avatar-wrapper"><view><view class"avatar"><image style"borde…

沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞

漏洞描述 沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞&#xff0c;攻击者可以获取服务器权限 漏洞复现 body"后台管理系统演示版" POC GET /data/Ajax.aspx?methodlog_list&page1&limit20&fkey1&fdate12024-10-0100%3A00%3A00&fdate2…

算法课习题汇总(3)

循环日程表 设有N个选手进行循环比赛&#xff0c;其中N2M&#xff0c;要求每名选手要与其他N−1名选手都赛一次&#xff0c;每名选手每天比赛一次&#xff0c;循环赛共进行N−1天&#xff0c;要求每天没有选手轮空。 例如4个人进行比赛&#xff1a; 思路&#xff1a; 把表格…

数据结构-4.1.特殊矩阵的压缩存储

一.一维数组的存储结构&#xff1a; 1.知道一维数组的起始地址&#xff0c;就可以求出任意下标对应的元素所在的地址&#xff1b; 2.注&#xff1a;如果数组下标从1开始&#xff0c;上述公式的i就要改为i-1&#xff1b; 3.数组里的元素类型相同&#xff0c;因此所占空间也相同…

九、设备的分配与回收

1.设备分配时应考虑的因素 ①设备的固有属性 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。 独占设备 一个时段只能分配给一个进程(如打印机) 共享设备 可同时分配给多个进程使用(如磁盘)&#xff0c;各进程往往是宏观上同时共享使用设备而微观上交替使用。 …

【Orange Pi 5嵌入式应用编程】-用户空间UART通信

用户空间UART通信 文章目录 用户空间UART通信1、理解UART通信1.1 什么是UART通信?1.2 UART如何工作?1.3 UART传输步骤1.4 UART的优缺点2、嵌入式Linux中的UART3、Orange Pi 5中UART完整示例3.1 UART操作函数定义3.2 UART定义函数实现1、理解UART通信 UART是Universal Asynch…

松山湖全球首秀:传祺华为概念车发布

9月24日晚&#xff0c;传祺与华为联合举办的创「新」计划成果分享会暨全新概念车品鉴会&#xff0c;在华为东莞松山湖基地圆满落幕。 作为本次活动的焦点&#xff0c;传祺与华为双方联手打造的首款概念车「1 Concept」&#xff0c;也在会场正式登场亮相&#xff0c;这也标志着传…

动态分配内存

目录 前言 一.malloc,free函数 1.malloc,free函数原型 2.使用方法 3.具体实例 4.注意事项 二.calloc函数 1.calloc函数原型 2.主要特点 3.使用案例 三.realloc函数 1.realloc函数原型 2.使用案例 3.注意事项 前言 动态内存是指在程序运行时&#xff0c;按需分配和…

Java网络通信—TCP

1.客户端 2.服务端

OpenGL ES 纹理(7)

OpenGL ES 纹理(7) 简述 通过前面几章的学习&#xff0c;我们已经可以绘制渲染我们想要的逻辑图形了&#xff0c;但是如果我们想要渲染一张本地图片&#xff0c;这就需要纹理了。 纹理其实是一个可以用于采样的数据集&#xff0c;比较典型的就是图片了&#xff0c;我们知道我…

【ios】---swift开发从入门到放弃

swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目&#xff08;可以先使用这个&…

AKShare-股票数据-相关股票

AKShare-股票数据-相关股票 数据科学实战 数据科学实战 2024年10月01日 13:53 作者寄语 本次更新股票数据-相关股票接口。主要修复该接口&#xff0c;目前通过该接口可以获取 时间&#xff0c;股票代码&#xff0c;相关股票代码&#xff0c;涨跌幅 等字段的数据。 欢迎加入专…

Java之方法的使用

修饰符 返回值 方法名称&#xff08;形式参数&#xff09;{ } 当无参数的时候形式参数中什么都不写。 列如求两个数相加 修饰符可有可无。 方法重载&#xff1a; 1.方法名相同 2.参数列表不同 3。返回值不影响重载

STL--string类

我们从这篇文章之后就正式开始学习STL的string&#xff0c;字面看起来是不是像C语言里面的字符串之类的处理方法&#xff0c;是的&#xff0c;C里面也是对字符串的一些处理函数&#xff0c;但是C有很多这样的函数&#xff0c;给大家推荐一个网站 &#xff0c;这个网站是C的官网…

Python | Leetcode Python题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n len(nums)for num in nums:x (num - 1) % nnums[x] nret [i 1 for i, num in enumerate(nums) if num < n]return ret

Verilog基础:$display系统函数和C语言中的库函数printf的区别

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的$display系统函数和C语言中的库函数printf都是用于输出信息&#xff0c;但它们的用法存在一定差别&#xff0c;本文将简要描述。 $display系统函数的B…