当前位置: 首页 > news >正文

linux ubuntu的脚本知

目录

一、变量的引用

二、判断指定的文件是否存在

三、判断目录是否存在

四、判断最近一次命令执行是否成功

五、一些比较符号

六、"文件"的读取和写入

七、echo打印输出

八、ubuntu切换到root用户

N、其它可以参考的网址


脚本功能强大,用起来也方便得很。本文进行记录,方便以后自己查看

一、变量的引用

如下的脚本:

usbcont=$(lsusb | grep "1234:")
echo "usb content is $usbcont"
if [ "$usbcont" != "" ]
thenecho ok
elseecho "error"
fi

如果usb的列表中有“1234:”字符串时,usbcont的值为“Bus 004 Device 003: ID 1234:0a04”(以我的测试为例),否则它的值为空。以上可以正常打印,如果列出的usb列表中有“1234:”的字符串内容,则后面的if判断条件成立,就打印出 "ok",否则变量 usbcont 的内容是空的,打印出 "error"。开始一行也可以打印出 "usb content is Bus 004 Device 003: ID 1234:0a04"

如果改成如下的样子:

usbcont=$(lsusb | grep "1234:")
echo 'usbct is $usbcont'
if [ '$usbcont' != '' ]
thenecho ok
elseecho "error"
fi

即第2、3行的双引号改成单引号,则不能正常工作,就不能打印变量的值了,会把$usbcont当作字符串直接打印出来:usbct is $usbcont,后面的if比较就永远成立了,不管是否有“1234:”的usb列表内容都会打印出“ok”

这个情况在终端也是一样的:

第一次采用单引号,结果直接把 $usbcont 当作字符串打印了出来,第二次采用双引号打印出了变量 usbcont 的值

二、判断指定的文件是否存在

if [ ! -f /data/aa.txt ]
thentouch /data/aa.txt
fi

以上示例代码,如果文件 /data/aa.txt 不存在,则创建它。

if [ -f /data/aa.txt ]
thenrm -f /data/aa.txt
fi

以上示例代码,如果文件 /data/aa.txt 存在,则删除它

三、判断目录是否存在

if [ ! -d /data/bb ]
thenmkdir /data/bb
fi

如果目录 /data/bb 不存在,则创建它。

if [ -d /data/bb ]
thencd /data/bbmkdir conftouch aa.txt
fi

以上示例代码,如果目录 /data/bb 存在,则进入到 /data/bb,然后创建目录conf和文件 aa.txt

四、判断最近一次命令执行是否成功

mount /dev/mmcblk1p1 /mnt/sd
if [ $? -ne 0 ]
thenecho Error
elseecho Ok
fi

$? 表示最近一次的命令执行结果,通常执行成功为0,其它为失败,上面示例代码中,如果mount成功,则打印出 Ok,否则打印出 Error 字符串。

如果要卸载tf卡,则:

umount /mnt/sd

这样,再 ls /mnt/sd 时,结果就是空的了。

挂载tf卡时,如果不知道其原本的节点,可以通过命令来查询:

fdisk -l

我的结果如下所示:

最下面的 /dev/mmcblk1p1 就是tf卡的分区节点名称了:

mount /dev/mmcblk1p1 /mnt/sd

注意,这个是要挂载一个分区而不是上面的整个tf卡节点 /dev/mmcblk1,下面的示例:

mount /dev/mmcblk1 /mnt/sd

提示如下错误:

mount: /mnt/sd: wrong fs type, bad option, bad superblock on /dev/mmcblk1, missing codepage or helper program, or other error.

五、一些比较符号


-ne :不等于,上述第四节的示例代码表示最后一次的执行结果如果不等0,就走第一个分支,打印 Error
-eq :等于
-gt :大于
-ge:大于等于
-lt  :小于
-le :小于等于

以上用于数字的比较,字符串则用普通c语言的方式:

if [ $a == $b ]        #如果a等于b,则条件成立
if [ $a1 != $b2 ]      #如果a不等于b,则条件成立
if [ -n $a ]           #如果a 非空,则条件成立
if [ -z $a ]           #如果a 为空,则条件成立
if [ $a ]              #如果a 非空,则条件成立

需要注意的是,[] 的内外都要加空格,比如 if [ $a == $b ] 是正确的,而 if [$a == $b] 是不正确的

如果有多个条件,可以进行连接:

if [ $a ] && [ $a == $b ]      #如果a不为空,而且a和b一样,则条件成立
if [ -z $a ] || [ $a != $b ]   #如果a为空,或者a和b不一样,则条件成立

可以通过 ! 符号来反方向判断:

if [ ! $a == $b ]        #如果a和b不相等,则条件成立
if [ -d /data/bb ]       #如果目录 /data/bb 存在,则条件成立
if [ ! -d /data/bb ]     #如果目录 /data/bb 不存在,则条件成立

六、"文件"的读取和写入

