shell脚本及判断语句

news2024/11/15 11:12:37

一、shell相关概念

1、shell概念

Shell 是一个命令行解释器,它提供了一个用户与操作系统进行交互的界面。通过 Shell,用户可以输入命令来执行程序、管理系统资源(如文件和目录)、以及执行各种系统级的任务。Shell 是大多数类 Unix 操作系统(如 Linux 和 macOS)中不可或缺的一部分,也是用户与系统之间交互的主要方式之一。

Shell 的主要功能包括:

命令解释:Shell 会读取用户从终端(或命令行界面)输入的命令,并解释这些命令,然后传递给操作系统内核去执行。

编程能力:Shell 支持编写脚本,这些脚本包含了一系列的命令,可以自动化执行重复性的任务或复杂的操作。Shell 脚本通常用于系统管理、批量文件处理等场景。

环境控制:Shell 提供了环境变量来控制用户的工作环境,比如 PATH 环境变量决定了系统搜索可执行文件的目录顺序。

管道和重定向:Shell 支持通过管道(|)将一个命令的输出作为另一个命令的输入,以及通过重定向(>、<、>>)改变命令的输入输出流,从而实现了命令之间的复杂交互。

文件处理:Shell 提供了丰富的文件处理命令,如 ls(列出目录内容)、cp(复制文件)、mv(移动或重命名文件)、rm(删除文件)等,用于文件系统的管理和操作。

作业控制:Shell 支持作业控制,允许用户同时运行多个进程(或命令),并可以对这些进程进行挂起、恢复、终止等操作。

常见的 Shell 类型:

Bourne Shell (sh):最早的 Unix Shell,由 Steve Bourne 编写。

Bourne Again SHell (bash):Bourne Shell 的增强版,是目前大多数 Linux 发行版默认的 Shell。

C Shell (csh):由 Bill Joy 编写,提供了类似于 C 语言的语法特性。

Tenex C Shell (tcsh):C Shell 的增强版,提供了更多的编程特性。

Korn Shell (ksh):由 David Korn 编写,融合了 Bourne Shell 和 C Shell 的特性。

Z Shell (zsh):一个功能强大的 Shell,提供了许多增强特性和改进的用户界面。

用户可以根据自己的喜好和需求选择合适的 Shell。在 Linux 和 macOS 系统中,可以通过 echo $SHELL 命令查看当前正在使用的 Shell 类型。

简单shell脚本举例:

#!/bin/bash

# 示例shell脚本

echo "Hello, World!" # 打印 Hello, World!

# 条件判断示例

if [ "$1" = "hello" ]; then

  echo "Hello again!"

else

  echo "Sorry, I didn't understand that."

fi

# 循环示例

for i in {1..5}; do

  echo "Iteration $i"

done

# 函数定义示例

function print_message() {

  echo "You called the function!"

}

print_message # 调用函数

2、shell 脚本

shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件

中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻

了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员

进行设置或者管理。

3、shell 脚本编写注意事项

shell命名: shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾

不能使用特殊符号、空格

名称要写的一眼可以看出功能,也就是顾名思义

shell脚本首行需要#!/bin/bash开头

shell脚本变量不能以数字、特殊符号开头,可以使用下划线 _,但不能

用破折号——

二、shell 脚本的构成

脚本声明

注释信息

可执行语句

三、编写 shell 脚本

1、伟大编程项目——Hello World

'Hello,World!' 中文意思是“你好,世界”。因为 The C Programming

Language 中使用它做为第一个演示程序,后来的程序员在学习编程或

进行设备调试时延续了这一习惯。

执行shell脚本的几种

bash 脚本名称

source 脚本名 在当前环境生效,其他方法都是在开一个

shell进程

sh 脚本名称

添加x权限,./脚本名称

shell脚本其实就是有序执行命令条件

[root@localhost ~]# touch hello.sh

[root@localhost ~]# vim hello.sh

#!/bin/bash

echo "Hello World!" # 输出“Hello World!”

:wq

[root@localhost ~]# bash hello.sh # 运⾏shell

脚本的⽅法1

Hello World!

[root@localhost ~]# sh hello.sh # 运⾏

shell脚本的⽅法2

