【Linux】编写并运行Shell脚本程序操作实例

关于Shell脚本的介绍
Shell脚本是一种用于自动化任务和简化常见操作的脚本语言,通常用于Linux和Unix环境中。Shell脚本允许用户通过编写一系列命令和逻辑语句来执行一系列任务,从而提高了工作效率和自动化水平。

以下是关于Shell脚本的详细介绍

  • 1.基础概念:Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

  • 2.执行方式:Shell脚本有两种执行命令的方式,一种是交互式,即解释执行用户的命令,用户输入一条命令,Shell就解释执行一条;另一种是批处理,即用户事先写一个Shell脚本,其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。

  • 3.脚本编写:Shell脚本的编写类似于其他编程语言,可以使用文本编辑器(如vim、nano等)进行编写。在Shell脚本中,可以使用变量、条件语句、循环语句等来实现复杂的逻辑操作。同时,Shell脚本也支持函数定义和模块化编程,提高了代码的可重用性和可维护性。

  • 4.脚本特点:Shell脚本具有以下几个特点:

1.自动化:通过编写Shell脚本,可以将一系列复杂的任务自动化执行,提高了工作效率。
2.可移植性:Shell脚本在不同的Linux和Unix环境中具有很好的可移植性,只需稍作修改即可在不同系统中运行。
3.灵活性:Shell脚本支持丰富的控制结构和语法,可以实现各种复杂的逻辑操作和数据处理任务。
4.文本处理:Shell脚本善于处理纯文本内容,可以方便地处理Linux系统中的配置文件、日志文件等。
5.应用场景:Shell脚本广泛应用于系统管理、自动化部署、数据处理、日志分析等领域。例如,可以编写Shell脚本来自动备份数据、监控系统状态、批量处理文件等。

Shell脚本常用的语言包括Bash、Korn Shell、C Shell等。

以下是关于这些常用语言的详细介绍

1.Bash:Bash是Linux和Unix系统上最常用的Shell之一,它具有强大的编程功能,可以轻松地创建复杂的脚本。Bash提供了丰富的语法结构,包括条件语句、循环语句、函数定义等,使得脚本编写更加灵活和高效。此外,Bash还具有丰富的内置命令和功能,如文本处理、文件操作、算术运算等,可以满足各种自动化任务的需求。
2.Korn Shell (ksh):Korn Shell是一种与Bash兼容的Shell,它提供了类似于C语言的语法结构,使得脚本编写更加直观和易读。Korn Shell具有丰富的内置命令和功能,可以实现各种复杂的任务,如文件处理、文本替换、条件执行等。它还支持数组、关联数组等高级数据结构,提高了脚本的编程能力。
3.C Shell (csh):C Shell是一种类似于C语言的Shell,它提供了简洁的语法结构和强大的编程功能。C Shell具有类似于C语言的控制结构,如if语句、while循环、for循环等,可以方便地实现各种逻辑操作。此外,C Shell还支持命令替换、管道等高级功能,可以方便地处理文本和文件。
这些Shell语言都具有各自的特点和优势,适用于不同的场景和需求。在选择Shell语言时,可以根据个人习惯和任务需求来进行选择。

编写并运行Shell脚本程序

  • 一、实训目的
  • 二、实训内容
  • 三、实训结果

Shell脚本编程基础篇思维导图

一、实训目的

(1)掌握软件的安装。
(2)掌握Shell变量的使用方法。
(3)熟悉Shell程序设计。
(4)了解循环控制符的使用
(5)shell脚本基本介绍

二、实训内容

  • (1)编写一个shell脚本,找出100以内所有能被3整除的数,每行显示7个数,然后换行显示。

  • (2)编写一个shell脚本,让用户输入一个数字,计算1~n之间的所有偶数和。

  • (3)编写一个shell脚本,当你运行该脚本的时候,可以显示:1.你目前的身份;2.你目前所在的目录。

  • (4)编写一个shell脚本,它的作用是:1.先查看一下/root/test这个名称是否存在;2.若不存在,则创建一个普通文件,使用touch来创建,创建完成后离开;3.如果存在的话,判断该名称是否为普通文件,若为普通文件则将之删除后创建一个目录,文件名为test,之后离开;4.如果存在的话,而且该名称为目录,则移除此目录。

  • (5)编写一个shell脚本,实现每日凌晨2点整将/etc/目录打包压缩到/root目录中,命名规则为etcYYYY-mm-dd.tar。

  • (6)编写一个生成脚本的脚本createsh.sh,当执行如createsh.sh test.sh时,会自动在/root目录下新建一个名为test.sh的新文件,该文件会被自动授予执行权限,同时自动在文件头上加上#!及注释信息,然后自动使用vi打开,等待用户开始编写脚本正文。注释信息如下:
    #!/bin/bash
    #-------------------------------------------
    Filename: test.sh(此处会根据文件名自动更换)
    Revision: 1.0**
    Date: 2022-07-15(此处会自动变换为当前日期)
    Author:ZS**
    #-------------------------------------------
    #Copyright: 2022ZS

