news 2026/7/6 2:12:51

云运维学习笔记——第四周(shell编程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
云运维学习笔记——第四周(shell编程)

一、shell编程

1.shell是一个命令解释器,他为用户提供了一个向Linux内核发送请求以便于运行程序的界面系统程序,用户可以用shell启动、挂起、停止甚至是编写一些程序。

​​​​​​​ ​​​​​​​

2.shell脚本的执行方式

(1)脚本格式要求

1)脚本比#!/bin/bash要求

2)脚本需要有可执行的权限

(2)编写一个shell脚本,要求输出helloworld

#!/bin/bash echo "hello world"

(3)脚本的常用执行方式

1)方式1:输入脚本的绝对路径或相对路径

说明:首先要授予hello.sh脚本x权限,再执行脚本

2)方式2:sh+脚本

说明:不用赋予脚本x权限,直接执行

3.shell的变量

(1)shell变量的介绍

1)Linux shell这个变量分为系统变量和用户自定义变量

2)系统变量:$HOME、$PWD、$SHELL等等

3)显示当前shell中所有变量的命令:set

(2)shell变量的定义

基本语法

1)定义变量:变量名=值

2)撤销变量:unset 变量

3)声明静态变量:readonly 变量,注意:静态变量不能unset

快速入门:

#!/bin/bash #案例1:定义变量A A=100 echo "A=$A" #案例2:撤销变量A unset A echo "A=$A" #案例3:定义静态变量B readonly B=200 echo "B=$B" unset B echo "B=$B"

​​​​​​​

定义变量的规则

(1)变量名称可以由字母、数字、下划线组成,但是不能以数字开头,5A=200(❌️)

(2)等号两侧不能有空格

(3)变量名称一般大写

将命令的返回值赋给变量

(1)A=`date` 反引号,运行里面的命令,并把结果返回给A

(2)A=$(date)等价于反引号

二、设置环境变量

基本语法

1.exoprt 变量=变量值 (功能描述:将shell变量输出为环境变量/全局变量)

2.source 配置文件 (功能描述:将修改后的配置文件立即生效)

3.echo $变量名 (功能描述:查询环境变量的值)

快速入门

1.在/etc/profile 文件中定义TOMCAT_HOME环境变量

·

2.查看环境变量TOMCAT_HOME的值

3.在另一个shell程序中使用TOMCAT_HOME

注:在输出TOMCAT_HOME环境变量之前,需要让其生效

source /etc/profile

三、位置参数变量

1.介绍

当我执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置变量

2.基本语法

$n 功能描述:n为数字,$0代表命令本身,$1-9表示第一到第九参数,10以上的参数需要大括号包含,如${10}

$* 功能描述:这个变量代表命令行中所有的参数,$*吧所有的参数看做一个整体

$@ 功能描述:这个变量也代表命令行中的所有参数,不过$@把每个参数区分对待

S# 功能描述:这个变量代表命令行中所有参数的个数

3.案例:编写一个shell脚本,在脚本中获取到命令行各个参数信息

#!/bin/bash echo "参数1=$1" echo "参数2=$2" echo "参数3=$3" echo "参数4=$4" echo "参数个数=$#"

四、运算符

1.基本介绍

学习如何在shell中进行各种运算操作

2.基本语法

(1)"$((运算式))"或者expr m+n(注:expr代表expression表达式)

(2)注意expr运算式之间要有空格,如果希望expr的结果赋给某个变量,使用反引号``

(3)expr \*乘 /除 %取余

3.使用案例

(1)计算(2+3)×4

(2)请求出命令行的两个参数[整数]的和 20 50

#!/bin/bash #方式一 RUM1=$(((2+3)*4)) echo "rum1=$RUM1" #方式二 RUM3=`exprt $1 + $2` echo "rum3=$RUM3"

五、条件判断

1.判断语句

(1)基本语法:

[ condition ] (注意:condition前后要有空格)

#非空返回true,可使用$?验证(0为true,>1为false)

(2)应用实例

[ hspEdu ] 返回true

[ ] 返回false

[ condition ] && echo OK || echo notok 条件满足,执行后面的语句

(3)常用判断条件

1)=字符串比较

2)两个整数之间比较

-lt 小于 -le小于等于little equal -eq等于

-gt大于 -ge大于等于 -ne不等于

3)按照文件权限进行判断

-r有读的权限 -w有写的权限 -x有执行的权限

4)按照文件类型进行判断

-f文件存在并存在一个常规文件

