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编程的道路上提供有益的指导。


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


相关推荐
叫我龙翔29 分钟前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
小诸葛的博客30 分钟前
Ubuntu如何如何安装tcpdump
linux·ubuntu·tcpdump
S hh1 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
小雨cc5566ru1 小时前
uniapp+Android面向网络学习的时间管理工具软件 微信小程序
android·微信小程序·uni-app
bianshaopeng2 小时前
android 原生加载pdf
android·pdf
康熙38bdc2 小时前
Linux 进程优先级
linux·运维·服务器
只是有点小怂3 小时前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
三枪一个麻辣烫3 小时前
linux基础命令
linux·运维·服务器
火红的小辣椒4 小时前
XSS基础
android·web安全