首页 > 系统相关 >【Linux】编写并运行Shell脚本程序操作实例

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

时间:2024-04-09 20:29:05浏览次数:16  
标签:脚本 Shell sh 实例 Linux 编写 txt root

关于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脚本程序

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

一、实训目的

(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
#CREATED: 2024/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源

标签:脚本,Shell,sh,实例,Linux,编写,txt,root
From: https://blog.csdn.net/2302_76195174/article/details/137516491

相关文章

  • bashshell目录介绍 及其使用
     目录介绍linux是单根/根路径,windows是多根bin和sbin:bin普通用户命令,超级用户命令都是usr下的文件夹软链接到根路径home、root:home普通用户的家路径,home下的用户名的文件夹-用户一登录系统,是在自己的家路径jack--》/home/jack  目录之usr/usr,相当于C:W......
  • (亲测好用)使用PHP提取PDF内容的详细步骤与实例
    使用PHP提取PDF内容的详细步骤与实例在现代Web开发中,处理PDF文件的需求越来越普遍。无论是需要读取PDF文件的内容,还是需要进行PDF文件的编辑和转换,PHP都提供了丰富的库和函数来帮助我们完成这些任务。本文将详细介绍如何使用PHP来提取PDF文件的内容,并提供相关的代码示例。1.安装......
  • 软件构造中的各类注释介绍与实例演示
    本文系笔者在学习软件构造课程期间所写,不保证通用性和正确性,仅供参考。目录前言SpecAbstractFunctionRepInvariantSafetyfromExposureTestingStrategy结语一、前言之前的代码中都不怎么重视注释,有注释也就是随便一两行解释一下下面的代码是干什么的。学习课......
  • Linux 磁盘满了,查看大文件并删除
    当你的Linux磁盘空间满了时,可以通过以下步骤查找大文件并删除它们:1.检查磁盘空间:使用以下命令检查磁盘空间的使用情况:df-h这将显示文件系统的使用情况,包括每个文件系统的总大小、已用空间、可用空间和挂载点。2.找到占用空间大的目录:进入可能占用大量磁盘空间的目录,例如......
  • linux 挂载和识别u盘
    一、概念  Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。USB移动存储设备通常被识别为sdb*(如sdb、sdb1等),具体可以通过lsblk命令查询。二、lsblk命令介绍  在Linux中,lsblk(blk:block)命令用于列出系统中所有可用的块设备......
  • shell变量
    一、自定义变量1.1自定义局部变量在shell脚本文件中var_name=value1.2自定义常量readonlyvar_name1.3自定义全局变量在shell脚本文件中exportvar_name二、特殊符号变量1.1$n:用于获取命令的输入参数$0:获取执行脚本......
  • Java 实例 - 在控制台上随机得到两个数之间的任意整数值(Random随机数)
       在控制台上随机得到4~11之间的任意值,含4和11 1packagecom.guyu.demo;23importjava.util.Random;45/**6*7*2024年4月9日上午10:39:438*@authorGuyu9*10*随机数示例:11*在控制台上随机得到4~11之间的任意......
  • 【Shell】循环语句基础
    Shell循环循环语句Shell循环循环的定义for循环for循环的C语言格式while循环until循环循环的定义循环在编程中通常指循环结构。循环结构是编程中的一种控制结构,它允许代码在满足特定条件时重复执行一段特定的指令集合,这部分重复执行的代码被称为循环体。循环......
  • 【Shell学堂】数学运算相关脚本
    1.输出1-100之间的所有数字#!/bin/bashforiin{1..100}doecho"$i"done2.计算1-100所有数的和#!/bin/bashsum=0foriin{1..100}doletsum=$sum+$idoneecho$sum3.计算1-100所有偶数的和#!/bin/bashsum=0foriin{2..100..2}doletsum=$sum+$ido......
  • Linux -防火墙
    Windows进入CMD窗口查询指定port端口进程是否存在,使用进程任务终止命令杀死进程即可第一步:netstat-ano|findstrport(port被占用的端口)例:netstat-ano|findstr8090第二部:taskkill/pidPID-f(PID占用端口的进程)例:taskkill/pid14788-f第三部netstat-ano|find......