云计算实训15——shell脚本、变量、自动化安装脚本、条件判断、循环

news2024/9/22 7:30:17

一、shell 脚本

1.基本概念

shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件 中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻 了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员 进行设置或者管理。

可以简单将shell看作是用户和操作系统之间的命令解释器

2.shell 脚本编写注意事项

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

不能使用特殊符号、空格 名称要写的一眼可以看出功能,也就是顾名思义

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

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

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

3.shell 脚本的构成

   (1)脚本声明

   (2)注释信息

   (3)可执行语句

一、简单脚本的创建和运行


1.编写脚本

[root@shell ~]# vim hello.sh

2.运行脚本
方法一:bash

[root@shell ~]# bash hello.sh 
hello world!

方法二:sh

[root@shell ~]# sh hello.sh
hello world!

方法三:source

[root@shell ~]# source hello.sh 
hello world!

方法四:x先赋予x权限,然后 ./

[root@shell ~]# chmod +x hello.sh 
[root@shell ~]# ./hello.sh 
hello world!

二、编写nginx安装脚本

用shell脚本自动化部署安装nginx

方法一:

第一步:创建一个shell目录

[root@shell ~]# mkdir shell

进入创建的目录

[root@shell ~]# cd /root/shell/

第二步:编写脚本

[root@shell shell]# vim install_nginx.sh 

第三步:执行脚本

给脚本赋予x权限

[root@shell shell]# chmod +x install_nginx.sh 

执行脚本

[root@shell shell]# ./install_nginx.sh 

方法2:

编写脚本

[root@shell ~]# vim nginxinstall.sh

运行脚本

[root@shell ~]# bash nginxinstall.sh 

三、变量

1.变量命名规则:

必须由大写字母、小写字母、下划线、数字,并且首字 母不能是数字

2.变量值的类型:

值的类型会分为整型、浮点型、字符串型、布尔型等, 而且使用变量需要指定类型Shell 默认的变量类型都是字符串,无需指 定类型

3.变量的分类

(1)自定义变量

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

        变量名=值中,等于号=之前和之后不能有空格

(2)环境变量

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

         $PWD

        $SHELL

        $USER

        $PATH        

PATH变量用于设置可执行程序的默认搜索路径,可以修改全局变 量文件/etc/profile 或修改某用户家目录下的~/.bash_profile文件永久改 变环境变量。

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

(3)位置变量

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

        为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数, Bash引入了位置变量的          概念位置变量有 ,n,n为1~9之间的数字

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

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

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

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

4 )预定义变量
        Bash中内置的一类变量,不能直接修改
        预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建          新的预定义变量,也不能直接为预定义变量赋值。
        $*:将所有参数作为整体
        $@:单个参数的组合,每个参数占一行
        $0:保存了脚本名称
        $?:保存命令或脚本的执行状态码
        $#:保存脚本要处理的参数的个数
4 、变量的定义与输出
1 )定义一个新的变量
格式:变量名 = 变量值
注意:变量名必须以字母或下划线开头,严格区分大小写
 
(2)变量符号运用  
双引号:允许通过 $ 符号引用其他变量值
单引号:禁止引用其他变量值, $ 视为普通字符
反撇号: 或 $(): 命令替换,提取命令的执行结果
 
(3)输入和输出  
输入格式: read [-p " 显示的提示信息 "] 变量名
输出格式: echo $ 变量名
5 、变量的作用范围
默认情况下,新定义的变量只在当前 Shell 环境中有效,因此称为局部变量。当进入子程序或新的子shell 时,局部变量将无法再使用。
为了使用户定义的变量在所有子 Shell 环境中能够继续使用,减少重复设置工作,可以通过内部命令export 将指定的变量导出为 全局变量
格式 1 export 变量名
格式 2 export 变量名 =
  6、变量的数学运算
(1)整数运算  
格式: expr 变量 1 运算符 变量 2 运算符 变量 3....
运算符: + - * / + - × ÷
  (2)精度计算  
精度计算前,先安装bc这个软件才可进行,否则只能进行整数运算
 yum -y install bc

四、条件判断语句