-e文件存在

-d文件存在并是个目录

5)应用实例

案例1:“ok”是否等于“ok”

判断语句:=

案例2:23是否大于32

判断语句:-ge

案例3:/root/shcode/aaa.txt目录中的文件是否存在

#!/bin/bash #案例1:“ok”是否等于“ok” if [ "ok" = "ok" ] then echo "等于" fi #案例2:23是否大于22 if [ 23 -ge 32] then echo "大于" fi #案例3:/root/shcode/aaa.txt if [ -f /root/shcode/aaa.txt ] then echo "存在" fi

2.if 判断

基本语法

if [ 条件判断式 ] then 代码 fi 或者多分支 if [ 条件判断式 ] then 代码 elif [ 条件判断式 ] then 代码 fi (注意事项:[ 条件判断式 ],中括号和条件判断之间必须有空格)

应用实例:

请编写一个shell程序,如果输入的参数大于等于60,则输出“及格了”,反之输出“不及格”

#!/bin/bash if [ $1 -ge 60 ] then echo "及格了" elif [ $1 -lt 60 ] then echo "不及格" fi

3.case语法

基本语法

case $变量名 in "值1") #如果变量的值等于值1,则执行程序1 ;; "值2") #如果变量的值等于值2,则执行程序2 ;; *) #如果变量的值不等于以上,则执行此程序 ;; esac

应用实例testCase.sh

案例1:当命令行参数是1时,输出“周一”,是2时,就输出”周二”,其它情况输出“other”

#!/bin/bash case $1 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other" ;; esac

4.for循环

基本语法1:

for 变量 in 值1 值2 值3... do 程序 done

应用实例1:打印命令行输入的参数(这里可以看出$*和$@的区别)

#!/bin/bash #案例1:打印命令行输入的参数(这里可以看出$*和$@的区别) for i in "S*" do echo "num1=$*" done #&*,把输入的参数当做一个整体,所以只会输出一行 echo"===========================================" for i in "S@" do echo "num1=$@" done #&@,把输入的参数分别对待,所以只会输出多行

​​​​​​​

基本语法2:

for ((初始值;循环控制变量;变量变化)) do 程序 done

应用案例2:从1加到100的值输出结果

#!/bin/bash SUM=0 for ((i=1;i<=100:i++)) do echo SUM=$((SUM+i)) done echo "sum=$SUM"

5.while循环

基本语句

while [ 条件判断式 ] do 程序 done

注意:while和[]有空格,条件判断式和[]也有空格

应用实例:从命令行输入一个数n,统计1+...+n的值是多少

#!/bin/bash SUM=0 i=0 while [ "$i" -le "$1" ] do SUM=$((SUM+i)) i=$((i+1)) done echo "sum=$SUM"

六、read读取控制台输入

1.基本语法

read(选项)(参数) 选项: -p:指定读取值的提示符 -t:指定读取值时等待的时间(秒),如果没有指定的时间内输入,就不再等待了 参数: 变量:指定读取值的变量名

2.应用实例

#!/bin/bash #案例1:读取控制台输入一个NUM1值 read -p "请输入num1" NUM1 echo "num1=$NUM1" #案例2:读取控制台输入一个NUM2值,在10秒内输入。 read -t 10 -p "请输入num2" NUM2 echo "num2=$NUM2"

七、函数

1.函数介绍

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。系统函数种,介绍一下两个

2.系统函数

(1)basename基本语法

功能:返回完整路径最后/的部分,常用于获取文件名

basename [pathname] [suffix]

basename [string] [suffix]

功能描述:basename命令会删掉所有前缀包括最后一个‘/’字符,然后将字符串显示出来。pathname为路径,string为字符串

选项:

suffix为后缀,如果suffix被指定了,basename那么会将pathname或者string中的suffix去掉

(2)dirname基本语法

功能:返回路径最后/前面的部分。常用于返回路径部分

dirname 文件绝对路径

功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

3.自定义函数

基本语法:

function 函数名(){ 命令代码 } #调用直接写 函数名()

应用实例

#!/bin/bash #实例:计算输入两个参数的和(动态的获取),getSum function getSum(){ sum=$(($1+$2)) echo "sum=$sum" } read -p "输入数字1:" num1 read -p "输入数字2:" num2 getSum $num1 $num2

八、自动化备份脚本

备份/var/log目录,并自动清理 7 天前的备份文件。

