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

文章目录

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

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

1,shell核心概念

1. 1,变量

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

示例:

powershell 复制代码
# 定义变量
my_variable="Hello, World!"
# 使用变量
echo $my_variable 

1. 2. 引号

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

示例:

powershell 复制代码
# 单引号
echo 'Hello, $my_variable'
# 双引号
echo "Hello, $my_variable" 

1. 3. 循环

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

示例(for循环):

powershell 复制代码
for i in {1..5}; 
do 
  echo "Loop $i"
done 

1. 4. 条件判断

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

示例(if语句):

powershell 复制代码
if [ $i -eq 1 ]; 
then  
echo "i is equal to 1."
fi

1. 5. 函数

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

示例:

powershell 复制代码
my_function() {
  echo "Hello, $1"
}
 
my_function "World"

1. 6. 重定向

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

示例:

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

1. 7. 管道

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

示例:

powershell 复制代码
# 查找当前目录下包含"txt"的文件,并统计数量
ls | grep txt | wc -l 

1. 8. 通配符

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

示例:

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

示例:

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

示例:

powershell 复制代码
# 开启调试模式
set -x
# 执行命令
ls 

2,案例

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

powershell 复制代码
#!/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编程的道路上提供有益的指导。


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


相关推荐
chlk12310 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
阿巴斯甜10 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
舒一笑11 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
Kapaseker11 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
改一下配置文件11 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
xq952712 小时前
Andorid Google 登录接入文档
android
黄林晴13 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
深紫色的三北六号21 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读