Linux嵌入式学习之Ubuntu入门(六)shell脚本详解

系列文章内容

Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍

Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等

Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

Linux嵌入式学习之Ubuntu入门(四)Makefile

Linux嵌入式学习之Ubuntu入门(五)汇编语法学习

Linux嵌入式学习之Ubuntu入门(六)shell脚本详解


文章目录

  • 系列文章内容
  • 前言
  • shell脚本详解
    • shell脚本语法
      • 外部输入
      • 整型计算
      • test命令
      • [ ]判断符
    • 默认变量
    • 条件判断
    • 函数
    • 循环


前言

最近痛定思痛,觉得自己应该硬杠Linux,确实有些难度,但是我觉得学习之后一定会大有用处,而且我不希望局限在当下的情况,学习完嵌入式Linux之后,我想学习制作一些更加有难度,更加锻炼人的东西。

内容有些多,我觉得最好是过一遍,好好记录一下,一些开发最好把暂时用不到的模块跳过,时间不够。


shell脚本详解

shell脚本类似windows的批处理文件,将连续可执行命令写成一个文件,提供数组、循环、条件判断的等功能,shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

shell脚本是纯文本文件,命令从上而下,一行一行执行,扩展名为.sh

在这里插入图片描述
第一行一定为:(表示使用bash,表示实现shell的环境路径)

#!/bin/bash

在这里插入图片描述
例如将echo命令写在文件中,在命令窗输出字符串
在这里插入图片描述
如上图所示,通过 ls -l 查看tesh.sh文件的权限,之后通过chmod(change mode)修改文件的权限,之后即可运行,但是修改回去后发现,只有读写是不能执行的。

关于文件权限相关见:Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

详细学习linux的shell脚本推荐《鸟哥的Linux私房菜》

shell脚本语法

外部输入

程序功能:外部输入进行变量赋值
这就涉及到shell的命令编写语法了,需要学习积累
在这里插入图片描述
read命令读取输入值,类比C语言的各种函数吧

read命令参数含义
read -a arrayname把单词清单读入arrayname的数组里
read -p “text”打印提示(text),等待输入,并将输入存储在REPLY中。
read -r line允许输入包含反斜杠。
read -t 3指定读取等待时间为3秒。
read -n 2 var从输入中读取两个字符并存入变量var,不需要按回车读取。
read -d " :" var用定界符“ :”结束输入行。

整型计算

程序功能:输入两个整型完成加法运算:
在这里插入图片描述
shell还支持整型运算,数值计算用 $(表达式),如上图

test命令

程序功能:查看文件是否存在:
在这里插入图片描述
程序功能:测试输入字符串是否相等:
在这里插入图片描述

test命令参数含义
-e当路径存在时返回真
-f当路径存在且为文件时返回真
-d当路径存在且为文件夹时返回真
-z当str为空时返回真
-n当str为非空时返回真
=两个字符串相等时返回真
==两个字符串相等时返回真,同=
!=两个字符串不相等时返回真

还有大于小于,各种逻辑运算符的参数,之后用到了再积累

[ ]判断符

程序功能:判断字符串相等。
【】前后要有空格,同时记得变量加上双引号,可以用==或者!=
在这里插入图片描述
如果不加双引号,那么这个变量就不可赋值带空格的字符串,因为系统会识别为多个变量。发送错误提示:

在这里插入图片描述
在这里插入图片描述
first赋值为a,系统输出1,first赋值”1 2“,系统会识别为两个变量,这样就不是判断字符串相等

默认变量

程序功能:测试各个默认变量的作用
在这里插入图片描述
在这里插入图片描述
0 0~ 0 n,表示shell脚本的参数,shlle脚本命令本身为$0
$#:#表示最后一个参数的标号。(参数的个数)
$@:表$1、$2、$3…即所有的参数的集合

条件判断

程序功能:判断输入为Y或者N,并输出语句 在这里插入图片描述
格式:

/第一种
if  条件判断 ; then//判断成立要做的事情
fi/第二种
if条件判断 ; then//条件判断成立要做的事情
else//条件判断不成立要做的事情。
fi/第三种
if  条件判断 ; then//条件判断成立要做的事情
elif [条件判断]; then    //可以叠加多个elif
//条件判断成立要做的事情
else//条件判断不成立要做的事情。
fi

