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

news2024/11/26 0:25:46

关于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++ ))
do
    if [ $(($i % 3)) -eq 0 ]; then
         echo -n "$i "
         count=$((count + 1))
         if [ $((count % 7)) -eq 0 ];then
              echo " "
         fi
    fi
done
#处理最后一行不是7个数的情况
if [ $((count % 7)) -ne 0 ];then
    echo ""
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))
do
        sum=$[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" ];then
         echo "$TARGET_PATH 不存在,创建普通文件"
         sudo touch "$TARGET_PATH"
         exit 0
fi
if [ -f "$TARGET_PATH" ];then
        echo "$TARGET_PATH 是普通文件,删除并创建目录"
        sudo rm "$TARGET_PATH"
        sudo mkdir "$TARGET_PATH"
        exit 0
fi
if [ -d "$TARGET_PATH" ];then
        echo "$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.coloradmin.cn/o/1587872.html

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

相关文章

工业级POE交换机的测试标准

工业级POE交换机的测试标准通常包括以下方面&#xff1a; 1. IEEE 802.3标准&#xff1a;工业级POE交换机遵循IEEE 802.3标准&#xff0c;该标准规定了以太网设备的通信协议和物理层规范。 2. POE标准&#xff1a;工业级POE交换机支持POE&#xff08;Power over Ethernet&…

【软件测试之因果图法】

【软件测试之判断表法】(蓝桥课学习笔记) 1、因果图法的概念 因果图法是一种利用图解法分析输入的各种组合情况&#xff0c;从而设计测试用例的方法&#xff0c;它适合于检查程序输入条件的各种情况的组合。因果图&#xff08;Cause-Effect-Graphing&#xff09;提供了把规则转…

Rust语言

文章目录 Rust语言一&#xff0c;Rust语言是什么二&#xff0c;Rust语言能做什么&#xff1f;Rust语言的设计使其适用于许多不同的领域&#xff0c;包括但不限于以下几个方面&#xff1a;1. 传统命令行程序&#xff1a;2. Web 应用&#xff1a;3. 网络服务器&#xff1a;4. 嵌入…

MySQL选择普通索引还是唯一索引(2/16)

普通索引和唯一索引 基本概述 MySQL中可以创建普通索引与唯一索引&#xff0c;这两种索引的区别是&#xff1a; 普通索引&#xff08;Non-Unique Index&#xff09;&#xff0c;也称为非唯一索引&#xff0c;它允许索引中的条目具有重复的键值。普通索引的主要目的是加快查询…

2024年第十四届MathorCup数学应用挑战赛A题解题思路

2024年第十四届MathorCup数学应用挑战赛A题解题思路点击链接加入【2024年第十四届MathorCup数学建模】&#xff1a; http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kNol416eFZyg4AFPHCZsYfGkLnEnZ8H36&authKeyo9lIFgRfnk2U%2FfYYg1AlFJd5I456CSA2M6nlvJX2qcUockIKuMHj%2Bh…

【Java】SpringBoot快速整合mongoDB

目录 1.什么是mongoDB&#xff1f; 2.Docker安装mongoDB 3.SpringBoot整合mongoDB步骤 4.验证 1.什么是mongoDB&#xff1f; MongoDB是一种非关系型数据库&#xff0c;被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#x…

HWOD:最长回文子串

一、知识点 1、两层遍历&#xff0c;第一层i从0到n&#xff0c;第二层j从n到i 2、每一次的遍历&#xff0c;i确定子串的左边界l&#xff0c;j确定子串的右边界r 3、判断l和r界定的子串是否回文&#xff1a;while(l<r){如果下标为l和r的元素不相等&#xff0c;就break;l;r…

JAVAEE之Spring AOP

1. AOP概述 AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC) 1.1 什么是AOP&#xff1f; • Aspect Oriented Programming&#xff08;⾯向切⾯编程&#xff09; 什么是⾯向切⾯编程呢? 切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特定⽅法编…

python之堆的实现

堆本质是一个完全二叉树&#xff0c;分为大根堆和小根堆&#xff0c;大根堆每个结点的值都大于它的孩子的值&#xff0c;小根堆相反&#xff0c;每个结点的值都小于它的孩子的值 heapq是python的标准库&#xff0c;用于维护堆&#xff0c;非常方便 heapq库常用的几个函数 he…

(3)(3.1) 英特尔Realsense深度摄像头(三)

文章目录 前言 10 系统概述 11 手动设置配套计算机 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在配套计算机上运行的 Python 脚本&#xff08;非 ROS&am…

每天学点儿Python(5) -- 序列索引和切片

Python中&#xff0c;序列是指一块可存放多个值的连续内存空间&#xff0c;这些值按一定顺序排列&#xff0c;可通过每个值所在位置的编号&#xff08;称为索引&#xff09;访问它们。它类似于C/C中的数组或字符串&#xff0c;但又比数组或字符串强大很多 序列类型包括字符串、…

(洛谷P34060):海底高铁—->差分数组,贪心思想

海底高铁 题目描述 该铁路经过 N N N 个城市&#xff0c;每个城市都有一个站。不过&#xff0c;由于各个城市之间不能协调好&#xff0c;于是乘车每经过两个相邻的城市之间&#xff08;方向不限&#xff09;&#xff0c;必须单独购买这一小段的车票。第 i i i 段铁路连接了…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

掌握 C# 爬虫技术:使用 HttpClient 获取今日头条内容

摘要/导言&#xff1a; 在本文中&#xff0c;我们将探讨如何使用 C# 中的 HttpClient 类和爬虫代理IP技术来获取今日头条的内容。我们还将实现多线程技术&#xff0c;以提高数据采集的效率。 背景/引言&#xff1a; 随着信息时代的到来&#xff0c;数据已经成为了一种非常宝…

Leetcode110_平衡二叉树

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;…

机器学习machine learning

1. 概念 机器学习是从数据中提取知识。涉及统计学和人工智能&#xff0c;也被称为预测分析或统计学习。 应用领域非常广泛&#xff0c;用户习惯预测&#xff0c;个性推荐&#xff0c;分析DNA序列等等。 机器学习优势是将决策过程自动化&#xff0c;需要涉及较好的算法。如果…

如何打造高度柔性动态的智能仓储物流解决方案?

近年来&#xff0c;仓储物流行业步入自动化系统集成时代&#xff0c;以货架为存储主体的方式逐步发展成为了自动化储方式&#xff0c;核心设备也由货架转变为机器人货架&#xff0c;形成系统集成物流存储体系。河北沃克根据客户需求精准发力&#xff0c;推出了新一代海格里斯智…

九招!教做出立体感十足的地图组件,不服?还有谁

一、立体感地图在可视化大屏中的作用 在可视化大屏中&#xff0c;立体感十足的地图组件可以起到以下作用&#xff1a; 引导用户注意力&#xff1a;立体感的地图组件可以吸引用户的注意力&#xff0c;使其更加关注地图所代表的信息和数据。通过增加立体感&#xff0c;地图组件可…

Spring Security——08,自定义失败处理

自定义失败处理 一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint 二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足 一键三连有没有捏~~ 我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json&#xff0c…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…