三、实训结果

(1)编写一个shell脚本,找出100以内所有能被3整除的数,每行显示7个数,然后换行显示。
命名为rank.txt
输入view rank.txt,进入脚本进行编辑

$ view rank.txt
$ chmod +x rank.txt
$ bash rank.txt
!/bin/bash
#找出100以内所有能够被3整除的数,每行显示7个数,然后换行显示
count=0
for (( i=1; i<=100; i++ ))
doif [ $(($i % 3)) -eq 0 ]; thenecho -n "$i "count=$((count + 1))if [ $((count % 7)) -eq 0 ];thenecho " "fifi
done
#处理最后一行不是7个数的情况
if [ $((count % 7)) -ne 0 ];thenecho ""
fi
~    

在这里插入图片描述

运行结果如图:

在这里插入图片描述

(2)编写一个shell脚本,让用户输入一个数字,计算1~n之间的所有偶数和。
命名为number.txt
输入view number.txt,进入脚本进行编辑

$ view number.txt
$ chmod +x number.txt
$ bash number.txt
#!/bin/bash
#让用户输入一个数字,计算1~n之间的所有偶数和
read -p "Please input the number:" num
for ((sum=0,i=0;i<=$num;i+=2))
dosum=$[sum+i]
done
echo "The sum is $sum"
~                       

在这里插入图片描述

运行结果如图:

在这里插入图片描述

(3)编写一个shell脚本,当你运行该脚本的时候,可以显示:1.你目前的身份;2.你目前所在的目录。
命名为infor.txt
输入view infor.txt,进入脚本进行编辑

$ view infor.txt
$ chmod +x infor.txt
$ bash infor.txt 
#!/bin/bash
#当你运行该脚本的时候,可以显示:1.你目前的身份;2.你目前所在的目录。
echo $USER
echo $PWD

在这里插入图片描述

运行结果如图:

在这里插入图片描述

(4)编写一个shell脚本,它的作用是:1.先查看一下/root/test这个名称是否存在;2.若不存在,则创建一个普通文件,使用touch来创建,创建完成后离开;3.如果存在的话,判断该名称是否为普通文件,若为普通文件则将之删除后创建一个目录,文件名为test,之后离开;4.如果存在的话,而且该名称为目录,则移除此目录。
命名为mkd.txt
输入view mkd.txt,进入脚本进行编辑

$ view mkd.txt
$ chmod +x mkd.txt
$ bash mkd.txt
###############################################################################DESCRIPTION:Shell脚本
#NOTES:
#1.先查看一下/root/test这个名称是否存在
#2.若不存在,则创建一个普通文件,使用touch来创建,创建完成后离开;
#3.如果存在的话,判断该名称是否为普通文件,若为普通文件则将之删除后创建一个目录>,文件名为test,之后离开;
#4.如果存在的话,而且该名称为目录,则移除此目录。
#AUTHOR:Ley
#CREATED2024/3/23###############################################################################
#!/bin/bash
TARGET_PATH="/root/test"
if [ ! -e "$TARGET_PATH" ];thenecho "$TARGET_PATH 不存在,创建普通文件"sudo touch "$TARGET_PATH"exit 0
fi
if [ -f "$TARGET_PATH" ];thenecho "$TARGET_PATH 是普通文件,删除并创建目录"sudo rm "$TARGET_PATH"sudo mkdir "$TARGET_PATH"exit 0
fi
if [ -d "$TARGET_PATH" ];thenecho "$TARGET_PATH 是目录。移出目录"sudo rm -r "$TARGET_PATH"exit 0
fi
~   

在这里插入图片描述

运行如下图:

在这里插入图片描述

(5)编写一个shell脚本,实现每日凌晨2点整将/etc/目录打包压缩到/root目录中,命名规则为etcYYYY-mm-dd.tar。
命名为tar.txt
输入view tar.txt,进入脚本进行编辑

$ view tar.txt
$ chmod +x tar.txt
$ bash tar.txt
#!/bin/bash
#实现每日凌晨2点整将/etc/目录打包压缩到/root目录中,命名规则为etcYYYY-mm-dd.tar。
today=$(date+%Y-%m-%d)
#创建压缩文件
tar -cvzf /root/etc$today.tar /etc/