1 if 单分支语句
if 条件判断 ; then
条件成 的命令 ( 可以有多个命令,命令执行方式为逐行执行要么全执行,要么全不执行 )
fi
2 if 多分支语句
if 条件判断 ; then
条件成 的命令 ( 可以有多个命令 )
else
条件不成 的命令 ( 可以有多个命令 )
fi
条件判断:可以有数字判断、字符串判断、⽂件判断等

(一)数字判断

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.创建简单的数字判断脚本

3.编写检测网络是否畅通的脚本

第一步:创建脚本

[root@shell ~]# vim ping.sh

第二步:执行脚本

[root@shell ~]# bash ping.sh 

(二)字符串判断

1 、格式
[ 字符串 1 == 字符串 2 ] 字符串内容相同
[ 字符串 1 != 字符串 2 ] 字符串内容不同
[ -z 字符串 ]
字符串内容为空
[ -n 字符串 ]
字符串内容不为空
2.案例
1 )创建简单的字符串判断脚本
[root@localhost test]# vim zifu.sh
#!/bin/bash
read -p "请输⼊账号:" name
if [ "$name" == "admin" ];then # 字符串判断需要加双引号
echo "欢迎您,$name!"
else
echo "系统未查询到此账号,请您重新输⼊!"
fi
:wq
[root@localhost test]# sh ./zifu.sh
请输⼊账号:admin
欢迎您,admin!
[root@localhost test]# sh ./zifu.sh

请输⼊账号:ads
系统未查询到此账号,请您重新输⼊!
[root@localhost test]#
2 )创建 rpm 查询软件是否安装的脚本

(三)文件判断

文件、目录、权限的判断
1 、格式
[ 操作符 文件或目录 ]
常用的测试操作符 :
2.案例
nginx 安装脚本优化,判断是否已安装 nginx

五、与或判断

判断多个条件
多个条件其中一个成立,或
多个条件都要成立,与
或运算判断: ||
或,两个条件满足其一即可,还有 -o
与运算判断: && 与,两个条件都得满足才行,还有 -a
1 、或运算判断
这两个条件需满足其一
2、与运算判断 
这两个条件都得满足
3 、混合判断

六、多重判断语法 elif

1 if 多分支语句结构
if 条件1; then
#命令,条件1成⽴执⾏
elif 条件2;then
#命令,条件1不成⽴,条件2成⽴执⾏
elif 条件3;then
#命令,条件1不成⽴,条件2不成⽴,条件3成⽴执⾏
else
#命令 ,以上条件都不成⽴执⾏
fi
2 、案例

七、多重判断的 case 语句

case 语句是多分支选择语句, case 还支持正则。
1、 case 语句的结构
2.案例
提示用户输入一个字符,判断该字符是字母、数字或者其他字符的脚本
3、案例
输入分数变量,然后判定等级
[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
运行
[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]#

八、脚本循环语句

(一)for 循环

1 、作用
读取不同的变量值,以逐个执行同一组命令
2 、结构
for 变量名 in 取值列表 ( 范围 )
do
命令序列
done
取值列表:数字范围、字符串、多个字符串、提前设定好的变量等
for 默认以所有的空白字符进行分隔 : tab 、空格、回车,去循环处理
分隔成几段就循环几次
3 、示例
1 )分隔值循环
2 )在命令结果中循环
3 )检测某个网段的存活主机
4 )判断包是否已安装

(二)while 循环

1 、作用
重复测试某个条件,只要条件成立则反复执行
2 、结构
while 条件测试操作
do
命令序列
done
3 while for 区别
while 循环也有条件判断,当条件成立的时候,会循环执行。当条件不成立退出
if 判断当条件成立时,会执行一次,然后退出。当条件不成立时直接退出
4 、示例
批量添加用户
创建时交互输入用户前缀、创建用户个数、初始密码、过期时间 ( 可选设置 ) ,用户首次登陆强制要
求修改密码

(三) break continue

