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的说明
 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++(进阶) 第1章 继承

C(进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的(3种继承方式)继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…

Load-Balanced-Online-OJ(负载均衡式在线OJ)

负载均衡式在线OJ 前言1. 项目介绍2. 所用技术与环境所用技术栈开发环境 3. 项目宏观结构3.1 项目核心模块3.2 项目的宏观结构 4. comm公共模块4.1 日志(log.hpp )4.1.1 日志主要内容4.1.2 日志使用方式4.1.2 日志代码 4.2 工具(util.hpp&…

c++->内部类 匿名对象

内部类&#xff1a;&#xff08;例如&#xff1a;b定义在a类中&#xff09; 注意事项&#xff1a; &#xff08;1&#xff09;内部类b可以直接使用外部类的static变量&#xff0c;但是并不属于外部类的友元&#xff01;&#xff01;&#xff01;&#xff01; #include <s…

C++ std::unique_ptr的使用及源码分析

目录 1.简介 2.使用方法 2.1.创建 unique_ptr 2.2.删除对象 2.3.转移所有权 2.4.自定义删除器 2.5.从函数返回 std::unique_ptr 2.6.将 std::unique_ptr 作为函数参数 3.适用场景 4.与原始指针的区别 5.优缺点 6.源码分析 6.1.构造函数 6.2.存储分析 6.3.默认删…

系统思考—关键决策

最近听到一句话特别扎心&#xff1a;“不是环境毁了企业&#xff0c;而是企业误判了环境。” 在大环境变化面前&#xff0c;很多企业的反应是快速调整&#xff0c;但这真的有效吗&#xff1f;其实&#xff0c;太快的动作&#xff0c;往往是误判的开始。 环境变化带来压力&…

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

ES八股相关知识

为什么要使用ElasticSearch&#xff1f;和传统关系数据库&#xff08;如 MySQL&#xff09;有什么不同&#xff1f; 典型回答 数据模型 Elasticsearch 是基于文档的搜索引擎&#xff0c;它使用 JSON 文档来存储数据。在 Elasticsearch 中&#xff0c;相关的数据通常存储在同…

局域网与广域网:探索网络的规模与奥秘(3/10)

一、局域网的特点 局域网覆盖有限的地理范围&#xff0c;通常在几公里以内&#xff0c;具有实现资源共享、服务共享、维护简单、组网开销低等特点&#xff0c;主要传输介质为双绞线&#xff0c;并使用少量的光纤。 局域网一般是方圆几千米以内的区域网络&#xff0c;其特点丰富…

EMD-KPCA-Transformer多变量回归预测!分解+降维+预测!多重创新!直接写核心!

EMD-KPCA-Transformer多变量回归预测&#xff01;分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01; 目录 EMD-KPCA-Transformer多变量回归预测&#xff01;分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;效果一览基本介绍程序设计参…

编程之路,从0开始:文件操作(2)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 今天我们来继续学习C语言的文件操作。 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;编程之路 持续更新高质量内容&#xff0c;欢迎点赞、关注&…

mybatis学习(三)

声明&#xff1a;该内容来源于动力节点&#xff0c;本人在学习mybatis过程中参考该内容&#xff0c;并自己做了部分笔记&#xff0c;但个人觉得本人做的笔记不如动力节点做的好&#xff0c;故使用动力节点的笔记作为后续mybatis的复习。 六、在WEB中应用MyBatis&#xff08;使…

ES6 模块化语法

目录 ES6 模块化语法 分别暴露 统一暴露 ​编辑 默认暴露 ES6 模块化引入方式 ES6 模块化语法 模块功能主要由两个命令构成&#xff1a;export 和 import。 ⚫ export 命令用于规定模块的对外接口&#xff08;哪些数据需要暴露&#xff0c;就在数据前面加上关键字即可…

【Spring boot】微服务项目的搭建整合swagger的fastdfs和demo的编写

文章目录 1. 微服务项目搭建2. 整合 Swagger 信息3. 部署 fastdfsFastDFS安装环境安装开始图片测试FastDFS和nginx整合在Storage上安装nginxnginx安装不成功排查:4. springboot 整合 fastdfs 的demodemo编写1. 微服务项目搭建 版本总结: spring boot: 2.6.13springfox-boot…

无线电磁波在自由空间的衰减

自由空间损耗&#xff0c;指的是电磁波在空气中传播时候的能量损耗&#xff0c;电磁波在穿透任何介质的时候都会有损耗。在传输路径上的损耗&#xff0c;即为路径损耗。 自由空间路径损耗&#xff08;Free Space Path Loss&#xff09;的基本公式&#xff1a; 简化的自由空间损…

UE5实现可销毁对象的淡化销毁

进入对象材质 设置 的不透明蒙版 不透明蒙版见 UE材质不透明蒙版选项-CSDN博客 默认混合模式(不透明)下无法进行设置&#xff0c;将混合模式修改为 混合模式见 UE5材质混合模式-CSDN博客 新添加Texture sample节点 关于Texture sample&#xff1a;UE5材质Texture Sample …

【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理

1.准备一个U盘或者SD卡&#xff08;插上读卡器&#xff09;&#xff0c;将U盘插入主机电脑&#xff0c;右键点击属性&#xff0c;查看U盘的文件系统确保是FAT32格式 2.右键单击ubuntu右下角图标&#xff0c;将U盘与虚拟机连接 参考链接 3. Ubuntu磁盘文件&#xff1a;/dev/s…

文件的处理(c语言)

首先了解下文件的作用 文件可以把数据直接放在电脑的硬盘上&#xff0c;实现了数据的持久化 什么是文件 文件就是磁盘上的文件。在程序设计中&#xff0c;文件通常有俩种&#xff0c;一种是程序文件&#xff0c;另一种是数据文件&#xff08;这是从文件功能来分类的&#xff…

shell编程之awk

awk 是 Linux 以及 UNIX 环境中现有的功能最强大的数据处理工具。简单地讲&#xff0c; awk 是一种处理文本数据的编程语言。awk 的设计使得它非常适合于处理由行和列组成的文本数据。而在 Linux 或者 UNIX 环境中&#xff0c;这种类型的数据是非常普遍的。 除此之外&#xff…

数据库-基础理论

文章目录 前言一、ORM框架二、ACID原则三、事务Transaction四、N1问题五、Normalization三范式六、FMEA方法论&#xff08;Failure Mode and Effects Analysis&#xff09;七、Profiling和PerformanceSchema查询分析 前言 基础理论 ORM框架、ACID原则、事务Transaction、N1问…

用 Python 从零开始创建神经网络(九):反向传播(Backpropagation)

反向传播&#xff08;Backpropagation&#xff09; 引言1. 分类交叉熵损失导数&#xff08;Categorical Cross-Entropy loss derivative&#xff09;2. 分类交叉熵损失导数 - 代码实现3. Softmax激活函数导数&#xff08;Softmax activation derivative&#xff09;4. Softmax激…