Hello World!

[root@localhost ~]# chmod +x hello.sh # 运⾏shell脚本

的⽅法3

[root@localhost ~]# ll hello.sh

-rwxr-xr-x. 1 root root 32 6⽉ 14 14:22 hello.sh

[root@localhost ~]# ./hello.sh

Hello World!

[root@localhost ~]# source ./hello.sh # 只在当前环境生效,

其他方法是另外再开一个shell。

Hello World!

[root@localhost ~]# vim hello.sh # 修改hello脚本

#!/bin/bash

echo "Hello World!"

ls -lh /

df -hT

:wq

[root@localhost ~]# sh hello.sh

Hello World!

总⽤量 30K

lrwxrwxrwx. 1 root root 7 10⽉ 11 2021 bin -> usr/bin

dr-xr-xr-x. 5 root root 4.0K 5⽉ 11 20:46 boot

drwxr-xr-x. 19 root root 3.1K 6⽉ 14 22:08 dev

drwxr-xr-x. 144 root root 8.0K 6⽉ 14 22:14 etc

drwxr-xr-x. 3 root root 23 5⽉ 11 20:45 home

lrwxrwxrwx. 1 root root 7 10⽉ 11 2021 lib -> usr/lib

lrwxrwxrwx. 1 root root 9 10⽉ 11 2021 lib64 -> usr/lib64

dr-xr-xr-x. 7 root root 2.0K 11⽉ 11 2022 media

drwxr-xr-x. 3 root root 18 5⽉ 11 20:43 mnt

drwxr-xr-x. 2 root root 6 10⽉ 11 2021 opt

dr-xr-xr-x. 194 root root 0 6⽉ 14 22:08 proc

dr-xr-x---. 15 root root 4.0K 6⽉ 14 22:27 root

drwxr-xr-x. 41 root root 1.2K 6⽉ 14 22:10 run

lrwxrwxrwx. 1 root root 8 10⽉ 11 2021 sbin -> usr/sbin

drwxr-xr-x. 2 root root 6 10⽉ 11 2021 srv

dr-xr-xr-x. 13 root root 0 6⽉ 14 22:08 sys

drwxrwxrwt. 5 root root 4.0K 6⽉ 14 22:27 tmp

drwxr-xr-x. 13 root root 158 5⽉ 11 20:43 usr

drwxr-xr-x. 21 root root 4.0K 5⽉ 11 21:13 var

⽂件系统 类型 容量 已⽤ 可⽤ 已⽤% 挂载点

devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev

tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs tmpfs 1.9G 9.2M 1.8G 1% /run

tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

/dev/mapper/rl-root xfs 17G 5.8G 12G 34% /

/dev/sr0 iso9660 12G 12G 0 100% /media

/dev/sda1 xfs 1014M 260M 755M 26% /boot

tmpfs tmpfs 371M 0 371M 0% /run/user/0

# 可以看出,shell脚本就是有序的执行其中的命令条件

2、编写 nginx 安装脚本

1.安装依赖环境

2.下载nginx压缩包

3.解压

4.make和make install安装

5.按照顺序执行指令

[root@localhost ~]# vim /root/shell/install_nginx.sh

#!/bin/bash

yum -y install gcc gcc-c++ make pcre-devel openssl-devel

wget

cd /usr/local/src/

wget 'http://nginx.org/download/nginx-1.22.1.tar.gz'

tar xf nginx-1.22.1.tar.gz

cd nginx-1.22.1

./configure --prefix=/usr/local/nginx

make -j 4

make install

:wq

# 逻辑顺序:先安装依赖关系,再进入到系统默认的安装包目录src,使用wget

命令从网上下载nginx1.22.1版本的安装包,然后解压,再移动到 nginx 安

装目录,执行编译安装(预配置,编译,编译安装)

1name 不符合要求

nam,e 不符合要求

my_name 符合要求

_name 符合要求

四、变量

1、概念

变量用来存放系统或用户需要使用的特定参数或者值,变量的值可以根

据用户设定或者系统环境变化而相应变化,在Shell脚本中使用变量,可

使脚本更加灵活,适应性更强。

与变量相对应的是常量,常量例如“Hello World”,是不可改变的

