Linux平台Shell脚本编写
创始人
2024-09-25 01:25:50
0

1、shell简介

备注:以下文档内所编写的所有 shell 脚本,小编都会将脚本存放在百度网盘中,并做不定期的脚本更新,可长期提供给大家直接下载使用,脚本备份详见博文:Shell脚本备份-CSDN博客

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁,Shell 既是一种命令语言,又是一种程序设计语言;

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

# shell脚本格式

#!/bin/bash     ······     #for循环语句     for         do         执行内容     done     #if语句     if 条件         then         指令     else         指令     fi

2、shell脚本编写

2.1.获取当前目录脚本

# 编写获取当前目录脚本:getDir.sh,并赋予脚本可执行权限

sudo vim getDir.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x getDir.sh ls #执行脚本并验证 sudo sh getDir.sh sudo pwd

获取当前目录脚本内容如下所示:

#!/bin/bash  work_dir=$(cd $(dirname $0); pwd) echo '当前工作目录:' $work_dir

2.2.文件中插入内容脚本

# 编写在当前目录下dockerConf文件夹下生成deamon.json文件的脚本:insertContent.sh,并赋予脚本可执行权限

sudo vim insertContent.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x insertContent.sh ls #执行脚本并验证 sudo sh insertContent.sh ls dockerConf

脚本内容如下所示:

#!/bin/bash  mkdir dockerConf tee ./dockerConf/daemon.json <<-'EOF' {   "registry-mirrors": ["https://rsk59qvc.mirror.aliyuncs.com/"],      "insecure-registries":      ["http://harbor.example.com",      "www.ss.skcom"     ],    "data-root": "/data/app/" } EOF

2.3.输入内容处理脚本

# 编写在当前目录下创建input文件夹的脚本:input.sh,并赋予脚本可执行权限

sudo vim input.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x input.sh ls #执行脚本并验证 sudo sh input.sh ls

脚本内容如下所示:

备注:此脚本支持tab键补全命令,支持回退(删除)输入的内容。

#!/bin/bash  #使用readline实现Tab补充,定义一个Tab补充的函数 _readline_tab_complete() {     # 检查是否按下了Tab键     if [[ $KEY = $'\t' ]]; then         # 使用readline的tab补充功能         bash_completion         return $?     fi     # 如果没有按Tab,正常处理     read -r -k 1 KEY }  #启用Tab补充功能 stty -ixon trap '_readline_tab_complete' INT  read -ep '请输入要创建的文件夹名称:' input_dir mkdir $input_dir  #恢复终端设置 stty sane trap - INT

2.4.停止服务脚本

# 编写在服务器上停止指定名称服务脚本:stopService*.sh,并赋予脚本可执行权限

sudo vim stopService-x86_64_v1.1.0.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x stopService-x86_64_v1.1.0.sh ls ps -ef |grep java ps -ef |grep apiprocess #执行脚本并验证 sudo sh stopService-x86_64_v1.1.0.sh ps -ef |grep java ps -ef |grep apiprocess

脚本内容如下所示:

备注:仅需要更改 javaprocess=(服务启动程序) 和 cprocess=(服务部署路径) 即可。

#!/bin/bash  javaprocess=service-starter-app   #指定运行java程序jar包名称 cprocess=apiservice   #指定服务部署路径  #查询并关闭java进程 javapid=$(ps -ef |grep -v 'grep'|grep $javaprocess|awk '{print $2}') for pid in $javapid do kill -9 $pid echo "kill $pid" echo "停止转换服务成功!" done  #查询并关闭底层进程 cpid=$(ps -ef |grep -v 'grep'|grep $cprocess|awk '{print $2}') for pid in $cpid do kill -9 $pid echo "kill $pid" echo "服务底层进程停止成功!" done

2.5.文件压缩/解压处理

2.5.1.大文件拆分压缩

# 编写Linux平台将package/apiservice-24.0726.1929.tar.gz大文件压缩为50M的多个小压缩包并包压缩文件指定存放目录的脚本:splitCompressflie.sh,并赋予脚本可执行权限

sudo vim splitCompressflie.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x splitCompressflie.sh ls #执行脚本并验证 sudo du -sh package/* sudo sh splitCompressflie.sh

脚本内容如下所示:

备注:此脚本支持tab键补全命令,支持回退(删除)输入的内容。