break 直接结束循环,循环立即退出
continue 可以用来跳过一次循环,跳过后循环继续,直到循环停止
示例
#!/bin/bash
for line in 北京 上海 州 深圳
do
echo $line
if [ " $line " == " 上海 " ];then $ 循环到上海 即退出
break
fi
done
:wq
[root@localhost test] # bash test.sh
北京
上海
编辑
[root@localhost test]# vim test.sh
#!/bin/bash
for line in 北京 上海 ⼴州 深圳
do
if [ "$line" == "上海" ];then
continue
fi
echo $line
done
:wq
运行
[root@localhost test]# bash test.sh
北京
⼴州
深圳

(四)九九乘法表

方法一:
运行结果
方法二:
运行结果:

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

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

相关文章

云服务部署项目(Spring + Vue)

云计算:腾讯云 操作系统:Ubuntu 22.04.4 LTS 项目:若依前后端分离项目(SpringBoot Vue) 首先要安装基本的一些依赖环境,大家可以看一下我往期的文章: Ubuntu在线JDK Ubuntu在线安装Nginx Ubunt…

Debain安装PostgreSql

目录 Debian和Centos区别 安装PostgreSql 更新包索引: 安装 PostgreSQL: 配置自动启动和启用 PostgreSQL 服务: 配置postGreSql 切换到 PostgreSQL 用户: 访问 PostgreSQL Shell: 设置密码 退出 PostgreSQL …

【C++题解】1066. 字符图形2-星号直角

问题&#xff1a;1066. 字符图形2-星号直角 类型&#xff1a;嵌套循环、图形输出 题目描述&#xff1a; 打印字符图形。 输入&#xff1a; 一个整数&#xff08; 0<n<10 &#xff09;。 输出&#xff1a; 一个字符图形。 样例&#xff1a; 输入&#xff1a; 3输…

集成显卡和独立显卡有什么区别?

显卡&#xff08;Video card&#xff0c;Graphics card&#xff09;全称显示接口卡&#xff0c;又称显示适配器&#xff0c;是计算机最基本配置、最重要的配件之一。平时大家可能都听过集显和独显&#xff0c;那么这两个显卡类别都是什么意思呢&#xff1f; 集成显卡 集成显卡…

Unity UGUI 之 坐标转换

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 前置知识&#xff1a;…

混凝土做的风机?风领新能源推出钢-超高性能混凝土体内预应力塔筒

随着全球能源结构的转型和技术的不断进步&#xff0c;陆上风电行业已正式迈入平价时代。这一里程碑式的转变不仅降低了风电项目的投资门槛&#xff0c;更激发了行业对于机组大型化的热情与追求。在这样的市场下&#xff0c;主流风机制造商纷纷推出10MW平台级别机组&#xff0c;…

VLAN通讯实验

目录 拓扑图 需求 需求分析 配置过程 1、手工配置 2、 使用DHCP获得IP地址信息 3、测试全网是否可达 拓扑图 需求 1、PC1、PC3属于VLAN 2 2、PC2、PC4属于VLAN 3 3、通过DHCP使得PC获取IP地址信息 4、全网可达 需求分析 1、先手工配置网段&#xff0c;VLAN 2为192.168.1…

杭州东网约车管理再出行方面取得的显著成效

随着科技的飞速发展&#xff0c;网约车已成为人们日常出行的重要选择。在杭州这座美丽的城市&#xff0c;网约车服务更是如雨后春笋般蓬勃发展。特别是杭州东站&#xff0c;作为杭州的重要交通枢纽&#xff0c;网约车管理显得尤为重要。近日&#xff0c;沧穹科技郑重宣告已助力…

【iOS】 消息传递和消息转发

消息传递和消息转发 objc_msgSend执行流程消息发送动态方法解析消息转发super面试题 objc_msgSend执行流程 OC中的方法调用&#xff0c;其实都是转化为objc_msgSend函数调用&#xff0c;objc_msgSend的执行流程可以分为3大阶段 消息发送 动态方法解析 消息转发 消息发送 消…

情绪稳定的人有什么特点?

第一部分&#xff1a;至纯之人&#xff0c;大器晚成 1.1 单纯&#xff0c;不是天真 你知道吗&#xff1f;那些能够成就大事的人&#xff0c;往往在人性上非常单纯。他们对外界的需求很低&#xff0c;更多的是向内寻求。这样的人&#xff0c;他们的内心世界像一片净土&#xff…

