【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.mzph.cn/news/811402.shtml

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

相关文章

VUE3组合式API

create-vue create-vue是Vue官方新的脚手架工具&#xff0c;底层切换到了vite,为开发提供极速相应 使用create-vue 1.安装16.0或者更高版本的Node.js 2.npm init vuelatest指令会安装并执行create-vue 项目目录和关键文件 组合式API Vue 3引入了组合式API&#xff08;Com…

【Super数据结构】二叉搜索树与二叉树的非递归遍历(含前/中/后序)

&#x1f3e0;关于此专栏&#xff1a;Super数据结构专栏将使用C/C语言介绍顺序表、链表、栈、队列等数据结构&#xff0c;每篇博文会使用尽可能多的代码片段图片的方式。 &#x1f6aa;归属专栏&#xff1a;Super数据结构 &#x1f3af;每日努力一点点&#xff0c;技术累计看得…

《Sky光遇》无视steam锁区的两种下载入库游玩教程(图文一览)

玩家在光遇游戏中需要找到每一关的子民&#xff0c;然后穿过艰难险阻&#xff0c;最终在石碑前接受祝福&#xff0c;就是通过这一关了。玩家只有通关后会来到一个祭坛&#xff0c;从这个祭坛周围的门前往下一关或是回到遇境&#xff0c;通关就相当于是解锁地图场景&#xff0c;…

【Django开发】前后端分离美多商城项目第7篇:登录,使用登录的流程【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备&#xff0c;配置1. 修改set…

C++——StackQueue

目录 一Stack 1介绍 2接口 3模拟实现 4栈的oj题 二Queue 1介绍 2接口 3模拟实现 三容器适配器 1再谈栈和队列 四优先级队列 1接口 ​编辑 2仿函数 五dequeue的简单介绍 一Stack 1介绍 先来看看库中对栈的介绍&#xff1a; 1. stack是一种容器适配器&#x…

开箱即用的 SpringBoot 企业级开发平台

项目概述 基于 Spring 实现的通用权限管理平台&#xff08;RBAC模式&#xff09;。整合最新技术高效快速开发&#xff0c;前后端分离模式&#xff0c;开箱即用。 核心模块包括&#xff1a;用户、角色、职位、组织机构、菜单、字典、日志、多应用管理、文件管理、定时任务等功能…

鸿蒙TypeScript学习第13天:【元组】

1、TypeScript 元组 我们知道数组中元素的数据类型都一般是相同的&#xff08;any[] 类型的数组可以不同&#xff09;&#xff0c;如果存储的元素数据类型不同&#xff0c;则需要使用元组。参考文档&#xff1a;qr23.cn/AKFP8k 元组中允许存储不同类型的元素&#xff0c;元组…

手把手教你创建新的OpenHarmony 三方库

创建新的三方库 创建 OpenHarmony 三方库&#xff0c;建议使用 Deveco Studio&#xff0c;并添加 ohpm 工具的环境变量到 PATH 环境变量。 创建方法 1&#xff1a;IDE 界面创建 在现有应用工程中&#xff0c;新创建 Module&#xff0c;选择"Static Library"模板&a…

2024-3-29 群讨论:如何看到一个线程的所有 JFR 事件

以下来自本人拉的一个关于 Java 技术的讨论群。关注公众号&#xff1a;hashcon&#xff0c;私信拉你 如何查看一个线程所有相关的 JFR 事件 一般接口响应慢&#xff0c;通过日志可以知道是哪个线程&#xff0c;但是如何查看这个线程的所有相关的 JFR 事件呢&#xff1f;JMC 有…

探索网络爬虫:技术演进与学习之路

网络爬虫及IP代理池 前言爬虫技术的演进最新的爬虫技术爬虫技术学习路线 前言 在信息时代&#xff0c;网络爬虫技术作为获取和处理网络数据的重要手段&#xff0c;已经成为数据科学、机器学习和许多商业应用的基石。从简单的HTML页面抓取到复杂的动态内容采集&#xff0c;爬虫…

