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

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

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 命令表1else  命令表2fi

在这里插入图片描述

分层结构2:

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

嵌套结构:

if      表达式then 命令表1else  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((;;))
doecho "for"done

(2)

while true
doecho "while"
done

4、while…do…done

格式:

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

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

http://www.lryc.cn/news/8141.html

相关文章:

  • 2023年高新技术企业怎么申报认定
  • GIS状态检测新技术——振动分析法
  • Python进阶篇(一)-- Django快速上手
  • 读书笔记//来自公众号(1)
  • 10款让程序员用了会上瘾的工具
  • 类和对象(下)(一)
  • 46.在ROS中实现global planner(2)
  • 05- 泰坦尼克号海难生死预测 (机器学习集成算法) (项目五)
  • 【python百炼成魔】python运算符的使用与输入输出函数
  • uniapp实现app检查更新与升级-uni-upgrade-center详解
  • 公司项目引入这种方式,开发应用真是又快又准!
  • virtuoso数据库介绍
  • linux高级命令之编辑器 vim
  • 分布式光伏储能系统的优化配置方法(Matlab代码实现)
  • Grafana loki部署及使用及问题处理方法(超详细)
  • vue项目如何使用 SheetJS(xlsx)插件?
  • 项目管理工具dhtmlxGantt甘特图入门教程(九):支持哪些数据格式(上篇)
  • iView Table合并单元格(行、列)
  • 如何用P6软件编制项目进度计划(下)
  • 环境配置完整指导——Installing C++ Distributions of PyTorch
  • 深度学习——自注意力机制和位置编码(笔记)
  • 内网渗透(三十)之横向移动篇-利用远控工具向日葵横向移动
  • 自动化测试中,该如何高效管理测试数据?
  • Qt中项目A调用另一个项目B的方法汇总
  • 【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)
  • 深入【虚拟列表】动态高度、缓冲、异步加载... Vue实现
  • Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12
  • Freemarker 语法精粹
  • 使用Benchto框架对Trino进行SQL性能对比测试
  • Redis之哨兵模式