Internet Download Manager(IDM)6.43免费试用体验版下载

1. Internet Download Manager&#xff08;IDM&#xff09;是一款功能强大的下载管理器&#xff0c;能够将下载速度提高多达5倍。 2. IDM具备多线程下载、断点续传、自动捕获链接等特性。 IDM马丁正版下载如下: https://wm.makeding.com/iclk/?zoneid34275 idm最新绿色版一…

HarmonyOS 核心功能:一多特性

简述定义和目标&#xff0c;分述界面级&#xff08;核心&#xff09;、功能级、工程级的一多开发 定义&#xff1a; 一套代码&#xff0c;一次开发&#xff0c;多端按需部署 目标&#xff1a;支持开发者快速开发多设备上的应用 一 界面级一多开发&#xff08;重点&#xf…

宝塔单ip,新建多站点

报错如上&#xff1a; 那么如何新建多站点呢 先随便写个名字上去&#xff0c;然后再重新绑定别的端口… 这个时候访问99端口即可 。 如果是有域名&#xff0c;则不需要这样做 、直接80端口也可以多站点

FPGA:有限状态机

从以下6个实验理解状态机的概念 开发板频率为 50 M H z 50MHz 50MHz&#xff0c;一个时钟周期是 20 n s 20ns 20ns。 1、实验一:LED灯亮0.25秒、灭0.75秒的状态循环 通过之前的分析&#xff0c;我们实现频闪灯时&#xff0c;是让led灯在0.5秒实现一次翻转&#xff0c;而这里…

《Cross-Modal Dynamic Transfer Learning for Multimodal Emotion Recognition》

Multi-modal系列论文研读目录 文章目录 Multi-modal系列论文研读目录1.ABSTRACT2.INDEX TERMS3.INTRODUCTION4.RELATED WORKSA. MULTIMODAL EMOTION RECOGNITION 多模态情感识别1) CONVENTIONAL FUSION METHODS 常规融合方法2) TRANSFORMER-BASED FUSION METHODS 基于变压器的融…

Redis (常用数据结构和命令)

目录 简介 概述 特点 数据结构 常用命令 通用命令 keys del exists expire 与 ttl String 命令 SET 和GET: MSET和MGET INCR和INCRBY和DECY SETNX SETEX Redis 命令 Key 的层级结构 key层级关系 &#xff1a; Hash命令 HSET和HGET HMSET和HMGET HGETALL H…

MySQL练手 --- 1141. 查询近30天活跃用户数

题目链接&#xff1a;1141. 查询近30天活跃用户数 思路&#xff1a; 题目要求&#xff1a;统计截至 2019-07-27&#xff08;包含2019-07-27&#xff09;&#xff0c;近 30 天的每日活跃用户数&#xff08;当天只要有一条活动记录&#xff0c;即为活跃用户&#xff09; 要计算…

前端模块化CommonJS、AMD、CMD、ES6

在前端开发中&#xff0c;模块化是一种重要的代码组织方式&#xff0c;它有助于将复杂的代码拆分成可管理的小块&#xff0c;提高代码的可维护性和可重用性。CommonJS、AMD&#xff08;异步模块定义&#xff09;和CMD&#xff08;通用模块定义&#xff09;是三种不同的模块规范…

H3CNE(OSPF动态路由)

目录 7.1 静态路由的缺点与动态路由分类 7.1.1 静态路由的缺点 7.1.2 动态路由的分类 7.2 OSPF基础 7.2.1 OSPF的区域 ​编辑 7.2.2 Router-id 7.2.3 开销-Cost or Metric 7.2.4 路由转发 7.3 OSPF邻居表建立过程 7.3.1 五种包 7.3.2 建立邻居表的第一步 7.3.3 邻居建立…

数据结构与算法--顺序表(Java)

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约 ⏩收录专栏⏪&#xff1a;Java SE &#x1f921;往期回顾&#x1f921;&#xff1a;Java SE--基本数据类型&#xff08;详细讲解&#xff09; &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 什么…