变量可以给个变量名,假如为name,值是可变的

2、变量注意事项

变量命名规则:必须由大写字母、小写字母、下划线、数字,并且首字

母不能是数字

在变量命名时:建议也简写出该变量是什么用处

例如:

变量值的类型:值的类型会分为整型、浮点型、字符串型、布尔型等,

而且使用变量需要指定类型Shell 默认的变量类型都是字符串,无需指

定类型

3、变量的分类

(1)自定义变量

由用户自己定义、使用和修改

变量名=值中,等于号=之前和之后不能有空格,比如:name = yang,

这样是错的,name=yang 才对

变量名=值中,值内如果输入数学算式,是没办法算出结果的,只会输

出字符串。

(2)环境变量

由系统维护,用于设置工作环境

$PWD

$SHELL

$USER

$PATH

[root@localhost ~]# A=1314 # 左边是变量名、右边是值

[root@localhost ~]# echo $A

1314

[root@localhost ~]# unset A # 清除变量

[root@localhost ~]# echo $A

[root@localhost ~]#

[root@localhost ~]# env # 查看所有环境变量

...

SSH_CONNECTION=192.168.100.1 56964 192.168.100.100 22

LANG=zh_CN.UTF-8

HISTCONTROL=ignoredups

HOSTNAME=localhost.localdomain

which_declare=declare -f

XDG_SESSION_ID=1

USER=root

SELINUX_ROLE_REQUESTED=

PWD=/root

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

HOME=/root

SSH_CLIENT=192.168.100.1 56964 22

SELINUX_LEVEL_REQUESTED=

XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/va

r/lib/flatpak/ex

ports/share:/usr/local/share:/usr/share

SSH_TTY=/dev/pts/0

MAIL=/var/spool/mail/root

TERM=xterm

SHELL=/bin/bash

SELINUX_USE_CURRENT_RANGE=

SHLVL=1

LOGNAME=root

DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus

XDG_RUNTIME_DIR=/run/user/0

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/ro

ot/bin

DEBUGINFOD_URLS=https://debuginfod.centos.org/

HISTSIZE=1000

LESSOPEN=||/usr/bin/lesspipe.sh %s

BASH_FUNC_which%%=() { ( alias;

eval ${which_declare} ) | /usr/bin/which --tty-only --

read-alias --read-f

unctions --show-tilde --show-dot $@

}

_=/usr/bin/env

OLDPWD=/root/shell

[root@localhost ~]# echo $PWD

/root

[root@localhost ~]# echo $SHELL

/bin/bash

[root@localhost ~]# echo $USER

root

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bi

n

[root@localhost ~]#

其中PATH变量用于设置可执行程序的默认搜索路径,可以修改全局变

量文件/etc/profile 或修改某用户家目录下的~/.bash_profile文件永久改

变环境变量。

(3)位置变量

通过命令行给脚本程序传递参数 (也属于预定义变量)

为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数,

Bash引入了位置变量的概念位置变量有 ,n,n为1~9之间的数字

$0:第一个字段表示命令名或脚本名称

$1:脚本要处理的第一个参数

$2:脚本要处理的第二个参数

....

Shell脚本最多可以直接处理9个参数

(4)预定义变量

Bash中内置的一类变量,不能直接修改

预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定

义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。

$*:将所有参数作为整体

[root@localhost shell]# vim ip.sh

#!/bin/bash

ifconfig $1 | grep -w inet | awk '{print $2}' # 设置⼀个参数

:wq

[root@localhost shell]# sh ./ip.sh ens32

192.168.100.100

[root@localhost shell]# vim ip.sh

#!/bin/bash

ifconfig $1$2 | grep -w inet | awk '{print $2}' # 设置两个参

:wq

[root@localhost shell]# sh ./ip.sh ens 32

192.168.100.100

[root@localhost shell]#

$@:单个参数的组合,每个参数占一行

$0:保存了脚本名称

$?:保存命令或脚本的执行状态码

$#:保存脚本要处理的参数的个数

[root@localhost shell]# vim hehe.sh

#!/bin/bash

for x in "$*" # 将所有参数整合到一起,总共列为一行

do

echo $x

done

for y in "$@" # 将所有参数单个列出,每个参数单列一行