这里的“文件”是个代指,它可以是一个实际的文件,也可以是一个管脚,或者是一个“设备”。

读取一个gpio管脚的值,并赋给一个变量:

gpio_val=$(cat /sys/class/gpio/gpio123/value)

这里用cat显示它的值,然后用符号$来使它可以被引用,这个赋值方式和第一节中的完全一样,只是命令不一样罢了。如果要向它写入一个值就比较简单了:

echo 1 > /sys/class/gpio/gpio123/value

通过echo命令,可以方便地向任何“文件”写入内容,上述示例中向gpio123管脚写入了“1”。对于不同的“文件”,其允许接受的写入内容是不一样的,如果是普通文件,则可以写入任何内容,如果是特殊的“文件”,就比如上述的gpio管脚,可以写入“0”、“1”,但如果要写入“abcd”,那必定是失败的

如果要显示一个文件的内容,则:

cat /data/config.txt                                # 输出文件 /data/config.txt 的内容

cat /sys/class/gpio/gpio123/value        # 显示gpio123管脚当前的值

echo /sys/class/gpio/gpio123/value     # 打印:/sys/class/gpio/gpio123/value

echo cat /sys/class/gpio/gpio123/value # 打印:cat /sys/class/gpio/gpio123/value

echo $(cat /sys/class/gpio/gpio123/value) # 打印:1

由于脚本中是直接执行命令的:

cd /data

mkdir aa

/mnt/sd/test.sh

/sys/class/gpio/gpio123/value   # bash: /sys/class/gpio/gpio123/value: command not found

所以,如果要把一个gpio管脚的值赋给一个变量,就不能是这样的:

gpio_val=/sys/class/gpio/gpio123/value

这样赋值之后,gpio_val的值是“/sys/class/gpio/gpio123/value”

七、echo打印输出

echo的打印输出很方便,可以有不同的形式:

a=1234

b="1234"

c='1234'

echo abc is a string                #打印:abc is a string

echo "abc is a string"             #打印:abc is a string

echo 'abc is a string'               #打印:abc is a string

echo "a=$a, b=$b, c=$c"        # 打印:a=1234, b=1234, c=1234

echo 'a=$a, b=$b, c=$c'         # 打印:a=$a, b=$b, c=$c
echo "a="$a, "b="$b, "c="$c   # 打印:a=1234, b=1234, c=1234

echo a="$a", b="$b", c="$c"   # 打印:a=1234, b=1234, c=1234

echo a=$a, b=$b, c=$c           # 打印:a=1234, b=1234, c=1234

echo a=$(a)                            # bash输出:bash: a: command not found,然后打印:a=

echo $a                                   # 打印:1234

根据实验表明,变量不能放在括号内:$(a),这样就不行,()内必需是相关的命令才行,所以对于第一节的示例来说:

usbcont=$(lsusb | grep "1234:")
echo "usb content is $usbcont"

是可以正常打印的,如果把第一行分开:

usb_all=$(lsusb)
usbcont=$($usb_all | grep "1234:")
echo "usb content is $usbcont"

则提示:bash: Bus: command not found

八、ubuntu切换到root用户

一般情况下,都是用普通用户登录进行操作的,如果有些操作需要root用户权限,可以通过命令前加 sudo 来临时提升权限

user@ubuntu# sudo mount /dev/mmcblk1p1 /mnt/sd

此时通常是需要输入当前用户的密码。

在有些情况下,希望直接以root用户来操作,可以通过如果方式切换到root:

user@ubuntu# sudo -S su

然后输入当前用户密码切换成功:

root@ubuntu#

N、其它可以参考的网址


shell 脚本中的 '-f' 和 '-d' 是什么意思_linux shell_脚本之家
LINUX Shell命令中$0、$1-9、$#、$?、$*、$@、$!、$、$-、$IFS含义及举例 - 寻梦99 - 博客园
linux——shell脚本中关于$和特殊变量的使用细节 - moutory - 博客园
shell变量及赋值_shell变量赋值-CSDN博客

Ubunt网卡命名enp1s0的说明
 

相关文章:

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大,用起来也…...

HTTP有哪些风险?是怎么解决的?