#!/bin/bash  #使用readline实现Tab补充,定义一个Tab补充的函数 _readline_tab_complete() {     # 检查是否按下了Tab键     if [[ $KEY = $'\t' ]]; then         # 使用readline的tab补充功能         bash_completion         return $?     fi     # 如果没有按Tab,正常处理     read -r -k 1 KEY }  #启用Tab补充功能 stty -ixon trap '_readline_tab_complete' INT  ntime=$(date +"%Y%m%d%H%M%S") read -ep '请输入要压缩的文件(格式为:tar,gz,zip):' filename read -ep '请输入解压后文件存放目录:' dir mkdir -p ./$ntime/$dir read -ep '请输入重新压缩文件存放目录:' npakedir mkdir -p ./$ntime/$npakedir read -ep '请输入重新压缩的文件名称:' nfilename read -ep '请输入拆分后每个文件大小(eg:10M):' filesize read -ep '请输入拆分后文件名称:' cfilename work_dir=$(cd $(dirname $0); pwd)  #恢复终端设置 stty sane trap - INT  #提取原始文件 echo "将 $filename 解压至:${ntime}/${dir} 目录下" if [[ ${filename} =~ \.tar\.gz$ ]]; then   tar -xzf ${filename} -C ${ntime}/${dir} elif [[ ${filename} =~ \.zip$ ]]; then   unzip ${filename} -d ${ntime}/${dir} else   echo "不支持的文件格式!!!"   exit 1 fi echo " $filename 解压文件完成!"  #将提取的文件合并为一个文件 echo "将 $ntime/$dir 目录下的文件合并为一个新的文件 $nfilename.tar.gz" tar -zcf $ntime/$npakedir/$nfilename.tar.gz -C $ntime/$dir/* . echo "$nfilename.tar.gz 合并成功新文件存放在:$ntime/$npakedir/ 目录下!" echo "将 $filename 解压至${ntime}/${dir}目录下的文件删除 " rm -rf $ntime/$dir/*  #使用split命令拆分文件 echo "按照 $filesize 大小将 $nfilename.tar.gz  拆分为:$cfilename " split -b $filesize $ntime/$npakedir/$nfilename.tar.gz $ntime/$dir/$cfilename  #压缩拆分后的文件 echo "将拆分后的文件按照 $cfilename*.gz 压缩压缩文件存放目录:$ntime/$dir/" for file in $ntime/$dir/$cfilename*; do   gzip "$file" done echo "拆分并压缩完成,文件位于:$work_dir/$ntime/$dir/$cfilename*.gz "

2.5.2.小压缩包合并

# 编写Linux平台将apiserver-24.0726.2129*.gz多个小压缩包,合并为一个新的压缩文件并可以解压使用的脚本:mergeCompressfile.sh,并赋予脚本可执行权限

sudo vim mergeCompressfile.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x mergeCompressfile.sh ls #执行脚本并验证 sudo sh mergeCompressfile.sh

脚本内容如下所示:

备注:此脚本支持tab键补全命令,支持回退(删除)输入的内容。

#!/bin/bash  #使用readline实现Tab补充,定义一个Tab补充的函数 _readline_tab_complete() {     # 检查是否按下了Tab键     if [[ $KEY = $'\t' ]]; then         # 使用readline的tab补充功能         bash_completion         return $?     fi     # 如果没有按Tab,正常处理     read -r -k 1 KEY }  #启用Tab补充功能 stty -ixon trap '_readline_tab_complete' INT  read -ep '请输入要合并的压缩文件路径:' indir read -ep '请输入要合并后压缩文件名称:' nfilename mkdir -p $nfilename work_dir=$(cd $(dirname $0); pwd)  #恢复终端设置 stty sane trap - INT  #多个压缩包文件合并 echo "将 $indir 目录下拆分后的压缩包合并为一个新的压缩文件 $nfilename.tar.gz" cat $indir/*.gz > $nfilename.tar.gz echo "$nfilename.tar.gz 文件合并完成!!!"  #解压合并后的压缩文件 echo "先使用gunzip命令将 $nfilename.tar.gz 解压在 $nfilename 目录下" gunzip -c $nfilename.tar.gz > $nfilename/$nfilename.tar echo "$nfilename.tar.gz 文件解压完成!!!" echo "删除 $nfilename.tar.gz 文件" rm -rf $nfilename.tar.gz  echo "最后使用tar命令将 $nfilename.tar 解压在 $nfilename 目录下" tar -xzf $nfilename/$nfilename.tar -C $nfilename echo "$nfilename.tar 文件解压完成!!!" echo "删除 $nfilename.tar 文件"  rm -rf $nfilename/$nfilename.tar echo "$nfilename.tar 文件删除完成,最终解压文件路径为:$work_dir/$nfilename"

