关于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源