13、Linux-Shell02:参数传递和运算符

目录

一、参数传递

二、运算符

1、算术运算符(+、-、*、/、%、=、==、!=)

2、关系运算符

3、逻辑运算符

4、字符串运算符

5、文件运算符


一、参数传递

执行脚本时可以为脚本文件传递参数,在脚本中可以处理这些参数。

第n个参数,通过$n获取。下面两个例子表明了对参数的一些常见的使用方法。

[root@VirTrxcx test]# cat var.sh 
#! /bin/bash
echo $1 # 获取第一个参数
echo $2 # 获取第二个参数
echo $# # 获取参数个数
echo $* # 获取所有参数
echo $@ # 获取所有参数
echo $? # 获取程序结束状态:0表示正常退出# 传递参数的方法:执行脚本时后面以空格分开参数即可
[root@VirTrxcx test]# ./var.sh "hello,this is parameter1" "parameter2" "parameter3"
hello,this is parameter1
parameter2
3
hello,this is parameter1 parameter2 parameter3
hello,this is parameter1 parameter2 parameter3
0

 $*和$@都会获取所有参数,

区别在于$*把获取到的所有参数当成一个整体,而$@把获取到的每个参数当成独立的引用。

# 在这里展示$*和$@的区别,下面会循环输出二者的内容
for i in "$*";doecho $i
donefor i in "$@";doecho $i
done# 在这里设置一个bug
name="Trxcx"
readonly name
unset name
echo $?
[root@VirTrxcx test]# ./var.sh "p1" "p2"
p1 p2
p1
p2
./var.sh: line 14: unset: name: cannot unset: readonly variable
1

二、运算符

1、算术运算符(+、-、*、/、%、=、==、!=)

通过expr实现数学运算

[root@VirTrxcx test]# cat var.sh 
#! /bin/bash
a=10
b=20val=`expr $a \* $b + $b`
echo $valif [ $a != $b ]
thenecho "a doesn't equal b"
fi[root@VirTrxcx test]# ./var.sh 
220
a doesn't equal b

要点说明:

  • Shell编程中有+-*/%等运算符号,但*前面必须加上\转义才能正确使用。
  • 运算符和数字(变量)之间应该以空格分隔
  • 条件表达式放在[]之间,应该存在空格分隔

2、关系运算符

假设a=10,b=20。

  • -eq:是否相等?[ $a -eq $b ] 返回 false。
  • -ne:是否不等?[ $a -ne $b ] 返回 true。

类似的:

  • -gt是大于
  • -lt是小于
  • -ge是大于等于
  • -le是小于等于

e是equal,g是greater,l是less,n是not,t是than,通过全称可以很容易记住缩写的含义。

3、逻辑运算符

  • -a:与运算;-o:或运算;!:非运算。使用方法:[ $a -a $b ]
  • &&:与运算;||:或运算。使用方法:[[ $a && $b ]]

4、字符串运算符

  • =:字符串相等返回true。例如[ $str1 = $str2 ]。
  • !=:字符串不等返回true。例如[ $str1 != $str2 ]。
  • -z:字符串长度为0返回true。例如[ -z $str1 ]。
  • -n:字符串长度不为0返回true。例如[ -n $str1 ]。
  • $:字符串不为空返回true。例如[ $str1 ]。

5、文件运算符

-r、-w、-x:文件是否可读、可写、可执行

-f、-d、-b、-c:文件是否是普通文件、是否是目录、是否是块设备文件、是否是字符设备文件

-s、-e:文件是否为空、文件是否存在

使用方法:[ -r $file ]

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

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

相关文章

[LeetCode][LCR172]统计目标成绩的出现次数——二分找边界

题目 LCR 172. 统计目标成绩的出现次数 某班级考试成绩按非严格递增顺序记录于整数数组 scores,请返回目标成绩 target 的出现次数。 示例 1: 输入:scores [2, 2, 3, 4, 4, 4, 5, 6, 6, 8], target 4 输出:3 示例 2&#xff1a…

Elasticseach基础认识

ES的起源? Elasticsearch 是由 Elastic 公司创建 简称(ES) Elasticsearch 是一个分布式、免费和开放的搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。 Elasticsearch 基于 …

Oracle 主从切换脚本

一、 切换前预检查 1. dg_precheck_main_v1.4.sh #!/bin/bash#********************************************************************************** # Author: Hehuyi_In # Date: 2022年06月16日 # FileName: dg_precheck_main_v1.4.sh # # For sys user, execute the sc…

LLM之RAG实战(二十九)| 探索RAG PDF解析

对于RAG来说,从文档中提取信息是一种不可避免的场景,确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。 文件解析过程在RAG中的位置如图1所示: 在实际工作中,非结构化数据比结构化数据丰富得多。如果这些海量数据无…

【向课题组提交实习申请模板】

实习申请 尊敬的老师: 本人系xx学院xx专业的学生xx。现已通过xx公司202x届“xx星”实习计划的面试,并成功获得xx工程师实习岗位;工作内容为xx;实习地点位于xx;实习时长为暑期x个月。我希望能够通过此次实习&#xff0…

Redis事务及原理

Redis 事务以及原理 Redis 中的事务是一组命令的集合,是 Redis 的最小执行单位。它可以保证一次执行多个命令,每个事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序地执行。服务端在执行事务的过程中,不会被其他客户…