三大能力升级!大模型开启智能客服新篇章

当前智能化已成为各行各业加速转型发展的关键词&#xff0c;客户服务领域也不例外&#xff0c;将大语言模型与文档问答结合&#xff0c;不仅能够有效提升知识构建效率&#xff0c;重塑智能客服模式&#xff0c;还将成为企业营销、运营智能化进程中的重要助推力&#xff01; 接…

Redis从入门到精通(十四)Redis分布式缓存(二)Redis哨兵集群的搭建和原理分析

文章目录 前言5.3 Redis哨兵5.3.1 哨兵原理5.3.1.1 集群的结构和作用5.3.1.2 集群监控原理5.3.1.3 集群故障恢复原理 5.3.2 搭建哨兵集群5.3.3 RedisTemplate5.3.3.1 搭建测试项目5.3.3.2 场景测试 前言 Redis分布式缓存系列文章&#xff1a; Redis从入门到精通(十三)Redis分…

欧盟网络安全局:公共数据空间中的个人数据保护设计(下)

三、应用场景分析:健康—医药用途 2020年欧盟发布欧盟医药战略,旨在应对制药行业面临的各种机遇和挑战,以确保欧盟公民对于药品的可获得性、可负担性和可持续性。[4]报告将药品数据空间作为一种可能的手段,旨在支持数据使用者对于药品市场供应情况和药品功效的研究和分析。…

Java复习第十七天学习笔记(转发、重定向,GET,POST),附有道云笔记链接

【有道云笔记】十七 4.3 转发、重定向、Get、POST、乱码 https://note.youdao.com/s/GD5TRksQ 一、转发 转发&#xff1a;一般查询了数据之后&#xff0c;转发到一个jsp页面进行展示 req.setAttribute("list", list); req.getRequestDispatcher("student_lis…

大厂面试:获取字符串的全排列

一、概念 现有一个字符串&#xff0c;要打印出该字符串中字符的全排列。例如输入字符串abc&#xff0c;则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 可以基于回溯法来解决这个问题。 二、代码 public class Permutation {//输出字符串str的全…

权限修饰符,代码块,抽象类,接口.Java

1&#xff0c;权限修饰符 权限修饰符&#xff1a;用来控制一个成员能够被访问的范围可以修饰成员变量&#xff0c;方法&#xff0c;构造方法&#xff0c;内部类 &#x1f47b;&#x1f457;&#x1f451;权限修饰符的分类 &#x1f9e3;四种作用范围由小到大(private<空着…

SV-704XT 100W网络有源音柱 校园广播音柱

SV-704XT 100W网络有源音柱 一、描述 SV-704XT是深圳锐科达电子有限公司的一款壁挂式网络有源音柱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;其采用防水设计&#xff0c;功率100W。SV-704XT作为网络广播播放系统的终…

java 将 json 数据转为 java 中的对象

一、准备 json 数据 {"name": "mike","age": 17,"gender": 1,"subject": ["math","english"] }二、对应的java对象 package com.demo.controller;import lombok.Data; import java.util.List;Data pu…

回溯算法先导

撤销当前的操作 使用原因及解决的问题 基本上暴力搜索的问题 适用于 组合问题 [1,2,3,4] 两位数的组合有哪些切割问题 给定字符串,求切割方式使其字串都是回文子串子集问题 求 [1,2,3,4] 的子集排列组合 组合(不强调顺序)棋盘问题 如何理解回溯法 抽象为一个树形结构 回溯…

Python模块pyttsx3添加语音包

查询现有语音包信息:脚本import pyttsx3engine = pyttsx3.init() voices = engine.getProperty(voices) for voice in voices:print("Voice:")print(" - ID: %s" % voice.id)print(" - Name: %s" % voice.name)print(" - Languages: %s&qu…