程序功能:*这里代表的是通配符,表示所有符号,如果输入参数为a或者b,会输出语句,其他输入都进入通配符的程序块
在这里插入图片描述

//类似C的switch case语句
case $变量 in
“第1个变量内容”)程序段;;	//表示该程序块结束!!
“第2个变量内容”)程序段;;
“第n个变量内容”)程序段;;
esac

函数

在这里插入图片描述
在这里插入图片描述

function fname () {//函数代码段
}

还支持传参:a b在这里是传递的参数,也就是C语言里面的实参
在这里插入图片描述
在这里插入图片描述

循环

while循环:
在这里插入图片描述
在这里插入图片描述

while [条件] 	//括号内的状态是判断式
do			//循环开始//循环代码段
done//还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:
until [条件]
do
//循环代码段
done

for循环:
在这里插入图片描述
在这里插入图片描述

for var in con1 con2 con3……
do
//循环代码段
donefor循环数值处理,写法
for((初始值; 限制值; 执行步长))
do
//循环代码段
done

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

获取url后面的参数

方式一 final String queryString request.getQueryString(); System.out.println(queryString); //解码 System.out.println(URLDecoder.decode(queryString, StandardCharsets.UTF_8));测试: pageSize25&pageNum1&sort%5B%27id%27%5Ddesc&sort%5B%…

Java 基于 SpringBoot 的学生考勤系统

1 简介 本文讲解的是 Java基于 SpringBoot 的学生考勤系统。学生考勤管理系统能做到的不仅是大大简化管理员的信息管理工作,在提高学生考勤管理效率的同时还能缩减开支,更能在数字化的平面网络上将学生考勤管理最好的一面展示给客户和潜在客户&#xff…

swift加载h5页面空白

swift加载h5页面空白 problem 背景 xcode swift 项目,WebView方式加载h5页面本地h5地址是:http://localhost:5173/ 浏览器打开正常 Swift 加载h5: 百度官网 加载正常本地h5页面 加载空白,没有报错 override func viewDidLoad…

Netron【.pt转.torchscript模型展示】

Netron是一个模型的展示工具,它有网页版和app版: 网页版:Netron app版:GitHub - lutzroeder/netron: Visualizer for neural network, deep learning, and machine learning models 直接用网页版吧,还不用安装。 它可…

安装NodeJS并使用yarn下载前端依赖

文章目录 1、安装NodeJS1.1 下载NodeJS安装包1.2 解压并配置NodeJS1.3 验证是否安装成功2、使用yarn下载前端依赖2.1 安装yarn2.2 使用yarn下载前端依赖参考目标:在Windows下安装新版NodeJS,并使用yarn下载前端依赖,实现运行前端项目。 1、安装NodeJS 1.1 下载NodeJS安装包…

Nginx之Openresty缓存解读

目录 lua_shared_dict lua-resty-lrucache 新建 设置 获取 删除 综合使用案例 计数 全部刷新 lua_shared_dict 语法&#xff1a; lua_shared_dict <名称> <大小> 默认值&#xff1a; 否 上下文&#xff1a; http 阶段&#xff1a; 取决于使用情况 声明一…

带你10分钟学会红黑树

前言&#xff1a; 我们都知道二叉搜索树&#xff0c;是一种不错的用于搜索的数据结构&#xff0c;如果二叉搜索树越接近完全二叉树&#xff0c;那么它的效率就会也高&#xff0c;但是它也存在的致命的缺陷&#xff0c;在最坏的情况下&#xff0c;二叉搜索树会退化成为单链表&am…

字典与数组第七讲:工作表数据计算时为什么要采用数组公式(一)

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

java数据库连接操作合集

import com.alibaba.druid.pool.DruidDataSourceFactory; import org.testng.annotations.Test;import javax.sql.DataSource; import java.io.FileInputStream; import java.sql.*; import java.util.ArrayList; import java.util.Properties; //大概的流程就是:1. 注册驱动 2…

谷歌地球引擎GEE账户注册的快速、百分百成功方法