HTML、CSS、JavaScript

W3C标准:网页主要由三部分组成 ➢结构:HTML ➢表现:CSS ➢行为:JavaScript HTML HTML是一门语言,所有的网页都是用HTML这语言编写出来的 HTML(Hyper Text Markup Language):超文本标记语言 ➢超文本&#x…

【python】(10)语法糖

Python 语法糖(Syntactic Sugar)是指 Python 中的一些语法特性,它们并不改变语言的功能,但能够使代码更加简洁、易读和优雅。 1. 列表推导式(List Comprehensions) 列表推导式是 Python 中一种简洁的创建列表的方法,它允许我们使用单行代码来生成列表,避免了传统的循…

微服务篇-A JavaEE架构演进历程(学习总结)

原创作者:田超凡 版权所有,转载请注明原作者,严禁复制转载 Level1 传统架构 就是大家众所周知的SSM或SSH了, 优点:三层架构职责清晰 缺点:依赖库管理难度大,协同开发代码冲突和功能扩展性差&a…

如何使用vue定义组件之——子组件调用父组件数据

1.定义父子模板template <div class"container"><my-father></my-father><my-father></my-father><my-father></my-father><!-- 此处无法调用子组件&#xff0c;子组件必须依赖于父组件进行展示 --><!-- <my-…

Java Web实战(五)Web后端之AOP-面向切面编程原理用法详解

文章目录 1. 场景示例Spring AOP快速入门&#xff1a;统计各个业务层方法执行耗时 2. AOP核心概念2.1 通知类型2.2 PointCut2.3 通知顺序2.4 使用通知函数的参数2.5 示例 3. 切入点表达式3.1 切入点表达式-execution3.2 切入点表达式-annotation 4. 案例 AOP&#xff1a;Aspect…

数学实验_Matlab使用2_简单绘图

简单使用 x -pi * 2 : .1 : pi*2;y sin(x);plot(x, y); % 绘制普通图像plot(x, y, k-.*); % 绘制2维图像&#xff0c;线为实线&#xff0c;*为每个点&#xff08;Matlab的画图比较原始&#xff0c;就是简单的秒点画图&#xff09;grid on; % 打开网状格式% grid off; % 关闭…

【自动驾驶中的BEV算法】

自动驾驶中的BEV算法 在自动驾驶领域中&#xff0c;Bird’s Eye View (BEV) 算法是一种将来自不同传感器&#xff08;如摄像头、激光雷达、毫米波雷达等&#xff09;的数据转换为车辆正上方俯瞰视角下的统一表示的方法。这种转换使得车辆能够获得一个直观且具有空间一致性的环…

6. git 指定某一个提交

在 Git 中&#xff0c;直接“更新”一个特定的提交记录是不常见的操作&#xff0c;因为提交记录是 Git 仓库历史的一部分&#xff0c;通常不应该被修改。 但是&#xff0c;你可以通过一些策略来达到类似的效果&#xff0c;比如创建一个新的提交来撤销或者修改之前的提交。 以下…

SORA和大语言模型的区别

OpenAI的文生视频模型SORA与大语言模型&#xff08;LLM&#xff09;的主要区别在于它们的应用领域和处理的数据类型&#xff0c;数据处理能力、技术架构、多模态能力和创新点。SORA作为一款专注于视频生成的模型&#xff0c;展现了在处理视觉数据方面的独特优势和创新能力。 1…

R语言读取大型NetCDF文件

失踪人口回归&#xff0c;本篇来介绍下R语言读取大型NetCDF文件的一些实践。 1 NetCDF数据简介 先给一段Wiki上关于NetCDF的定义。 NetCDF (Network Common Data Form) is a set of software libraries and self-describing, machine-independent data formats that support…

GlobalExceptionHandler全局异常处理器的设计

在Java Web开发中&#xff0c;全局异常处理器&#xff08;GlobalExceptionHandler&#xff09;是一个非常重要的概念。它允许我们集中处理应用程序中可能发生的各种异常&#xff0c;从而提供统一的错误响应&#xff0c;增强用户体验&#xff0c;并简化异常处理逻辑。下面将详细…

栈队列数组试题(二)——队列

一、单项选择题 01.栈和队列的主要区别在于&#xff08;). A.它们的逻辑结构不一样 B.它们的存储结构不一样 C.所包含的元素不一样 D.插入、删除操作的限定不一样 02&#xff0e;队列的“先进先出…

STM32串口通信—串口的接收和发送详解

目录 前言&#xff1a; STM32串口通信基础知识&#xff1a; 1&#xff0c;STM32里的串口通信 2&#xff0c;串口的发送和接收 串口发送&#xff1a; 串口接收&#xff1a; 串口在STM32中的配置&#xff1a; 1. RCC开启USART、串口TX/RX所对应的GPIO口 2. 初始化GPIO口 …

Linux mktemp命令教程:创建临时文件和目录(附实例详解和注意事项)

Linux mktemp命令介绍 mktemp命令在Linux中用于创建临时文件或目录。这个命令可以帮助我们在脚本或应用程序中创建一个有效且唯一的临时文件或目录。 Linux mktemp命令适用的Linux版本 mktemp命令在所有主要的Linux发行版中都可以使用&#xff0c;包括Debian、Ubuntu、Alpin…