do

echo $y

done

:wq

[root@localhost shell]# sh ./hehe.sh 1 2 3 4 5 6 #

查看$*和$@的区别

1 2 3 4 5 6 # $*的结果

1

2

3

4

5

6 # $@的结果

[root@localhost shell]# vim hehe.sh

#!/bin/bash

for x in "$*"

do

echo $x

done

for y in "$@"

do

echo $y

done

echo "该脚本是:$0"

echo "此脚本⼀共处理了$#个参数"

:wq

[root@localhost shell]# sh hehe.sh 1 2 3 4 5 6

4、变量的定义与输出

(1)定义一个新的变量

格式:变量名=变量值

注意:变量名必须以字母或下划线开头,严格区分大小写

(2)变量符号运用

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值,$视为普通字符

反撇号: 或$(): 命令替换,提取命令的执行结果

1 2 3 4 5 6

1

2

3

4

5

6

该脚本是:hehe.sh # $0的结果,也就是该脚本的名称

此脚本⼀共处理了6个参数 # $#的结果,执行脚本时,输入了多少参

[root@localhost shell]# X=aaa

[root@localhost shell]# echo "$X" # 双引号可以使用变量

aaa

[root@localhost shell]# echo '$X' # 单引号只显示符号内的

字符

$X

[root@localhost shell]# ip1=`ifconfig ens32 | grep -w inet

