shell编程二

news2025/1/12 10:03:04

目录

    • 语法
      • 引号
      • expr
      • test
      • if...then...fi
      • if...elseif...else
      • if嵌套
      • case…esac
      • for
      • while
      • break 和 continue
      • 函数

语法

引号

  1. " ":如果有字符串,字符串原样输出,如果有$变量则查看变量的值

  2. ' ':所有的字符无论是否有变量都原样输出

  3. ˋˋ:在该引号包含的范围内部都按照命令执行
    1 + 1 ==> expr 1 + 1
    在这里插入图片描述

expr

expr命令一般用于整数值,但也可用于字符串。

  • 算术运算

    + - \* \

num=9
sum=`expr $num \* 6`
echo $sum

注意:
1、不能用(),使用\( \)
2、乘法运算\* 需要屏蔽原*号含义(匹配字符),例如expr 12 + 5 \* 1
3、在运算符与运算数之间要有空格

  • 逻辑运算

    & |

  • 比较运算

    < <= = == != >= > ,其中< >要用\< \>

  • 字符串匹配

    string : REGEX, 使用REGEX匹配stringREGEX被视为正则表达式(REGEX隐含了^,匹配从首字母开始)

    expr test.txt : \(.*\).txt  # 输出匹配到的字符串
    expr test.txt : te.    # 输出匹配到的字符串数量
    
  • 返回字符出现位置

    index string charsshring中查找chars出现的位置

    expr index helloworld w  
    
  • 截取字符串

    substr string pos lenstring中取出从pos位置开始长度为len的子字符串

    expr substr helloworld 5 5
    
  • 获取字符串长度

    length string获取string的长度

    expr length helloworld
    
  • 将关键字转为普通字符串

    +

    expr index + length g
    

test

test语句可测试三种对象: 字符串、整数、文件属性

  • 字符串:

    s1 = s2测试两个字符串的内容是否完全一样
    s1 != s2测试两个字符串的内容是否有差异
    -z s1测试s1 字符串的长度是否为0
    -n s1测试s1 字符串的长度是否不为0
  • 整数:

    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
  • 文件属性:

    -b name 测试name 文件是否是块设备文件
    -c name 测试name 文件是否是字符设备文件
    -d name 测试name 文件是否是目录文件
    -f name 测试name 文件是否是普通文件
    -L name 测试name 文件是否是连接文件
    -S name 测试name 文件是否是套接字文件
    -p name 测试name 文件是否是管道文件
    -r name 测试name 文件是否存在且为可读
    -w name 测试name 文件是否存在且为可写
    -x name 测试name 文件是否存在且为可执行
    -s name 测试name 文件是否存在且其长度不为0
    f1 -nt f2 测试文件f1 是否比文件f2 更新
    f1 -ot f2 测试文件f1 是否比文件f2 更旧

if…then…fi

语法结构为:
if 表达式
	then 命令表1
	else 命令表2
fi

例:

read A B
if [ $A -gt $B ]
	then
	echo "A 大于 B"
fi

注意:[]中的内容和[]要有间隔

if…elseif…else

if [ $A -gt $B ]
then
	echo "A 大于 B"
elif [ $A -gt $B ]
then
	echo "A 等于 B"
else
	echo "A 小于 B"
fi

注意:else if(C语言) == elif

if嵌套

if [ $A -gt $B ]
then
	echo "A 大于 B"
else
if [ $A -gt $B ]
then
	echo "A 等于 B"
else
	echo "A 小于 B"
fi
fi

注意:每一个if就对应一个fi ; if后面要加then,elif后面也要加then

case…esac

case $字符串变量名 in
	模式1)
		命令表1
		;;
	模式2)
		命令表2
		;;
	……
	模式n)
		命令表n
		;;
esac
case $SUM in
	"10")
		echo "score is A"
		;;
	*)
		echo "sorry!you lost"
		;;
esac

注意:
1、模式如果是字符串或者字符,用"“括起来
2、”;;"相当于C语言switch语句中的break
3、“*”代表除各种模式以外的其他情况,相当于C语言switch中的default
4、如果模式是文件名或者文件夹,直接以文件或者文件夹名作为模式名
5、case语句中的变量名要用“$”引用

for

for 变量名 in 单词表
do
	命令表
done
for i in 1 2 3 4 5
for i in {1..5}
for ((i = 1;i <= 10;i++))
for i in `seq 100`
seq 用于产生从某个数到另外一个数之间的所有整数 例:seq 1 10 -w
表示生成的数位宽相同