#!/bin/bash # ==================== 配置区 ==================== BACKUP_SOURCE="/var/log" # 要备份的源目录 BACKUP_BASE="/backup" # 备份存放的根目录 RETENTION_DAYS=7 # 保留最近多少天 DATE=$(date +%Y%m%d) # 日期格式:20260705 BACKUP_NAME="log_backup_${DATE}" # 备份文件名 BACKUP_PATH="${BACKUP_BASE}/${BACKUP_NAME}" # 完整备份路径 LOG_FILE="${BACKUP_BASE}/backup.log" # 日志文件 # ============================================== # ==================== 主程序 ==================== # 1. 创建备份存放目录(如果不存在) mkdir -p "${BACKUP_BASE}" # 2. 执行备份(使用 tar 打包并压缩) echo "========================================" >> "${LOG_FILE}" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始备份 ${BACKUP_SOURCE}" >> "${LOG_FILE}" tar -czf "${BACKUP_PATH}.tar.gz" -C "${BACKUP_SOURCE}" . 2>/dev/null # 3. 检查备份是否成功 if [ $? -eq 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ 备份成功: ${BACKUP_PATH}.tar.gz" >> "${LOG_FILE}" else echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ 备份失败,请检查错误信息" >> "${LOG_FILE}" exit 1 fi # 4. 删除 7 天前的备份文件 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始清理 ${RETENTION_DAYS} 天前的备份..." >> "${LOG_FILE}" find "${BACKUP_BASE}" -name "log_backup_*.tar.gz" -mtime +${RETENTION_DAYS} -delete if [ $? -eq 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ 清理完成" >> "${LOG_FILE}" else echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ 清理过程中出现错误" >> "${LOG_FILE}" fi echo "========================================" >> "${LOG_FILE}" exit 0

公司放假三天,结果为了面试一下子休了6天,结果面试全部GG,也没有学习好,无奈……

希望接下来会有好结果吧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 2:11:56

呼和浩特定制网站还是模板建站?适配 GEO 优化的官网选型攻略

企业搭建官网时&#xff0c;最常纠结的问题就是&#xff1a;选便宜的模板建站&#xff0c;还是选价格更高的定制网站&#xff1f;在 AI 搜索普及的当下&#xff0c;这个问题有了新的评判标准 —— 网站是否适配 GEO 优化&#xff0c;能否成为 AI 搜索时代的品牌权威阵地。本文就…

作者头像 李华
网站建设 2026/7/6 2:10:21

Transformer 2017 原理解析:从 RNN 瓶颈到多头注意力 3 大核心优势

Transformer 2017 原理解析&#xff1a;从 RNN 瓶颈到多头注意力 3 大核心优势 2017年&#xff0c;一篇名为《Attention Is All You Need》的论文彻底改变了深度学习领域的格局。这篇论文提出的Transformer架构不仅颠覆了传统的序列建模方法&#xff0c;更为后续的大语言模型&a…

作者头像 李华
网站建设 2026/7/6 2:09:04

Dify 从入门到精通:低代码 AI 应用开发平台实战指南

&#x1f680; 30款热门AI模型一站整合&#xff0c;DeepSeek/GLM/Qwen 随心用&#xff0c;限时 5 折。 &#x1f449; 点击领海量免费额度 最近在尝试将 AI 能力集成到业务中时&#xff0c;你是否也遇到过这样的困境&#xff1a;想快速搭建一个智能客服或文档分析应用&#…

作者头像 李华
网站建设 2026/7/6 2:08:43

企业微信 JS-SDK 2.4.0 升级实战:从 wx.config 到 ww.register 的 3 步迁移

企业微信JS-SDK 2.4.0迁移实战&#xff1a;从wx.config到ww.register的完整指南企业微信JS-SDK 2.4.0版本带来了重大架构升级&#xff0c;其中最核心的变化是将原有的wx.config和wx.agentConfig接口统一整合为ww.register方法。这次升级不仅仅是简单的API替换&#xff0c;更代表…

作者头像 李华
网站建设 2026/7/6 2:08:27

微信/百度/阿里云OCR API 横向评测:驾驶证识别准确率与成本分析

微信/百度/阿里云OCR API横向评测&#xff1a;驾驶证识别准确率与成本分析在数字化转型浪潮中&#xff0c;证件识别已成为金融、出行、政务等领域的刚需。面对市场上主流的OCR服务商&#xff0c;如何选择最适合业务场景的解决方案&#xff1f;本文基于100张真实测试样本&#x…

作者头像 李华