在这里插入图片描述

输入crontab -e,进入脚本进行编辑
输入如下图:

#!/bin/bash
0 2 * * * etc2023-12-04.tar

[参考文章]
使用cron安排周期性任务

在这里插入图片描述

运行结果如图:

在这里插入图片描述

(6)编写一个生成脚本的脚本createsh.sh,当执行如createsh.sh test.sh时,会自动在/root目录下新建一个名为test.sh的新文件,该文件会被自动授予执行权限,同时自动在文件头上加上#!及注释信息,然后自动使用vi打开,等待用户开始编写脚本正文。注释信息如下:
#!/bin/bash
#-------------------------------------------
#Filename: test.sh(此处会根据文件名自动更换)
#Revision: 1.0
#Date: 2022-07-15(此处会自动变换为当前日期)
#Author:ZS
#-------------------------------------------
#Copyright: 2022ZS

命名为createsh.sh
输入view createsh.sh,进入脚本进行编辑

$ view createsh.sh
$ chmod +x createsh.sh
$ bash createsh.sh
!/bin/bash
#编写一个生成脚本的脚本createsh.sh,当执行如createsh.shtest.sh时,会自动在/root目录下新建一个名为test.sh的新文件,该文件会被自动授予执行权限,同时自动在>文件头上加上#!及注释信息,然后自动使用v打开,等待用户开始编写脚本正文。#获取传入的文件名 FILENAME-$1
# 检查文件名是否为空
if[ -z"$FILENAME" ]; then
echo "Usage: $0<filename>" exit 1
fi
#创建新脚本文件并设置权限 
touch /root/$FILENAME 
chmod +x /root/$FILENAME
# 获取当前日期
CURRENT_DATE=$(date +"%Y-%m-%d")
#添加文件头信息
echo "#!/bin/bash" > /root/$FILENAME 
echo "#" >> /root/$FILENAME
echo "# Filename: $FILENAME">> /root/$FILENAME 
echo "# Revision: 1.0">> /root/$FILENAME
echo"# Date: $CURRENT DATE">> /root/$FILENAME 
echo"# Author:XP" >> /root/$FILENAME 
echo"#" >> /root/$FILENAME
echo "#Copyright:2022ZS">> /root/$FILENAME
# 使用vi打开新文件 
view /root/$FILENAME

在这里插入图片描述

运行结果如图:

在这里插入图片描述

在这里插入图片描述

当输入chmod +x 文件名时,文件会被赋予可执行权限,普通文件成为Shell脚本,如图:

在这里插入图片描述

[Shell脚本实例]
Shell脚本——配置yum源

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PlanUML和Mermaid哪个好?

引言 在当今信息化快速发展的时代&#xff0c;数据可视化和图表工具不仅对于程序员&#xff0c;也对于非技术背景的人士至关重要。绘图工具可以帮助我们更好地理解和表达复杂的概念或数据流。PlantUML和Mermaid是两款被广泛使用的绘图语言&#xff0c;它们都能够通过简洁的文本…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果&#xff0c;以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…

航芯通用MCU技术常见问题 | F4专题

日常工作中&#xff0c;我们的销售或技术工程师经常会收到来自用户的问题&#xff0c;其中一些问题是比较常见的&#xff0c;所以为满足日常用户对航芯产品使用及服务的了解&#xff0c;航芯特此推出“通用MCU技术常见问题”专题&#xff0c;分为F0专题及F4专题&#xff0c;欢迎…

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar]

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar] https://mvnrepository.com/artifact/org.opencv/opencv 根本就没有 找了个旧项目的opencv-410.jar修改下opencv-4.10.0.jar放到目录下面就好了 D:\localRepository\org\opencv\opencv\4.10.0 OpenCV-C…

什么是态势感知?

什么是态势感知&#xff1f; 同学&#xff0c;听说过态势感知吗&#xff1f;啥&#xff1f;不知道&#xff1f;不知道很正常&#xff0c;因为态势感知是一个比较小众、比较神秘的概念。为什么态势感知很神秘&#xff0c;首先是因为这是来自军事情报领域的概念&#xff0c;然后…

python--递归算法篇

1、给定一个包含n1个整数的数组nums&#xff0c;其数字在1到n之间&#xff08;包含1和n&#xff09;&#xff0c; 可知至少存在一个重复的整数&#xff0c;假设只有一个重复的整数&#xff0c;请找出这个重复的数 def repeat(ls:list) -> list:#把个数超过1的数&#xff0c…