注意:
1、{}表示单词表,其中内容与{}两头没有空格
2、单词表可以列出来
3、可以写成C语言格式的for循环,但是需要双()括起来
4、for循环这条语句中用到的变量名不用$引用

while

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

例:

while [ $I -le 10 ]
do
	SUM=`expr $SUM + $I`
	I=`expr $I + 1`
done

break 和 continue

  • 不带参数:
    break循环只能退出最内层的循环。
    continue只能去掉本次循环的剩余代码

  • 带参数:
    break N 可以退出N层循环
    continue N 将会把N层循环剩余代码都去掉,单循环次数不变。

函数

定义格式:

(1)
function_name ( )
{
    command1
    ……
    commandn
}
(2)
function function_name ( )
{
    command1
    ……
    commandn
}

函数调用:

value_name=`function_name [arg1 arg2 … ]`

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

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

相关文章

如何批量查询网站的搜狗收录情况?搜狗收录么查询

如何批量查询网站的搜狗收录情况&#xff1f;搜狗收录么查询 查询网站的搜狗收录的具体操作&#xff1a; 第一步、打开网站综合查询工具 第二步、添加需要查询的网站域名 第三步、勾选要查询的功能&#xff08;勾选搜狗是否收录和搜狗总收录&#xff09; 第…

redis 主从复制(读写分离)集群搭建(含错误处理)

目录 1.概述 2.搭建 2.1.安装配置 2.2.认主 2.3.错误处理 3.原理 1.概述 当面临大流量时&#xff0c;redis可以采取集群的方式进行扩容&#xff0c;将压力分散到集群中的多个结点上去防止redis被打挂。redis的扩容方式有两种&#xff1a; 垂直扩容&#xff0c;即读写分离…

【移动端测试】了解Android的配置和使用过程

Android 是基于JAVA语言来进行开发编写的&#xff0c;但是对于Android体系中最底层是Linux层&#xff0c;现在说一下android 项目的结构目录: 整体结构和一个普通的java项目很类似 每一个项目都有一个主Activity 相当于java类中的main 方法是程序的入口 比如 该项目中的ListVi…

centos7搭建nginx主从以及集群

一、nginx升级之路 之前因为业务量并不是很大&#xff0c;所以公司nginx采用的是单机。因为nginx单机性能也很好&#xff0c;所以也没有发生过什么问题。不过后来还是慢慢进行了几次调整。最终换成了多IP地址解析和nginx主从。下面就介绍一下怎么一步步升级的。 1.最初版本&a…

天翼物联携手6家单位发起移动物联网高质量发展共同倡议

近日&#xff0c;由工信部指导&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;、中国通信学会、无锡市人民政府、人民邮电报社、江苏省工业和信息化厅、江苏省通信管理局共同主办&#xff0c;无锡物联网创新促进中心、天翼物联科技有限公司等单…

uniapp中tabBar菜单栏的实现以及页面常用的生命周期(菜单栏颜色切换)

前言 本篇文章带大家使用uniapp通过小案例实现tab菜单栏的切换&#xff0c;并对页面中常用的生命周期进行介绍。 实现菜单栏的切换 配置page页面 我们这里要实现三个页面的切换&#xff0c;所以要先在page.json文件中配置三个页面的路径 "pages": [ //pages数组…

HTML -- 一文学会HTML及常用标签

文章目录1. HTML简介1.1 网页1.1.1 什么是网页1.1.2 什么是HTML1.1.3 网页的形成1.2 常用浏览器1.2.1 常见的浏览器1.2.2 浏览器内核1.3 Web标准1.3.1 为什么需要Web标准1.3.2 Web标准的构成2. HTML基础2.1 HTML语法规范2.1.1 基本语法规范2.1.2 标签关系2.2 HTML基本结构标签2…

我做软件测试工作的两大乐趣

大家好&#xff0c;我是小谭。 曾几何时&#xff0c;我们都有一个梦想&#xff0c;梦想着做自己喜欢的工作。但现实往往事与愿违&#xff0c;我们被家庭、身份、社会捆绑&#xff0c;做着自己不喜欢的工作&#xff0c;即便做着自己喜欢的工作&#xff0c;也容易在日常的琐碎中…

SAAS系统和ERP区别?

