shell脚本的编写以及shell中语句(嵌入式学习)

news2024/10/2 12:34:35

shell学习

  • shell脚本
  • 编写步骤
  • shell变量
  • 功能性语句
    • 1.read
    • 2.expr
    • 3.let
    • 4.test
    • 逻辑运算符的书写格式
  • 结构性语句
    • 1.if…then…fi
    • 2、case...esac
    • 3、for..do..done
    • 4、while..do..done

shell脚本

将shell命令按照一定的逻辑顺序实现指定功能,放到一个文件中。文件叫脚本文件,后缀.sh,可以直接执行,不用编译。shell脚本语言是解释型语言

编写步骤

1、编辑脚本内容
vi xxx.sh
2、将脚本文件权限修改为可执行
chmod 777 xxx.sh
3、执行脚本文件
./xxx.sh 或 bash xxx.sh

shell变量

1.shell中允许建立变量存储数据,但是不支持数据类型,所有赋值给变量的值都解释为一串字符。

2.变量的定义格式:
变量名=值(等号两边都不能有空格)
取shell变量的值:$变量名

3.shell变量的分类
(1)环境变量 printenv 或 env
HOME=/home/hq
(2)用户自定义变量
在shell编程中通常定义的变量名用大写,变量的调用:
$变量名
Linux Shell/bash从右向左赋值
使用unset命令删除变量的赋值
(3)位置变量或命令行参数
$0 执行的脚本名
$1-$9 ${10}-${n} 命令行空格传的参数
$# 命令行参数个数,除$0
$@ $* 遍历输出命令行参数内容
4)预定义变量
$? 获取的是上一句命令是否正确执行的结果
0:真
非0:为假
$$ 获取进程pid

功能性语句

1.read

从终端获取值赋值给变量。

格式:read 变量名1 变量名2 …
加提示语句:read -p “提示字符串” 变量名1 变量名2 …

注:把终端读入空格隔开的第一个单词赋值给第一个变量,第二个
单词赋值给第二个变量,依次类推赋值,剩余所有单词赋值
给最后一个变量。
在这里插入图片描述

2.expr

算术运算命令expr主要用于进行简单的整数运算,
包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作
注意:
1)运算符左右两侧必须有空格
2)*和()必须加转义字符,\* 、 \( \)
3)expr语句可以直接输出运算结果
在这里插入图片描述

3.let

在运算中不能有空格
运算结果需要赋给一个变量
变量参与运算的过程不用加$取值
在这里插入图片描述

4.test

test语句可测试三种对象:字符串 整数 文件属性
1)字符串的测试:(等号两边加空格)

s1 = s2 	测试两个字符串的内容是否完全一样
真,假
echo $?
s1 != s2	测试两个字符串的内容是否有差异
-z s1 		测试s1 字符串的长度是否为0
-n s1 		测试s1 字符串的长度是否不为0

在这里插入图片描述

2)整数的测试:

a -eq b 		测试a 与b 是否相等
a -ne b			测试a 与b 是否不相等
a -gt b 		测试a 是否大于b
a -ge b 		测试a 是否大于等于b
a -lt b 		测试a 是否小于b
a -le b 		测试a 是否小于等于b	

3)文件属性的测试;

-d name     	测试name 是否为一个目录
-f name 		测试name 是否为普通文件
-e name     	测试文件是否存在

在这里插入图片描述

逻辑运算符的书写格式

|| :逻辑或  
	[ 表达式1 ] || [ 表达式2 ] 
	[ 表达式1 -o 表达式2 ]
&& :逻辑与 
	[ 表达式1 ] && [ 表达式2 ] 
	[ 表达式1 -a 表达式2 ]
!  :逻辑非 
	[ ! 表达式 ]

结构性语句

1.if…then…fi

基本结构:

if    表达式
then  
  命令表
fi 

在这里插入图片描述

如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。if和fi是条件语句的语句括号, 必须成对使用;命令表中的命令可以是一条, 也可以是若干条。
分层结构1:

if      表达式
	then 
	命令表1
	else  
	命令表2
	fi

在这里插入图片描述

分层结构2:

if 表达式1
	then 
		命令表1
	elif  表达式2
	then
		命令表2
	elif 表达式3
	then 
		命令表3
        else
		命令表4
	fi

嵌套结构:

if      表达式
    then 
		命令表1
    else  
		if    表达式
		then  
			命令表
		fi  
    fi