2.6.docker镜像压缩/解压处理

2.6.1.docker镜像拆分压缩

# 编写Linux平台将package/plss-web-x86-20240520-487-NM.tar.gz大文件拆分为20M的多个小压缩包并包压缩文件指定存放目录的脚本:splitCompressDockertar.sh,并赋予脚本可执行权限

sudo vim splitCompressDockertar.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x splitCompressDockertar.sh ls #执行脚本并验证 sudo du -sh package/* sudo sh splitCompressDockertar.sh

脚本内容如下所示:

备注:此脚本支持tab键补全命令,支持回退(删除)输入的内容。

#!/bin/bash  #使用readline实现Tab补充,定义一个Tab补充的函数 _readline_tab_complete() {     # 检查是否按下了Tab键     if [[ $KEY = $'\t' ]]; then         # 使用readline的tab补充功能         bash_completion         return $?     fi     # 如果没有按Tab,正常处理     read -r -k 1 KEY }  #启用Tab补充功能 stty -ixon trap '_readline_tab_complete' INT  ntime=$(date +"%Y%m%d%H%M%S") read -ep '请输入需要拆分的镜像文件:' filename read -ep '请输入拆分后镜像存放目录:' dir read -ep '请输入拆分后镜像文件名称:' cfilename read -ep '请输入拆分后单个镜像文件大小(eg:10M):' filesize mkdir -p ./$ntime/$dir work_dir=$(cd $(dirname $0); pwd)  #恢复终端设置 stty sane trap - INT  #使用split命令拆分镜像文件 echo "按照 $filesize 大小将 $filename 拆分为:$cfilename 命名的多个镜像文件" split -b $filesize $filename $ntime/$dir/$cfilename  #压缩拆分后的文件 echo "将拆分后的文件按照 $cfilename*.gz 压缩压缩文件存放目录:$ntime/$dir/" for file in $ntime/$dir/$cfilename*; do   gzip "$file" done echo "拆分并完成压缩,镜像文件位于:$work_dir/$ntime/$dir/$cfilename*.gz "

2.6.2.docker镜像合并压缩

# 编写Linux平台将plss-web-x86-24.0730.1716*.gz多个小镜像包,合并为一个新的镜像文件并可以load镜像使用的脚本:mergeCompressDockertar.sh,并赋予脚本可执行权限

sudo vim mergeCompressDockertar.sh #脚本内容编写完成后赋可执行权限 sudo chmod +x mergeCompressDockertar.sh ls #执行脚本并验证 sudo sh mergeCompressDockertar.sh

脚本内容如下所示:

备注:此脚本支持tab键补全命令,支持回退(删除)输入的内容。

#!/bin/bash  #使用readline实现Tab补充,定义一个Tab补充的函数 _readline_tab_complete() {     # 检查是否按下了Tab键     if [[ $KEY = $'\t' ]]; then         # 使用readline的tab补充功能         bash_completion         return $?     fi     # 如果没有按Tab,正常处理     read -r -k 1 KEY }  #启用Tab补充功能 stty -ixon trap '_readline_tab_complete' INT  read -ep '请输入要合并的压缩文件路径:' indir read -ep '请输入要合并后压缩文件名称:' nfilename mkdir -p $nfilename work_dir=$(cd $(dirname $0); pwd)  #恢复终端设置 stty sane trap - INT  #多个压缩包文件合并 echo "将 $indir 的多个压缩包合并为一个新的压缩文件 $nfilename.tar.gz" cat $indir/*.gz > $nfilename.tar.gz echo "$nfilename.tar.gz 文件合并完成!!!"  #解压合并后的压缩文件 echo "使用gunzip命令将 $nfilename.tar.gz 解压处理为docker镜像包放在 $nfilename 目录下" gunzip -c $nfilename.tar.gz > $nfilename/$nfilename.tar.gz echo "$nfilename.tar.gz 镜像文件合并完成!!!" echo "删除 $nfilename.tar.gz 文件" rm -rf $nfilename.tar.gz echo "合并后 docker 镜像文件路径为:$work_dir/$nfilename"