saas系统和erp区别&#xff1f; saas是云计算应用的一种形式,而传统erp系统并不具备此特征&#xff1b;saas系统的数据存储也是在云端上&#xff0c;只要使用的软件即可用于业务管理的属于ERP的类别。 saas行业和传统软件区别很大吗&#xff1f; 很大&#xff0c;一个是新兴产…

C#捐款信息管理系统

捐款信息管理系统 技术 C#sqlserver 主要功能 登录、注册功能&#xff0c;两种角色登录判断&#xff0c;一种为管理员&#xff0c;一种为用户管理员发起项目&#xff0c;即发布项目&#xff0c;同时拥有对项目的增加、删除、修改、查询用户对管理员发起的项目可以进行申请操…

魏副业而战:做闲鱼副业项目的3个阶段

我是魏哥&#xff0c;与其在家躺平&#xff0c;不如魏副业而战&#xff01; 小伙在社群提问&#xff1a;有没整套的模板案例&#xff1f; 他找了一上午的同行&#xff0c;没有找到“完整”的案例&#xff0c;他很苦恼&#xff0c;所以想请老师指导一下。 其实呢&#xff0c;…

wait_queue如何使用

Linux内核的 等待队列&#xff08;Wait Queue&#xff09;是重要的数据结构&#xff0c;与进程调度机制紧密相关联&#xff0c;可以用来同步对系统资源的访问、异步事件通知、跨进程通信等。如下图所示&#xff0c; 在Linux中&#xff0c;等待队列以循环链表为基础结构&#xf…

基于web的实验教学管理系统java ssm教学视频平台源码和论文

研究背景 近几年来&#xff0c;随着地方高等院校办学规模的不断扩大&#xff0c;为了适用社会发展需要&#xff0c;地方高校将应用 型人才培养作为学校的人才培养目标。为了适应学校应用型人才培养目标&#xff0c;各专业尤其是理工科专 业人才培养方案中加强了实践教学环节&a…

1559_AURIX_TC275_RCU系统中的Boot支持、Pad配置以及NMI trap处理

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这一次看的10页文档虽然文字内容不多&#xff0c;但是涉及到的面还是很多的。而且&#xff0c;看完之后的确是有一种答疑解惑的畅快感。 1. ESRx作为GPIO用的时候&#xff0c;也拥有GPIO设…

高等数学(第七版)同济大学 习题11-1 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题11-1 函数作图软件&#xff1a;Mathematica 1.设在xOy面内有一分布着质量的曲线弧L&#xff0c;在点(x,y)处它的线密度为μ(x,y)&#xff0c;用对弧长的曲线积分分别表达&#xff1a;\begin{aligned}&1. \ 设在xOy面内…

蓝桥杯嵌入式MCP4017

文章目录前言一、查看MCP4017芯片手册二、MCP4017在开发板上的电路图三、工程配置四、MCP4017读写函数编写总结前言 MCP4017是一个可编程电阻&#xff0c;通过写入数值可以调节电阻值的大小。 一、查看MCP4017芯片手册 在这里我们只需要关注MCP4017即可。下面的几个重要点我…

广播、组播 socket编程

目录 1、单播 / 广播 / 组播 的概念 (1) 单播 (2) 广播 (3) 多播&#xff08;组播&#xff09; 2、广播 socket编程&#xff08;只能是UDP通信&#xff09; 3、多播 socket编程&#xff08;只能是UDP通信&#xff09; 1、单播 / 广播 / 组播 的概念 (1) 单播 之前在进行…

m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序

目录 1.算法描述 2.仿真效果预览 3.Verilog核心程序 4.完整FPGA 1.算法描述 整个模型的基本框图为 软件无线电是现代通信技术的重要研究领域和发展方向,目前发展迅速.快速发展的软件无线电技术与落后的硬件计算资源之间的矛盾越来越突出.为了缓解这个矛盾,一方面可以加快集…

职场日常:一文剖析性能测试流程,时间为啥那么长?

如果你做过性能测试&#xff0c;你就会知道&#xff0c;性能测试的时间要比功能测试时间长很多&#xff0c;但是&#xff0c;你没有做过&#xff0c;你可能就会问了&#xff0c;为什么性能测试时间要长那么多呢&#xff1f;今天就用一文&#xff0c;带大家了解性能测试工作流程…

自学python?一般人我还是劝你算了吧

前言 本人纯屌丝一枚&#xff0c;在学python之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说自学python&#xff0c;一般人我还是劝你算了吧。因为我就是那个一般人。 基础真的很简单&#xff0c;是个人稍微认点真都能懂&#…