| awk '{print$2}'` # ``反撇号可以引用命令

[root@localhost shell]# ip2=$(ifconfig ens32 | grep -w

inet | awk '{print$2}') # $()与反撇号作用相同

[root@localhost shell]# echo $ip1

192.168.100.100

[root@localhost shell]# echo $ip2

192.168.100.100

[root@localhost shell]# x=100

(3)输入和输出

输入格式:read [-p "显示的提示信息"] 变量名

输出格式:echo $变量名

[root@localhost shell]# y=50

[root@localhost shell]# z=`expr $x + $y` # 整数运算

[root@localhost shell]# echo $z

150

[root@localhost shell]# x=1.4

[root@localhost shell]# expr $x + 1 # 判断是否为浮点数

expr: ⾮整数参数

[root@localhost shell]# [ $? -ne 0 ] && echo "x为浮点数"

x为浮点数

[root@localhost shell]#

[root@localhost shell]# read x y # 输⼊,变量输入,在下

一行输入

1 3

[root@localhost shell]# echo $x $y # 输出,直接输出变量

1 3

[root@localhost shell]# read -p "请输⼊你要赋值的变量值" x y

请输⼊你要赋值的变量值1 5

[root@localhost shell]# echo $x $y

1 5

[root@localhost shell]# vim ip.sh # 编写一个查看IP的脚

本,内容如下

#!/bin/bash

read -p "请输⼊接⼝名称:" x # 输入x变量等于什么,脚本内不

用写,命令行输入该变量x等于什么即可,该变量x可在脚本内引用

ifconfig $x | grep -w inet | awk '{print $2}'

:wq

[root@localhost shell]# sh ip.sh

请输⼊接⼝名称:ens32

192.168.100.100

[root@localhost shell]# sh ip.sh

请输⼊接⼝名称:lo

127.0.0.1

[root@localhost shell]# vim read.sh # 编写输入账号密码的脚

本,内容如下

5、变量的作用范围

默认情况下,新定义的变量只在当前Shell环境中有效,因此称为局部变

量。当进入子程序或新的子shell 时,局部变量将无法再使用。

为了使用户定义的变量在所有子Shell环境中能够继续使用,减少重复设

置工作,可以通过内部命令export将指定的变量导出为“全局变量”。

格式 1:export 变量名

格式 2:export 变量名=值

#!/bin/bash

read -p "请输⼊您的姓名:" name # 该变量name是在命令行输入

的,相当于变量=值

read -p "请输⼊您的密码:" passwd # 该变量passwd是在命令行输入

的,相当于变量=值

if [ $passwd = "123456" ]; then # if判断语句,如果(if)某某

等于某某,那么(then)执行什么命令,否则(else)执行什么命令,结尾fi

echo "你好,$name !"

else

echo "抱歉,您输⼊的密码不正确!"

fi

:wq

[root@localhost shell]# sh read.sh

请输⼊您的姓名:admin

请输⼊您的密码:112233

抱歉,您输⼊的密码不正确!

[root@localhost shell]# sh read.sh

请输⼊您的姓名:admin

请输⼊您的密码:123456

你好,admin !

[root@localhost shell]#

6、变量的数学运算

(1)整数运算

格式:expr 变量1 运算符 变量2 运算符 变量3....

运算符:+ - * /(+ - × ÷)

[root@localhost shell]# x=aaa

[root@localhost shell]# export y=bbb # 使y=bbb导出为

全局变量,即使下次更新环境变量,y也会生效,相当于在/etc/profile内永

久赋值

[root@localhost shell]# hostname shell

[root@localhost shell]# bash

[root@shell shell]# echo $x

[root@shell shell]# echo $y

bbb

[root@shell shell]#

[root@shell shell]# x=123

[root@shell shell]# y=111

[root@shell shell]# expr $x + $y # 加

234

[root@shell shell]# expr $x - $y # 减

12

[root@shell shell]# expr $x \* $y # 乘

13653

[root@shell shell]# expr $x / $y # 除

1

[root@shell shell]# expr $x % $y # 余数计算

12

[root@shell shell]#

(2)精度计算

[root@shell shell]# yum -y install bc # 精度计算前,先

安装bc这个软件才可进行,否则只能进行整数运算

上次元数据过期检查:2:45:58 前,执⾏于 2023年06⽉14⽇ 星期三 22时

21分58秒。

软件包 bc-1.07.1-5.el8.x86_64 已安装。

依赖关系解决。

⽆需任何处理。

完毕!

[root@shell shell]# x=123

[root@shell shell]# y=111

[root@shell shell]# echo "scale=5; $x / $y" | bc

1.10810

[root@shell shell]#

判断语句

一、条件判断

Shell 的返回值:运行一条命令,都会有一个返回值。 0 代表执行正常,非 0 代表命令执行异常。

二、if 条件判断语句

1、if 单分支语句

2、if 多分支语句

条件判断:可以有数字判断、字符串判断、⽂件判断等

三、数字判断

1、格式

-eq:equal,等于,一般用于 [ $? -eq 0 ],也就是判断上条命令返回值等于 0,直接数字 -eq 数

字也可以 equals

-ne:not equal,不等于,一般用于 [ $? -ne 0 ],判断上条命令返回值不等于 0

-gt:greater than,大于

-ge:greater or equal,大于或等于

-lt:less than,小于

-le:less or equal,小于或等于

2、应用示例

[root@localhost test]# test 2 -eq 2 # test:shell环境中,测试条件表达式的命令工具

[root@localhost test]# echo $?

0

[root@localhost test]# test 3 -eq 2 # 测试3等于2

[root@localhost test]# echo $?

1 # 返回值为1,说明测试的3等于2这条命令不成立

[root@localhost test]# [ 2 -eq 2 ] # 编程中习惯使⽤[ ]中括号

[root@localhost test]# echo $?

0

[root@localhost test]# [ 3 -eq 2 ]

[root@localhost test]# echo $?

1

[root@localhost test]#

3、创建简单的数字判断脚本

[root@localhost test]# vim if.sh

#!/bin/bash

num1=3 # 给定变量num1

num2=3 # 给定变量num2

if [ $num1 -eq $num2 ];then # 判断num1变量是否等于num2

echo "$num1 equal $num2" # 如果等于,那么执行命令,echo输出

echo "in if"

fi

:wq

[root@localhost test]# sh ./if.sh

3 equal 3

in if

[root@localhost test]#

4、创建检测网络是否通畅的脚本

[root@localhost test]# vim ping.sh

#!/bin/bash

read -p "请输⼊要测试的⽹址:" web # read:命令行内输入web的变量值

ping -c 3 $web &> /dev/null # ping -c 3,连接某个网站三次

if [ $? -eq 0 ];then # 如果ping命令执行成功,那么

echo "此时⽹络畅通!" # 输出“此时网络畅通”

else # 否则

echo "⽆法访问,请检查⽹址是否输⼊正确或检查相关的⽹络配置!" # 输出“无法访

问...”

fi # if语句的结尾

:wq

[root@localhost test]# sh ./ping.sh

请输⼊要测试的⽹址:www.baidu.com

此时⽹络畅通!

[root@localhost test]#

四、字符串判断

1、格式

[ 字符串1 == 字符串2 ] 字符串内容相同

[ 字符串1 != 字符串2 ] 字符串内容不同

[ -z 字符串 ] 字符串内容为空

[ -n 字符串 ] 字符串内容不为空

3、案例

(1)创建简单的字符串判断脚本

[root@localhost test]# vim zifu.sh

#!/bin/bash

read -p "请输⼊账号:" name

if [ "$name" == "admin" ];then # 字符串判断需要加双引号

echo "欢迎您,$name!"

else

echo "系统未查询到此账号,请您重新输⼊!"

(2)创建 rpm 查询软件是否安装的脚本

五、文件、目录、权限的判断

1、格式

[ 操作符 文件或目录]

常用的测试操作符:

2、示例

3、案例

nginx 安装脚本优化,判断是否已安装 nginx

六、与或判断

判断多个条件

多个条件其中一个成立,或

多个条件都要成立,与

或运算判断:|| 或,两个条件满足其一即可,还有-o

与运算判断:&& 与,两个条件都得满足才行,还有-a

1、或运算判断

[root@localhost test]# vim huo.sh

#!/bin/bash

read -p "请输⼊字符串:" name

if [ "$name" == "haha" ]||[ "$name" == "hehe" ];then # 这两个条件需满足其

一,也可使⽤[ "$name" =="haha" -o "$name" == "hehe" ]

echo "$name is my want"

else

echo "in else"

fi

:wq

[root@localhost test]# sh ./huo.sh

请输⼊字符串:haha

haha is my want

[root@localhost test]# sh ./huo.sh

请输⼊字符串:hehe

hehe is my want

[root@localhost test]# sh ./huo.sh

请输⼊字符串:lala

in else

[root@localhost test]

2、与运算判断

3、混合判断

[root@localhost test]# vim hun.sh

#!/bin/bash

read -p "请输⼊⼀个数值:" age

if [ $age -gt 2 ]&&[ $age -lt 10 ]||[ $age -eq 100 ];then # 先做||前面的与判

断,再进行或判断,可使⽤[ $age -gt 2 -a $age -lt 10 -o $age -eq 100 ]

echo "age is>2 and age is <10 or age ==100 "

else

echo "in else"

fi

:wq

[root@localhost test]# sh ./hun.sh

请输⼊⼀个数值:7

age is>2 and age is <10 or age ==100

[root@localhost test]# sh ./hun.sh

请输⼊⼀个数值:100

age is>2 and age is <10 or age ==100

[root@localhost test]# sh ./hun.sh

请输⼊⼀个数值:30

in else

[root@localhost test]#

七、多重判断语法 elif

1、if 多分支语句结构

2、案例

八、多重判断的 case 语句

1、case 语句概述

case 语句是多分支选择语句

使用case语句改写if多分支可以使脚本结构更加清晰、层次分明。针对变量的不同取值,执行不同

的命令序列,case还支持正则。

2、case 语句的结构

3、示例

提示用户输入一个字符,判断该字符是字母、数字或者其他字符的脚本

4、案例

输入分数变量,然后判定等级

[root@localhost test]# vim fscase.sh

#!/bin/bash

#使⽤case语句编写分数等级评定脚本

read -p "请输⼊您的分数(0-100):" fs

case $fs in

[0-9]|[0-5][0-9]) # 0到9或59以内的两位数

echo "$fs分,不及格!"

;;

6[0-9]) # 6开头的两位数,若$fs输入为0,则判定为60,即执行下面的echo命令

echo "$fs分,及格!"

;;

7[0-9]|8[0-5]) # 以7开头的两位数或以8开头的两位数

echo "$fs分,良好!"

;;

8[6-9]|9[0-9]|100) # 以8开头的两位数,第二位最少为6,也就是最小是86 | 以9

开头的两位数 | 100

echo "$fs分,优秀!"

;;

*) # 输入不在上述规则内的其他字符,则echo如下命令

echo "您输⼊的分数有误!"

esac

:wq

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):5

5分,不及格!

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):58

58分,不及格!

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):69

69分,及格!

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):70

70分,良好!

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):89

89分,优秀!

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):100

100分,优秀!

[root@localhost test]# sh ./fscase.sh

请输⼊您的分数(0-100):110

您输⼊的分数有误!

[root@localhost test]#

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

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

相关文章

从食堂采购系统源码到成品:打造供应链采购管理平台实战详解

本篇文章&#xff0c;笔者将详细介绍如何从食堂采购系统的源码开始&#xff0c;逐步打造一个完备的供应链采购管理平台&#xff0c;帮助企业实现采购流程的智能化和高效化。 一、需求分析与规划 一般来说&#xff0c;食堂采购系统需要具备以下基本功能&#xff1a; 1.供应商…

原生PHP/JS自主开发的交友内核框架婚恋交友系统V10

本文来自&#xff1a;婚恋交友系统V10 - 源码1688 应用介绍 原生PHP/JS自主开发的交友内核框架&#xff0c;极高性能、无捆绑、自主权、无流水扣点、独立全开源 01脱单盲盒&#xff1a;脱单盲盒类似于漂流瓶&#xff0c;先将自己《投放》到盲盒中&#xff0c;另一伴有缘将您取…

文件上传总结

一、原理 通过界面上的上传功能上传了一个可执行的脚本文件&#xff0c;而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好&#xff0c;使得恶意用户可以通过文件中上传的一句话木马获得操控权 二、绕过方法 1>前端绕过 1.删除前端校验函数 checkFile() 2.禁用js…

Python小工具——监听某网站的数据变化并进行邮件通知

目录 一、需求描述 二、解析 三、实例代码 一、需求描述 监听自考网2024年广东省6月份的毕业生学历注册进度&#xff0c;这是网址&#xff1a;https://www.chsi.com.cn/xlcx/count_zk.jsp&#xff0c; 如上图所示&#xff0c;我们想知道这个红色的空格啥时候被填满&#xf…

如何选择财税RPA解决方案

随着大数据、物联网、人工智能以及RPA等新兴技术的迅猛发展&#xff0c;每个企业都面临着巨大的行业和技术挑战。财务作为企业运营管理的核心&#xff0c;其数字化转型成为众多企业提升管理效能和实现高质量发展的先行路径。随着RPA技术应用在财务领域的不断深入&#xff0c;越…

WireShark 更改界面主题

背景 Windows 是黑色主题 安装 WireShark 后&#xff0c;WireShark 界面也是黑色主题 预期 想要将 WireShark 界面更改为白色主题 操作 启动 wireshark 时添加 -platform windows:darkmode0 参数 <Wireshark.exe 路径> -platform windows:darkmode0 例&#xff1a;…

基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 粒子群优化算法&#xff08;PSO&#xff09; 4.2 分组卷积神经网络&#xff08;GroupCNN&#xff09; 4.3 PSO优化GroupCNN 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行…

数据结构篇4—递归实现二叉树基础结构

文章目录 前言&#x1f6a9;1、树&#xff1f;2、树的相关概念3、树的结构表示4、二叉树&#x1f680;、概念和结构&#x1f381;、特殊二叉树 5、二叉树常用性质6、二叉树的存储结构&#x1f9e9;、顺序存储结构&#x1f3a8;、链式存储结构 7、二叉树顺序结构的实现----堆8、…

前端开发知识(三)-javascript(对象)

一、JS对象 包括JS已经定义的对象&#xff0c;如&#xff0c;Array,Sting &#xff0c;DOM&#xff0c;BOM等&#xff0c;其中&#xff0c;JSON是用户自定义对象&#xff08;除对象外&#xff0c;还有文本&#xff09;&#xff0c;其他是JS定义 1.Array&#xff1a;数组 数…

React最新版本 18

截至当前时间&#xff08;2024年07月24日&#xff09;&#xff0c;React 的最新版本是 18.2.0。这个版本在 2022 年 3 月 29 日由 React 团队正式发布&#xff0c;主要着眼于解决 React 应用在性能、稳定性、开发体验等方面的问题。 React 18 是 React 的一个重要版本&#xf…

算法导论 总结索引 | 第五部分 第二十章:van Emde Boas树

1、一些支持优先队列操作的 数据结构,如第6章的二叉堆、第13章的红黑树 和 第19章的斐波那契堆。在这几种数据结构中, 不论是最好情况 还是 摊还情况, 至少有一项重要操作 只需要 O(n lgn) 时间 由于这些数据结构 都是基于关键字比较 决定的&#xff0c;因此, 8.1节中的下界 Ω…

【网络流】——初识(最大流)

网络流-最大流 基础信息引入一些概念基本性质 最大流定义 Ford–Fulkerson 增广Edmons−Karp算法Dinic 算法参考文献 基础信息 引入 假定现在有一个无限放水的自来水厂和一个无限收水的小区&#xff0c;他们之间有多条水管和一些节点构成。 每一条水管有三个属性&#xff1a…

sql_exporter通过sql收集业务数据并通过prometheus+grafana展示

下载并解压安装sql_exporter wget https://github.com/free/sql_exporter/releases/download/0.5/sql_exporter-0.5.linux-amd64.tar.gz #解压 tar xvf sql_exporter-0.5.linux-amd64.tar.gz -C /usr/local/修改主配置文件 cd /usr/local/ mv sql_exporter-0.5.linux-amd64 s…

海山数据库(He3DB)技术解析:海山Redis定时任务与持久化管控设计

文章目录 引言一、背景介绍二、具体实现1、多副本容灾功能2、主备切换后任务断点续做功能3、持久化管控编排功能 三、总结作者 引言 云Redis数据库服务是目前广泛应用的模式&#xff0c;其数据持久化方案是现在研究的热点内容&#xff0c;数据持久化操作主要由参数设置自动触发…

AI学习记录 - 激活函数的作用

试验&#xff0c;通过在线性公式加入激活函数&#xff0c;可以拟合复杂的情况&#xff08;使用js实现&#xff09; 结论:1、线性函数的叠加&#xff0c;无论叠加多少次&#xff0c;都是线性的 如下图 示例代码 线性代码&#xff0c;使用ykxb的方式&#xff0c;叠加10个函数…

AnimationCurve动画曲线 简单使用

资料 AnimationCurve AnimationCurve 表示一条曲线。可在曲线上添加关键帧&#xff0c;编辑曲线。 水平轴表示时间&#xff0c;竖直轴表示曲线的高度 获取曲线高度方法&#xff0c;AnimationCurve.Evaluate 示例 循环移动Cube,Cube沿着曲线移动 using UnityEngine; publ…

正则表达式与文本处理

目录 一、正则表达式 1、正则表达式定义 1.1正则表达式的概念及作用 1.2、正则表达式的工具 1.3、正则表达式的组成 2、基础正则表达式 3、扩展正则表达式 4、元字符操作 4.1、查找特定字符 4.2、利用中括号“[]”来查找集合字符 4.3、查找行首“^”与行尾字符“$”…

火山引擎边缘智能平台,让AI走进企业现场

如何让大模型更好地与生产进行融合&#xff0c;让AI生产力为企业降本增效&#xff0c;是每个企业都在关注的问题。但设备异构、隐私安全、传输延迟等困难&#xff0c;让大模型走进企业现场变得步履维艰。这种情况&#xff0c;就需要借助边缘智能来应对这些挑战。 什么是边缘智能…

二维数组前缀和

二维数组前缀和&#xff08;Leetcode304&#xff09; 想法(参考题解)&#xff1a; 如上图&#xff0c;在矩阵中根据给定的方框围成的范围&#xff0c;确定范围内元素之和。题目&#xff1a;二维区域和检索 - 矩阵不可变。思路就是使用前缀和&#xff0c;前缀和表示的是面积&am…

Linux 安装 GDB (无Root 权限)

引入 在Linux系统中&#xff0c;如果你需要在集群或者远程操作没有root权限的机子&#xff0c;安装GDB&#xff08;GNU调试器&#xff09;可能会有些限制&#xff0c;因为通常安装新软件或更新系统文件需要管理员权限。下面我们介绍可以在没有root权限的情况下安装GDB&#xf…