使用clickhouse-backup备份和恢复数据

作者&#xff1a;俊达 介绍 clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具&#xff0c;开源项目地址&#xff1a;https://github.com/Altinity/clickhouse-backup 功能上能满足日常数据库备份恢复的需求&#xff1a; 支持单表/全库备份支持备份上…

【opencv】示例-grabcut.cpp 使用OpenCV库的GrabCut算法进行图像分割

left mouse button - set rectangle SHIFTleft mouse button - set GC_FGD pixels CTRLleft mouse button - set GC_BGD pixels 这段代码是一个使用OpenCV库的GrabCut算法进行图像分割的C程序。它允许用户通过交互式方式选择图像中的一个区域&#xff0c;并利用GrabCut算法尝试…

Tomcat无法成功启动——双击startup.bat闪退的解决办法

一、首先查看端口是否被占用了&#xff0c;一般Tomcat的默认端口是8080&#xff0c;可以在管理员命令行通过“netstat -ano|findstr "8080”"的命令查看当前是否有进程占用了端口。 1.如果端口占用了&#xff1a; 则根据PID&#xff08;进程id号&#xff09;来查这个…

深入理解Apache ZooKeeper与Kafka的协同工作原理

目录 引言 一、ZooKeeper基础概念 &#xff08;一&#xff09;ZooKeeper简介 &#xff08;二&#xff09;ZooKeeper数据结构 &#xff08;三&#xff09;ZooKeeper特点 &#xff08;四&#xff09;应用场景 二、ZooKeeper工作模式 &#xff08;一&#xff09;工作机制 …

jeecg-boot安装

我看大家都挺关注&#xff0c;所以集中上传了下代码和相关工具&#xff0c;方便大家快速完成 链接&#xff1a;https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码&#xff1a;op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…

MySQL 04-EMOJI 表情与 UTF8MB4 的故事

拓展阅读 MySQL View MySQL truncate table 与 delete 清空表的区别和坑 MySQL Ruler mysql 日常开发规范 MySQL datetime timestamp 以及如何自动更新&#xff0c;如何实现范围查询 MySQL 06 mysql 如何实现类似 oracle 的 merge into MySQL 05 MySQL入门教程&#xff0…

SpringBoot + Dobbo + nacos

SpringBoot Dobbo nacos 一、nacos https://nacos.io/zh-cn/docs/quick-start.html 1、下载安装包 https://github.com/alibaba/nacos/releases/下载后在主目录下&#xff0c;创建一个logs的文件夹&#xff1a;用来存日志 2、启动nacos 在bin目录下打开cmd运行启动命令&a…

当你的项目体积比较大?你如何做性能优化

在前端开发中&#xff0c;项目体积优化是一个重要的环节&#xff0c;它直接影响到网页的加载速度和用户体验。随着前端项目越来越复杂&#xff0c;引入的依赖也越来越多&#xff0c;如何有效地减少最终打包文件的大小&#xff0c;成为了前端工程师需要面对的挑战。以下是一些常…

3D应用模型信创系统实时渲染有什么要求?

实时云渲染技术是数字孪生领域&#xff0c;比较常用的轻量化软件交付方式&#xff0c;该技术是将3D应用等大模型的算力执行放在了服务器端&#xff0c;而服务器目前比较常用的还是Windows系统。但随着国产信创在数字孪生领域应用越来越多&#xff0c;实时云渲染平台的国产信创化…

【vue】购物车案例优化

对 购物车案例 进行优化 用watch实现全选/取消全选用watch实现全选状态的检查用computed计算总价格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

【高效开发工具系列】obsutil安装与使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Day98:云上攻防-云原生篇K8s安全Config泄漏Etcd存储Dashboard鉴权Proxy暴露

目录 云原生-K8s安全-etcd(Master-数据库)未授权访问 etcdV2版本利用 etcdV3版本利用 云原生-K8s安全-Dashboard(Master-web面板)未授权访问 云原生-K8s安全-Configfile鉴权文件泄漏 云原生-K8s安全-Kubectl Proxy不安全配置 知识点&#xff1a; 1、云原生-K8s安全-etcd未…

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源&#xff0c;都写的乱七八糟的&#xff0c;都是随便换&#xff0c;最后还是换得一堆问题。 镜像源也是跟版本一一对应的&#xff0c;不能随便一个国内源就还过去用&#xff0c;否则会出现各种各样的问题&#xff0c;我也是吃过亏之后才发现的。 国…