相关内容

热门资讯

安卓系统相册有杂志,杂志生成功... 你有没有发现,你的安卓手机相册里竟然藏着一个小秘密——它就像一本杂志,各式各样的照片都能在这里找到它...
什么安卓系统最人性,人性化设计... 你有没有想过,手机里的安卓系统就像是一个贴心的管家,有时候它懂你的需求,有时候又让你觉得有点儿小麻烦...
查看安卓系统宏定义,宏定义背后... 你有没有想过,安卓系统里那些神秘的宏定义究竟是什么鬼?别急,今天我就带你一探究竟,揭开这些宏定义的神...
安卓更新系统菜单,安卓系统更新... 亲爱的手机控们,你们有没有发现,最近你的安卓手机是不是偷偷地变聪明了?没错,就是那个我们每天不离手的...
安卓系统不能显示图标,安卓系统... 最近是不是发现你的安卓手机图标突然消失不见啦?别急,别慌,今天就来给你详细解析一下这个让人头疼的问题...
鸿蒙安卓系统官网,构建未来智能... 你有没有听说最近鸿蒙安卓系统官网大变身啦?没错,就是那个让无数科技爱好者翘首以盼的鸿蒙系统,现在终于...
荣耀新系统是安卓,基于安卓的全... 你知道吗?最近手机界可是炸开了锅,荣耀新系统横空出世,竟然是安卓的!没错,就是那个我们熟悉的安卓!今...
安卓怎么进鸿蒙系统,体验全新智... 你有没有想过,你的安卓手机也能变成一个酷炫的鸿蒙系统使用者呢?没错,就是那个华为家的超级操作系统!今...
安卓系统查询记录吗,揭秘隐私与... 你有没有想过,你的安卓手机里那些查询记录到底是怎么一回事呢?是不是觉得它们神秘兮兮的,好像在默默记录...
安卓优先更新系统,系统更新新篇... 你知道吗?最近安卓系统又来了一次大更新,这可是让无数安卓用户兴奋不已的事情呢!这次更新,谷歌可是下足...
安卓系统网页上传照片,安卓系统... 你有没有遇到过这种情况:手机里存了好多美美的照片,想上传到网页上和大家分享,却发现安卓系统的网页上传...
网络电视禁用安卓系统,探索新型... 最近有个大新闻在网络上闹得沸沸扬扬,那就是网络电视开始禁用安卓系统了!这可真是让人大跌眼镜,毕竟安卓...
苹果变安卓系统插件,揭秘跨平台... 你知道吗?最近在科技圈里可是掀起了一股热潮呢!那就是苹果手机变安卓系统插件的大揭秘!是不是听起来就有...
安卓平板系统更新取消,用户选择... 你知道吗?最近安卓平板系统更新取消的消息在数码圈里可是炸开了锅!这可不只是一个小小的变动,它背后可是...
安卓系统有哪些部分,深入解析其... 你有没有想过,那个陪伴你每天刷手机、玩游戏、办公的安卓系统,其实是由好几个部分组成的呢?今天,就让我...
怎么释放安卓系统空间,高效清理... 手机里的安卓系统空间越来越不够用了,是不是你也和我一样,看着那些堆积如山的照片、视频和应用程序,心里...
安卓怎么用os系统,利用And... 你有没有想过,你的安卓手机其实可以变身成一个功能强大的操作系统呢?没错,就是那个我们平时在电脑上使用...
观致安卓系统停用,技术升级背后... 你知道吗?最近有个大新闻在汽车界炸开了锅,那就是观致汽车宣布停用安卓系统。这可不是一个小事情,毕竟安...
安卓系统 屏幕自动点击,屏幕自... 你有没有遇到过这种情况?手机屏幕突然自己就点开了,是不是感觉像有个小精灵在和你开玩笑呢?别担心,这可...
安卓怎么变成iphone系统,... 你是不是也和我一样,对安卓手机和iPhone系统之间的转换充满了好奇呢?想象你的安卓手机突然变成了一...