一、风险 HTTP是通过明文传输的,存在窃听风险、篡改风险以及冒充风险。 二、如何解决 HTTPS在HTTP的下层加了一个SSL/TLS层,保证了安全,通过混合加密解决窃听风险、数字签名解决篡改风险、数字证书解决冒充风险。 (1&#xff0…...

3.12MayBeSomeLinearAlgebra

X是M*(D1),XT为(D1)*M Ω是一行D1列,X乘以欧米噶是M行D1列 行是说样本个数,列是特征数量 如果是小样本,那么可能会出现特征数量大于样本个数 如果MD*DM就是M*M,...

学习日志015--python单链表

创建 class Node:def __init__(self,data):# 数据域self.data data# 链接域self.next Noneclass LinkList:def __init__(self,):# 初始化头节点self.head None# 记录链表的长度self.size 0 增加 #头插def insert_head(self,value):# 创建新节点node Node(value)q self…...

如何在Windows右键新建菜单中添加自定义项

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\.py] "Python.File"[HKEY_CLASSES_ROOT\.py\ShellNew] "NullFile"""[HKEY_CLASSES_ROOT\Python.File] "FriendlyTypeName""文本.py"[HKEY_CLASSES_ROOT\Python.Fil…...

Spring Boot 3.0废弃了JavaEE,改用了Jakarta EE

Spring Boot 3.0废弃了JavaEE,改用了Jakarta EE 历史背景 javax变成Jakarta的主要原因是因为Java EE项目从Oracle转移到了Eclipse Foundation,并改名为Jakarta EE。 JavaEE是从Java 1.2版本开始推出的Java企业级开发平台,最初的名称是J2EE(J…...

pdf文档动态插入文字水印,45度角,旋转倾斜,位于文档中央,多行水印可插入中文

一行水印 /*** param inputFile 你的PDF文件地址* param outputFile 添加水印后生成PDF存放的地址* param waterMarkName 你的水印* return*/public static boolean waterMark(String inputFile,String outputFile, String waterMarkName){try {PdfReader reader new PdfRead…...

[ 渗透测试面试篇-2 ] 针对大规模资产的攻击思路

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

深入解析 Web 应用中的 CHIPS(Partitioned Cookie Attribute)

深入解析 Web 应用中的 CHIPS(Partitioned Cookie Attribute) 最新发现flask3.1.0 的版本引入了新的特性:对CHIPS的支持。不少同学对这个可能有点陌生,本文带大家了解一下。 为了在隐私保护和功能需求之间取得平衡,Goo…...

从搭建uni-app+vue3工程开始

技术栈 uni-app、vue3、typescript、vite、sass、uview-plus、pinia 一、项目搭建 1、创建以 typescript 开发的工程 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project2、安装sass npm install -D sass// 安装sass-loader,注意需要版本10,…...

归并排序与逆序对问题(C语言版)

一、引言 归并排序是一种高效且稳定的排序方法,而逆序对问题是算法领域的一个经典问题,本文教大家如何实现归并排序,以及如何使用归并排序去结果逆序对问题 二、归并排序 归并排序思想 分解:将待排序的数组分成两半&#xff0c…...

网络爬虫总结与未来方向

通过深入学习和实际操作,网络爬虫技术从基础到进阶得以系统掌握。本节将全面总结关键内容,并结合前沿技术趋势与最新资料,为开发者提供实用性强的深度思考和方案建议。 1. 网络爬虫技术发展趋势 1.1 趋势一:高性能分布式爬虫 随…...

C++ 核心数据结构:Stack 与 Queue 类深度解析

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 目录 💯前言 💯Stack 类 (一)Stack 类的概念与特点 (二&#x…...

Python枚举类详解:用enum模块高效管理常量数据

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 在编程中,常量的管理是一个关键环节,合理的管理常量可以提高代码的可读性和可维护性。Python的enum模块提供了一种有效的方式来组织常量数据,通过枚举类(Enum)将相关的常量值集合在一起,使代码更具结…...

企业OA管理系统:Spring Boot技术深度探索

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

汽车免拆诊断案例 | 2012款路虎揽胜运动版柴油车加速无力

故障现象  一辆2012款路虎揽胜运动版车,搭载3.0T柴油发动机(型号为306DT),累计行驶里程约为10.2万km。车主进厂反映,车辆行驶中加速无力,且发动机故障灯异常点亮。 故障诊断 接车后试车,发动…...

uniapp接入高德地图

下面代码兼容安卓APP和H5 高德地图官网:我的应用 | 高德控制台 ,绑定服务选择《Web端(JS API)》 /utils/map.js 需要设置你自己的key和安全密钥 export function myAMap() {return new Promise(function(resolve, reject) {if (typeof window.onLoadM…...

(UI自动化测试)web自动化测试

web自动化测试 UI自动化测试介绍 自动化测试理论: 图片上的文字等等不能做测试,只能发现固定的bug 工具选择及介绍 浏览器驱动:找元素--核心:驱动(操作元素)--通过代码...

【es6进阶】如何使用Proxy实现自己的观察者模式

观察者模式(Observer mode)指的是函数自动观察数据对象,一旦对象有变化,函数就会自动执行。这里,我们是使用es6的proxy及reflect来实现这个效果。 实现效果 业务分析 源数据 const object2 {name: "张三"…...

住宅IP怎么在指纹浏览器设置运营矩阵账号

矩阵账号的运营已经成为了许多企业和个人推广策略中的重要一环。通过构建和管理多个社交媒体或电商平台的账号,可以有效地扩大品牌影响力,提高市场覆盖率。然而,随着平台对账号关联的限制越来越严格,如何安全、有效地运营这些矩阵…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...

英国云服务器上安装宝塔面板(BT Panel)

在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...