在这里插入图片描述

注意:如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。 if和fi是条件语句的语句括号, 必须成对使用;命令表中的命令可以是一条, 也可以是若干条。

2、case…esac

case   字符串变量   in
        模式1)
                命令表1
                ;;(相当于C语言中的break)
        模式2)
                命令表2
                ;;
             ……
        *)
                命令表n
                ;;
	esac

注意:
1)case语句只能检测字符串变量
2)命令表以单独的双分号行结束,退出case语句
3)模式 n常写为字符* 表示所有其它模式
4)case匹配项中可以存在多个模式,
在这里插入图片描述
在这里插入图片描述

3、for…do…done

格式:

for   变量名   in   单词表
    do
        命令表
    done

变量依次取单词表中的各个单词,每取一次单词, 就执行一次循环体中的命令,循环次数由单词表中的单词数确定,命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。
在这里插入图片描述

for语句的几种书写格式:
(1)for i in 1 2 3 4 do…done :
变量i从单词表中取值
(2)for i do…done:
变量i从命令行取值,可以省略in 单词表

(3)for i in {1…10} do…done:
(大括号和数字之间不加空格)
变量i从1~10
(4)for ((i = 0; i < 10; i++)) do…done

shell脚本的死循环
(1)

for((;;))
do
	echo "for"
 done

(2)

while true
do
 echo "while"
done

4、while…do…done

格式:

while  命令或表达式
do
        命令表
done

while语句首先测试其后的命令或表达式的值,
如果为真,就执行一次
然后再测试该命令或表达式的值,
执行循环体,直到该命令或表达式为假时退出循环。
在这里插入图片描述

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

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

相关文章

几个Base64编码工具,也有蹊跷

起因 需求&#xff1a;对一段内容进行base64加密&#xff0c;然后通过url的get请求进行发送到后台&#xff0c;由于加密的内容比较少&#xff0c;base64串也不是很长&#xff0c;我认为此方案可行。 于是找了三个base64编码的在线工具&#xff0c;分别是&#xff1a; 平台1&…

设计模式第六讲:责任链模式和迭代器模式详解

一. 责任链模式 1. 背景 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导…

【Java基础】020 -- 常见API

目录 一、游戏打包exe 二、Math 1、Math类的常用方法 ①、代码实现 2、小结 3、练习 ①、练习一&#xff1a;改进判断一个数是否为一个质数 ②、练习二&#xff1a;自幂数 三、System 1、时间原点 2、常用方法 3、课堂练习 4、注意事项 5、小结 四、Runtime 1、常用方法 2、练习…

微服务项目【商品秒杀接口压测及优化】

生成测试用户 将UserUtils工具类导入到zmall-user模块中&#xff0c;运行生成测试用户信息&#xff0c;可根据自身电脑情况来生成用户数量。 UserUtils&#xff1a; package com.xujie.zmall.utils;import com.alibaba.nacos.common.utils.MD5Utils; import com.fasterxml.j…

【黄啊码】我问ChatGPT如何学习PHP语言,它是这么说的

大家好&#xff0c;我是黄啊码&#xff0c;最近大家都在流行整chatGPT&#xff0c;今天它来了&#xff01;别人都在吹嘘它万能&#xff0c;能够代替程序员写代码&#xff0c;今天我们就让它教教我们学习PHP语言&#xff1a; 黄啊码&#xff1a; 如何有效学习php语言&#xff1…

关于剩余电流动作继电器在配电系统中的应用探讨

摘 要&#xff1a;据了解&#xff0c;我国每年剩余电流动作继电器&#xff08;RCD&#xff09;的使用量超过2.7亿台&#xff0c;属于CCC认证产品&#xff0c;广泛应用于住宅、办公、商业、酒店、学校等民用建筑和数据中心及工业场所。 现在剩余电流动作继电器依据的标准是GB/T…

vue项目如何使用 SheetJS(xlsx)插件?

简言 SheetJS是一款非常好用的前端处理表格文件的工具。它分社区版和专业版&#xff0c;我们今天来介绍如何简单使用它的社区版。 SheetJS社区版官网 介绍 你应该打开官网浏览具体使用详情。 安装 打开官网在如上图的Installation板块中可以找到各种运行模块的使用方式。 …

MongoDB 覆盖索引查询

