Bash Scripts ---part2

本文介绍了Bash脚本的基础知识,包括位置参数的使用、条件判断、控制流结构如if语句、case语句及环境变量等。通过具体示例展示了如何在脚本中进行条件判断、文件操作和用户交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bash脚本条件判断和控制流结构

1.Bash位置参数

两种简单的方法可以将用户输入读入bash中的变量

1)使用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量:
交互式输入

# read -p 'Enter your first and last name: ' FIRST LAST

脚本示例:显示主机所有可用的网络接口,交互输入名称后显示ip


2)使用位置参数来读取传递给脚本的命令行参数或选项输入。

各种特殊变量存储传递的选项编号
Bash解析的个别参数或整个原始命令行。
a.指定的位置参数总数:$#
b.位置参数自身:$0、$1、$2、$3....
c.所有位置参数: $@、$*

示例:利用位置参数


2.退出状态
Linux命令完成时,将返回退出状态。成功完成程序时,将返回0的推出状态。这被bash
当作逻辑True值。非零退出状态通常表示发生了错误,并且被bash当作逻辑False值。

grep的退出状态的含义:
0 – 在指定的文件中找到了模式
1 – 在指定的文件中未找到模式
>1 – 一些其他错误(无法打开文件、错误的搜索表达式等)
退出状态的值被存储在"?"中,可以使用以下命令查看:
# echo $?

示例:执行此脚本后退出状态变为255

3.test条件判断
test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式
为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语
法,使用方括号"[]"将表达式括起来,这样更易于阅读。

语法:test EXPRESSION 或 [EXPRESSION]
非零或零长度字符串运算符:test -{n|z} STRING

字符串比较运算符:=、!=

数字比较运算符:-eq、-ne、-lt、-le、-gt、-ge

文件状态运算符:test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY


注:-e 文件存在,-b 块设备,-c 字节文件,-f 文件,-d 目录,-w 可写,-s 套接字,-L 链接设备


二进制文件运算符:-ef、-nt、-ot


逻辑运算符:-o、-a、!、&&、||
[root@server0 bin]# [ 2 -gt 1 -a 1 -gt 2 ]; echo $?
1
[root@server0 bin]# [ 2 -gt 1 -o 1 -gt 2 ]; echo $?
0
[root@server0 bin]# [ ! 2 -gt 1 ]; echo $?
1

脚本示例:判断文件是否存在


4.if语句
if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then
之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之
间的命令列表(反向平写if,标记if块的结束)。
语法:if command; then command; command2; else command3; fi

脚本示例:if语句判断文件类型

脚本示例:创建文件中的用户,并设置密码为westos,已经存在的用户不做任何操作


5.case语句
case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪
部分代码。

脚本示例:对文件中用户的创建和删除

6.expect语句
在shell中利用expect实现自动应答脚本。

#!/usr/bin/expect
这一行告诉操作系统脚本里的代码使用那一个shell来执行。
set timeout 10
设置后面所有的expect命令的等待响应的超时时间,单位为秒。
spawn talk
spawn是expect的内部命令,作用是给后面的shell指令加个壳,用来传递交互指令。
expect "who"
判断上次输出结果里是否包含“who”的字符串,如果有则立即返回,否则等待超时时间后返回。
send "westos\n"
执行交互动作,相当于手工输入"westos"。
expect eof
作用是在输出中搜索文件结束符,如果没有这一行,脚本会立即退出,得不到正确结果。
interact
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录。
$argv 参数数组
expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第
一个,第二个,第三个....参数。


脚本示例:应答回复.sh脚本的问题

编辑ask.sh脚本

下载软件,查看执行的shell

编写应答脚本answer.expect

执行脚本显示

***也可不用交互输入答案,一次输出显示


脚本示例:自动连接登录其他主机

改进:以前登录过的主机,不回答是否建立连接问题


7.环境变量
shell和脚本使用变量来存储数据 ,有些变量可以连同它们的内容传递给子进程,这些
变量我们称之为环境变量

[root@server0 ~]# LINUX=redhat
[root@server0 ~]# echo $LINUX
redhat

***使用env命令显示所有环境变量

***使用set命令现实所有本地定义的shell变量



Bash启动脚本
在用户登录的时候,会运行全局变量文件/etc/profile,和用户自定义变量文件
~/.bash_profile去初始化它们的环境变量。


1)使用别名
alias命令可以用来自定义属于自己的系统命令,写入~/.bashrc 文件永久生效。

查看别名:


设置别名:

别名生效:


删除别名:



2)使用函数

脚本示例:使用函数ACTION ()完成文件中用户的建立和删除




脚本示例:

编辑文件/mnt/host  :(主机ip+密码)

实现自动连接文件中主机,并显示主机名称



脚本示例:

判断给出的主机网络状态

脚本示例:

判断所给两数字之和是否小于10,输出相应的结果

脚本示例:

while-done 实现对文件类型的判断


脚本示例:

if-else嵌套语句实现文件用户的建立和删除




基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值