「Linux系列」有关Shell数组/运算符的故事

文章目录

  • 一、Shell 数组运用
    • 1. 定义数组
    • 2. 访问数组元素
    • 3. 获取数组长度
    • 4. 遍历数组
    • 5. 追加元素到数组
    • 6. 删除数组元素
    • 7. 数组切片
    • 8. 综合示例:统计数组中元素的个数
    • 9. 关联数组(Bash 4.0及以上版本)
  • 二、Shell 基本运算符
    • 1. 数值运算符
    • 2. 字符串运算符
    • 3. 逻辑运算符
    • 4. 文件测试运算符
    • 5. 条件测试命令
  • 三、相关链接

一、Shell 数组运用

在Shell脚本中,你可以使用数组来存储多个值。Shell中的数组是一维的,并且索引是从0开始的。下面是一些关于Shell数组的基本操作和案例代码。

1. 定义数组

你可以使用圆括号()来定义数组,并用空格分隔元素。

array=("element1" "element2" "element3")

2. 访问数组元素

使用${array[index]}语法来访问特定索引的元素。

echo ${array[0]}  # 输出 element1
echo ${array[1]}  # 输出 element2

3. 获取数组长度

使用${#array[@]}${#array[*]}来获取数组的长度(元素个数)。

echo ${#array[@]}  # 输出 3

4. 遍历数组

你可以使用for循环来遍历数组的所有元素。

for element in "${array[@]}"; doecho $element
done

5. 追加元素到数组

你可以使用+=操作符来追加元素到数组的末尾。

array+=("element4")

6. 删除数组元素

Shell没有直接删除数组特定元素的命令,但你可以通过重新定义数组来“删除”元素。

# 假设你想删除索引为1的元素
array=("${array[@]:0:1}" "${array[@]:2}")

7. 数组切片

你可以使用${array[@]:start:length}语法来获取数组的一个切片。

slice=("${array[@]:1:2}")  # 从索引1开始,取2个元素

8. 综合示例:统计数组中元素的个数

#!/bin/bash# 定义数组
fruits=("apple" "banana" "cherry" "date")# 遍历数组并统计元素个数
count=0
for fruit in "${fruits[@]}"; docount=$((count + 1))echo "元素: $fruit"
doneecho "数组中元素的个数: $count"

9. 关联数组(Bash 4.0及以上版本)

Bash 4.0及更高版本支持关联数组(也叫哈希表或字典),允许你使用字符串作为索引。

# 定义关联数组
declare -A person
person["name"]="Alice"
person["age"]=30# 访问关联数组元素
echo ${person["name"]}  # 输出 Alice
echo ${person["age"]}   # 输出 30# 遍历关联数组
for key in "${!person[@]}"; doecho "Key: $key, Value: ${person[$key]}"
done

请注意,关联数组在旧版本的Bash中可能不受支持。你可以通过运行bash --version来检查你的Bash版本。

二、Shell 基本运算符

在Shell脚本中,运算符用于执行各种数学运算、字符串比较以及逻辑判断等操作。以下是一些常用的Shell运算符及其案例:

1. 数值运算符

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取模(求余数)

案例:计算两个数的和与差

#!/bin/bashnum1=10
num2=20sum=$((num1 + num2))
diff=$((num1 - num2))echo "两数之和: $sum"
echo "两数之差: $diff"

2. 字符串运算符

  • =:字符串相等
  • !=:字符串不相等
  • -z:检查字符串长度是否为零
  • -n:检查字符串长度是否非零

案例:比较两个字符串

#!/bin/bashstr1="Hello"
str2="World"if [ "$str1" = "$str2" ]; thenecho "字符串相等"
elseecho "字符串不相等"
fiif [ -z "$str1" ]; thenecho "str1 是空字符串"
elseecho "str1 不是空字符串"
fi

3. 逻辑运算符

  • &&:逻辑与(AND)
  • ||:逻辑或(OR)
  • !:逻辑非(NOT)

案例:使用逻辑运算符判断条件

#!/bin/bashnum=10if [ $num -gt 5 ] && [ $num -lt 20 ]; thenecho "num 在 5 和 20 之间"
fiif [ $num -eq 10 ] || [ $num -eq 20 ]; thenecho "num 是 10 或 20"
fiif ! [ $num -eq 0 ]; thenecho "num 不等于 0"
fi

4. 文件测试运算符

  • -e:文件或目录是否存在
  • -d:是否为目录
  • -f:是否为文件
  • -r:文件是否可读
  • -w:文件是否可写
  • -x:文件是否可执行

案例:检查文件或目录的状态

#!/bin/bashfile="/path/to/somefile.txt"if [ -e "$file" ]; thenecho "文件或目录 $file 存在"
elseecho "文件或目录 $file 不存在"
fiif [ -f "$file" ]; thenecho "$file 是一个文件"
fiif [ -d "$file" ]; thenecho "$file 是一个目录"
fi

5. 条件测试命令

  • [ ]test:用于条件测试
  • [[ ]]:Bash的关键字,提供更强大的模式匹配功能

案例:使用[ ]进行条件测试

#!/bin/bashnum1=5
num2=10if [ $num1 -lt $num2 ]; thenecho "$num1 小于 $num2"
fi

在使用Shell运算符时,注意运算符两侧的空格是必须的,否则可能会导致语法错误。同时,根据使用的Shell类型(如Bash、sh等),某些运算符或语法可能有所差异。上述案例主要基于Bash Shell进行演示,但在其他Shell中可能需要进行适当的调整。

三、相关链接

  1. Linux官网
  2. Linux常用命令
  3. CentOS官网下载地址
  4. 「Linux系列」Linux简介及常见的Linux系统
  5. 「Linux系列」Linux 系统启动过程
  6. 「Linux系列」Linux 系统目录结构/忘记密码解决方法
  7. 「Linux系列」Linux 远程登录/文件基本属性
  8. 「Linux系列」Linux 文件与目录管理
  9. 「Linux系列」Linux 如何学习用户和用户组管理
  10. 「Linux系列」聊聊Linux磁盘管理的事
  11. 「Linux系列」聊聊vi/vim的3种命令模式
  12. 「Linux系列」了解下Linux yum(包管理工具)

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

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

相关文章

Avue框架实现图表的基本知识 | 附Demo(全)

目录 前言1. 柱状图2. 折线图3. 饼图4. 刻度盘6. 仪表盘7. 象形图8. 彩蛋8.1 饼图8.2 柱状图8.3 折线图8.4 温度仪表盘8.5 进度条 前言 以下Demo,作为初学者来说,会相应给出一些代码注释,可相应选择你所想要的款式 对于以下Demo&#xff0c…

GStreamer简单看看

主要是现在弄摄像头,要用到这东西。所以学学。 最权威主页:GStreamer: open source multimedia framework 大概看了下,好像命令也不难。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw,formatYUY2,width640,height480,framerat…

说说你对webpack的理解?解决了什么问题?

文章目录 一、背景二、问题三、是什么参考文献 一、背景 Webpack 最初的目标是实现前端项目的模块化,旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候,我们会通过文件划分的形式实现模块化,也就是将每个功能及其相关状态数据各…

Java 面试宝典:volatile 的使用场景有哪些?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站:https://skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 回答 volatile 是一种轻量级的同步机制,它能保证共…

Batch Normalization(批量归一化)和 Layer Normalization(层归一化)

Batch Normalization(批量归一化)和 Layer Normalization(层归一化)都是深度学习中用于改善网络训练过程的归一化技术。尽管它们的目标相似,即通过规范化中间层的激活值来加速训练过程并提高性能,但它们在细节上有所不同。 Batch Normalization (批量归一化) Batch Nor…

谷歌地图TMS地图服务地址收集2024,测试可用

对于普通的开发者或者GIS从业者来说,免费的底图影像服务,太重要了。之前写过一篇谷歌地图的TMS地址收集的博文,由于谷歌网站关闭已经不能用。最近又发现了谷歌在国内开放了其他地址,在这里给大家分享一下。 https://gac-geo.googl…

Ant Design Vue和VUE3下的upload组件使用以及文件预览

Ant Design Vue和VUE3下的upload组件使用以及文件预览 文章目录 Ant Design Vue和VUE3下的upload组件使用以及文件预览一、多文件上传1.需求2.样例3.代码 二、单文件上传1. 需求2. 样例3.代码 二、多文件上传产生的时间超时问题三、文件系统名称更改1. 修改文件index.html2. 修…

【Java初阶(三)】方法的使用

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1.前言2.方法的概念2.1方法定义2.2 实参和形参的关系 3. 方法的重载3.1方法重载的概念 4.递归4.1递归的概念4.2递归过程分析4.3 递归练习 5.总结 1.前言…

java核心面试题解析

1.索引 1.1创建索引: create index 索引名称 on 某张表 (列名) 示例: create index index_name on table (Column names) 1.2索引优化 MySQL数据库索引优化是提高查询性能的重要手段。以下是一些关键的索引优化策略: 选择正确的索引列: 经常需要排序、分组和联…

Leetcode热题100:图论

Leetcode 200. 岛屿数量 深度优先搜索法: 对于这道题来说,是一个非常经典的图的问题,我们可以先从宏观上面来看问题,也就是说在不想具体算法的前提下,简单的说出如何找到所有的岛屿呢? 如图中所示&#x…

win git filter-repo教程

git filter-repo 是一个用于过滤和清理 Git 仓库历史的工具,它可以高效地批量修改提交历史中的文件内容、删除文件、重命名文件以及进行其他历史重构操作。相较于 git filter-branch,它通常更快且更易于使用。 以下是一个基本示例,说明如何使…

oracle 19c单机版本补丁升级

文章目录 一、补丁包概述二、备份opatch三、替换高版本opatch四、打DB补丁1、关闭数据库2、关闭监听3、解压补丁4、冲突检测5、补丁空间检查6、执行补丁升级7、将更新内容加载到数据库8、最后查看数据库版本9、卸载补丁包 一、补丁包概述 补丁升级包 链接:https://…

【系统架构设计师】计算机系统基础知识 03

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 02 软件架构设计 03 计算机系统基础知识 文章目录 系统架构设计师 - 系列文章目录 文章目录 前言 一、计算机系统概述 1.计算机组成 ​编辑2.存储系统 二、操作系统 ★★★★ 1.进程管理 2.存储管理 1.页式存储 …

Golang Gorm 自动分批查询

场景: 目标查询全量数据,但需要每次Limit分批查询,保护数据库 文档: https://gorm.io/zh_CN/docs/advanced_query.html // Param: // dest 目标地址 // batchSize 大小 // fc 处理函数func (db *DB) FindInBatc…

安卓 Android Activity 生命周期

文章目录 Intro生命周期方法 & 执行顺序结论code Intro 本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候,各个Activity的生命周期相关方法的执行顺序。 生命周期方法 & 执行顺序结论 下图出自 郭霖 《第一行代码(第二…

速盾:免备案cdn的好处

免备案CDN(Content Delivery Network)是指不需要进行备案手续即可使用的CDN服务。备案是指在中国大陆地区提供互联网信息服务的网站必须向相关部门进行备案登记,以确保其合法合规的运营。 那么,免备案CDN有哪些好处呢&#xff1f…

电网的正序参数和等值电路(一)

本篇为本科课程《电力系统稳分析》的笔记。 本篇为第二章的第一篇笔记。 电力系统正常运行中,可以认为系统的三相结构和三相负荷完全对称。而对称三相的计算可以用一相来完成,其中所有给出的标称电压都是线电压的有效值,假定系统全部是Y-Y型…

深入了解23种设计模式:程序员必读指南

文章目录 引言概述基本原则设计模式总览 引言 随着编码时间拉长,遇到的问题增加,发现设计模式对于解决某类场景问题确实帮助很大。其实在不了解设计模式之前,其设计思想也已经在日常开发中有所体现,只是没有总结出来。设计模式像是…

C语言-常量

什么是常量? 答:常量是在程序执行过程中,其值不发生改变的量,常量分为直接常量和符号常量两种。 其中直接常量又可以分为整型常量、实型常量、字符型常量、字符串常量。 直接常量 1.整型常量 整型常量即整数,包括正整数,负整数和0。c语言中常量可以用八进制,十进制和十六…

【网站项目】291校园疫情防控系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…