MongoDB 覆盖索引查询 官方的MongoDB的文档中对覆盖查询做了说明&#xff1a; 所有的查询字段是索引的一部分所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分&#xff0c; MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询…

【半监督医学图像分割 2023 CVPR】UCMT 论文翻译

文章目录【半监督医学图像分割 2023 CVPR】UCMT 论文翻译摘要1. 介绍2. 相关工作2.1 半监督学习2.2 半监督分割2.3 不确定性引导的半监督语义分割3. 方法3.1 问题的定义3.2 总览3.3 协作式均值教师3.4 不确定性指导混合4. 实验和结论5. 总结【半监督医学图像分割 2023 CVPR】UC…

webpack(4版本)使用

webpack简介&#xff1a;webpack 是一种前端资源构建工具&#xff0c;一个静态模块打包器(module bundler)。在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析&#xff0c;打包生成对应的静态资源(bundle)…

sentinel持久化方案

一.sentinel规则推送原理 1.原有内存规则存储原理 (1)dashborad中请求到服务器后&#xff0c;在controller中通过http把规则直接推送给client&#xff0c;client接收后把规则放入内存&#xff1b; 2.持久化推送规则原理 ![在这里插入代码片](https://img-blog.csdnimg.cn/1…

质量保障体系建设演进案例

在业务早期发展阶段&#xff0c;主要是产品驱动、研发和测试互相配合。不同的测试方法是验证和保障交付质量的手段&#xff0c;而不是构建质量体系的基石。测试的努力带来的更多是一些“安全感”&#xff0c;而非安全保障。因此&#xff0c;要做到高质量的交付&#xff0c;就需…

k8s简单搭建

前言 最近学习k8s&#xff0c;跟着网上各种教程搭建了简单的版本&#xff0c;一个master节点&#xff0c;两个node节点&#xff0c;这里记录下防止以后忘记。 具体步骤 准备环境 用Oracle VM VirtualBox虚拟机软件安装3台虚拟机&#xff0c;一台master节点&#xff0c;两台…

Wails简介

https://wails.io/zh-Hans/docs/introduction 简介 Wails 是一个可让您使用 Go 和 Web 技术编写桌面应用的项目。 将它看作为 Go 的快并且轻量的 Electron 替代品。 您可以使用 Go 的灵活性和强大功能&#xff0c;结合丰富的现代前端&#xff0c;轻松的构建应用程序。 功能…

mac上安装mysql

mac上安装mysql1. 关于Linux上安装mysql2. 下载安装2.1 下载2.2 安装3. 客户端连接mysql3.1 先查看mysql服务3.2 连接mysql客户端3.2.1 终端使用命令连接3.2.2 可视化工具连接3.3 其他简单操作&#xff08;启动服务等&#xff09;3.3.1 可视化界面操作4. 配置环境变量4.1 配置环…

视图、索引、存储过程、触发器

视图、索引、存储过程、触发器 group by补充&#xff1a; 规范来说&#xff0c;分组查询中&#xff0c;select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化&#xff0c;分组后如果某个字段的所有记录相同&#xff0c;同样可以select。 视图 视图是虚拟…

一文详解java.nio.ByteBuffer

java.nio.ByteBuffer是一个可以进行缓冲区分配、读取和写入的缓冲区&#xff0c;其持有一个字节数组&#xff0c;并通过4个属性&#xff1a;capacity、limit、position、mark来管理缓冲区&#xff0c;进行字节级别读取和数据写入。基于此&#xff0c;ByteBuffer常被用来处理网络…

MySql数据库约束

概述、目的 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确性、有效性和完整性。 分类&#xff1a; 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都…

【闲聊杂谈】高并发下基于LVS的负载均衡

1、使用http协议进行网络请求 在前几年公布的用户入网数据中&#xff0c;移动入网的数量已经达到六七亿的规模&#xff0c;固网用户数也达到三至五个亿。想要解决这么大并发访问的场景&#xff0c;有多种的解决方案&#xff0c;常规有基于4层的&#xff0c;也有基于7层的。这个…

ChatGPT提示语编写指南

ChatGPT AI 对话模型自 2022 年 11 月下旬开始可用&#xff0c;此后用户一直在探索聊天机器人的局限性和功能。 然而&#xff0c;OpenAI 也在不断地进行调整&#xff0c;因此 ChatGPT 处于不断变化的状态。 但是我们在这个小指南中描述的提示应该是永恒的。 要获得想要的结果&…