本文介绍免费注册谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;账户的方便、快捷的最新方法&#xff1b;基于这一方法&#xff0c;只要我们创建一个谷歌Cloud Project&#xff0c;就可以直接访问GEE。 GEE在原本&#xff08;大概前几年的时候&#…

Redis-缓存穿透,缓存击穿,缓存雪崩

缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩 缓存穿透处理方案解决方案1 缓存空数据解决方案2 布隆过滤器 缓存击穿处理方案解决方案 1 互斥锁解决方案2 逻辑过期 缓存雪崩处理方案解决方案 1 给不同的key的过期时间设置添加一个随机值&#xff0c;降低同一个时段大量ke…

处理机调度的概念,层次联系以及七状态模型

1.基本概念 当有一堆任务要处理&#xff0c;但由于资源有限&#xff0c;这些事情没法同时处理。 这就需要确定某种规则来决定处理这些任务的顺序&#xff0c;这就是“调度”研究的问题。 2. 三个层次 1.高级调度&#xff08;作业调度&#xff09; 高级调度&#xff08;作业…

hive数据load到redis

使用shell脚本来实现&#xff0c;脚本如下&#xff1a; #!/bin/bash# 定义变量 pwd/root day$(date %Y%m%d) before_day$(date -d -1day %Y%m%d) log_file$pwd/load_redis_$day.log# 创建目录 mkdir -p $pwd/$day && echo "$(date %Y-%m-%d %H:%M:%S)----$pwd/$d…

【c++11特性】——static_cast,dynamic_cast,const_cast,reinterpret_cast解析

目录 1.static_cast 2.dynamic_cast dynamic_cast为什么只能用于具有虚函数的类&#xff1f; 3.const_cast 4.reinterpret_cast reinterpret_cast 的作用 static_cast 和dynamic_cast的区别&#xff1f; 1.static_cast 概念 static_cast 是C中的一种类型转换运算符&am…

【C++设计模式之模板模式】分析及示例

C之模板模式 描述实现原理示例步骤1步骤1 分析步骤2步骤2 分析调用输出结果 结论 描述 模板模式&#xff08;Template Pattern&#xff09;是设计模式中的一种行为型模式。 该模式定义一个操作中的算法骨架&#xff0c;而将具体的算法实现延迟到子类中。 模板模式使得子类可以…

【10】c++设计模式——>依赖倒转原则

关于依赖倒转原则&#xff0c;对应的是两条非常抽象的描述&#xff1a; 1.高层模块不应该依赖低层模块&#xff0c;两个都应该依赖抽象。 2.抽象不应该依赖细节&#xff0c;细节应该依赖抽象。 先用人话解释一下这两句话中的一些抽象概念&#xff1a; 1.高层模块&#xff1a;可…

ROS(5)PX4仿真安装及运行

1、配置&#xff0c;提升下载速度 启动 $ cd clash-for-linux$ sudo bash start.sh$ source /etc/profile.d/clash.sh$ proxy_on 关闭 $ cd clash-for-linux$ sudo bash shutdown.sh$ proxy_off 2、安装PX4开源无人机 git clone https://github.com/PX4/PX4-Autopilot.git…

【软考】系统集成项目管理工程师(六)项目整体管理【6分】

一、 前言 1、项目管理三从四得 2、ITO共性总结 1、上一个过程的输出大部分是下-个过程的输入 2、计划和文件是不一样的 (每个输入都有计划和文件) 3、被批准的变更请求约等于计划 4、在执行和监控过程产生新的变更请求(变更请求包括变什么和怎么变&#xff0c;这是变更请求和…

Spring三大核心组件

Spring架构图 Spring三大核心组件分别为&#xff1a;Core、Beans和Context 1. Core&#xff08;核心&#xff09;&#xff1a; 思想&#xff1a;Core组件的核心思想是控制反转&#xff08;IoC&#xff09;和依赖注入&#xff08;DI&#xff09;。它将对象的创建、组装和管理的…

Junit的常用操作

注:本篇文章讲解的是junit5 目录 Juint是什么 Juint需要导入的依赖 Juint常用注解 Junit执行顺序 参数化 断言 测试套件 Juint是什么 Juint 是 Java 的一个单元测试框架. 也是回归测试框架. 使用 Junit 能让我们快速的完成单元测试。 注意&#xff1a;Junit 测试也是程序…