Shell语言基础语法(2)

server/2024/12/27 3:14:11/

目录

一、数据类型

1、数字类型

2、字符串类型

3、数组类型

(1)、普通数组

普通数组的定义

 普通数组的访问

(2)、关联数组

关联数组的定义

 关联数组的访问

二、变量值相关操作

1、获取变量长度

2、切片

3、截断

4、let操作

三、运算符

1、算数运算符

2、文件测试运算符

3、字符串测试运算符

4、比较运算符

 5、逻辑运算符

 6、布尔运算符

 总结


一、数据类型

1、数字类型

  • int 整形
age=18
  • float 浮点型
salary=30000.0

2、字符串类型

在shell中,加了引号的字符就是字符串类型

" "   弱引用,引号的特殊字符有意义
' '   强引用,引号内所有特殊字符都取消意义

name='Alice'
gender="女"

3、数组类型

(1)、普通数组

普通数组:只能使用整数作为数组索引

普通数组的定义
  • 方式一:array=(元素1 元素2 元素3)
array=(1 5 8 '你好')
  • 方式二:array=([key1]=value1 [key2]=value2 [key3]=value3)
array=([0]=11 [2]=22 [1]="hello")
  • 方式三:依次赋值
array_new[0]=111
array_new[1]=222
array_new[2]="world"
  • 方式四:利用执行命令的结果设置数组元素:array=($(命令))  或者  array=(`命令`)

该方式会将命令的结果以空格为分隔符切成多个元素然后赋值给数组

array1=(`ls /test`)
 普通数组的访问

查看声明过的数组:declare -a

  • 正向所用:echo ${array9[索引]},索引值为正数,以0开头
  • 反向索引:echo ${array9[索引]},索引值为负数,从右往左以-1开头
(2)、关联数组
关联数组的定义

关联数组【字典】:可以使用字符串作为数组索引,需要用declare -A声明

# 创建一个叫info的关联数组
declare -A info
info["name"]="Alice"
info["age"]=18
info["gender"]="女"# 查看info数组
declare -A |grep info
 关联数组的访问
echo ${info["name"]}

 

二、变量值相关操作

1、获取变量长度

在变量名前加#来获取变量内容的长度

msg="hello world!"
# 打印msg变量的长度
echo ${#msg}

2、切片

使用 ${variable:offset:length} 语法可以对字符串进行切片。

  • ${variable:offset}:从 offset 开始,提取到字符串末尾。

  • ${variable:offset:length}:从 offset 开始,提取 length 个字符。

  • ${variable: -offset}:从字符串末尾开始,提取 offset 个字符。

  • ${variable: -offset:length}:从字符串末尾开始,提取 offset 个字符,再提取 length 个字符。

3、截断

  • 截掉左边的字符
url="www.csdn.com.cn"# 简单使用echo ${url#www.} # 输出:csdn.com.cn# 非贪婪模式 #*
echo ${url#*w}# 输出:ww.csdn.com.cn# 贪婪模式 ##*
echo ${url##*w}
# 输出:.csdn.com.cn
  • 截掉右边的字符

将#换成%就是从右边开始截断

4、let操作

在 Linux 系统中,let 是一个内置的 Bash 命令,用于执行算术运算。它允许你直接对变量进行数学运算,并将结果赋值给变量。let 命令非常适合在脚本中进行简单的整数运算。

注意:let 只能处理整数运算,不支持浮点数运算。

以下是 let 支持的常见算术运算:

运算符描述示例
+加法let a=5+3
-减法let b=10-4
*乘法let c=6*7
/除法let d=20/5
%取模(余数)let e=10%3
**幂运算let f=2**3
let x=i++  # 先把i赋值给x,然后再++
let y=++j  # 先++j,然后再把j的结果赋值给y

 

三、运算符

1、算数运算符

算术运算符需要配合以下操作符使用

浮点运算:bc           需要下载(yum install bc -y )

整数运算:expr、$(())、$[]、let(只支持赋值操作 )

  •  浮点运算 bc计算工具(yum install bc -y)

echo "表达式" | bc

echo "2.1+3.2" | bc     # 输出:5.3
echo "5 + 3" | bc       # 输出: 8
echo "10 - 4" | bc      # 输出: 6
echo "6 * 7" | bc       # 输出: 42
echo "20 / 5" | bc      # 输出: 4
echo "10 % 3" | bc      # 输出: 1
echo "2 ^ 3" | bc       # 输出: 8
  • 整数运算

$[] 是 $(()) 的简写形式,两者功能相同。

let只支持赋值操作

expr 5 + 3       # 输出: 8
expr 10 - 4      # 输出: 6
# 乘法符号前要加转义字符
expr 6 \* 7      # 输出: 42
expr 20 / 5      # 输出: 4
expr 10 % 3      # 输出: 1echo $((5 + 3))       # 输出: 8
echo $((10 - 4))      # 输出: 6
echo $((6 * 7))       # 输出: 42
echo $((20 / 5))      # 输出: 4
echo $((10 % 3))      # 输出: 1
echo $((2 ** 3))      # 输出: 8

2、文件测试运算符

 [ -r $file ]:判断文件是否可读

 [ -w $file ] :判断文件是否可写

 [ -x $file ]:判断文件是否可执行

 [ -f $file ]:判断文件是否是普通文件

 [ -d $file ]:判断文件是否是目录(文件夹)

 [ -s $file ]:判断文件是否是空

file="/var/node/test.sh" 
if [ -r $file ] 
thenecho "文件可读" 
elseecho "文件不可读" 
fi

3、字符串测试运算符

==:判断两个字符串是否相等

!=:判断两个字符串是否不相等

-z:判断字符串长度是否为0

-n:判断字符串长度是否不为0

[ "aaa" == "bbb" ];echo $?
#输出:1
# echo $? 表示输出上一个可执行程序的结果

4、比较运算符

[ 10 -eq 10 ];echo $?
# 输出:0

 5、逻辑运算符

需要结合(())进行使用

(1). && 操作符

&& 是“逻辑与”操作符,用于在两个命令之间建立依赖关系。

语法

命令1 && 命令2

行为

  • 如果 命令1 执行成功(返回值为 0),则执行 命令2

  • 如果 命令1 执行失败(返回值非 0),则跳过 命令2 的执行。

 

(2). || 操作符

|| 是“逻辑或”操作符,用于在两个命令之间建立选择关系。

语法

命令1 || 命令2

行为

  • 如果 命令1 执行成功(返回值为 0),则跳过 命令2 的执行。

  • 如果 命令1 执行失败(返回值非 0),则执行 命令2

 6、布尔运算符

 总结

好好学习,天天向上!!!

 


http://www.ppmy.cn/server/149847.html

相关文章

21. 反射

一、什么是反射 Python 是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,…

校园一卡通密钥管理系统基于 SSM 的高效架构搭建策略

第2章 开发环境与技术 开发校园一卡通密钥管理系统需要搭建编程的环境,也需要通过调查,对各个相关技术进行分析,选取适合本系统开发的技术与工具。 2.1 MYSQL数据库 题目确定了是一个应用程序之后,就开始按部就班的进行设计与分析…

小程序-基于java+SSM+Vue的校园水电费管理小程序设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

C++:列表初始化

一:C98 在c98中可以用花括号{}对数组和结构体进行初始化,比如: struct A {int a;int b; }; int main() {int a[3] { 1,2,3 };A b { 1,2 };return 0; } 二:C11 c11中扩大了使用范围,所以自定义类型也可以使用了。使用…

MinerU:PDF文档提取工具

目录 docker一键启动本地配置下载模型权重文件demo.py使用命令行启动GPU使用情况 wget https://github.com/opendatalab/MinerU/raw/master/Dockerfile docker build -t mineru:latest .docker一键启动 有点问题,晚点更新 本地配置 就是在Python环境中配置依赖和…

探索云原生安全解决方案的未来

我们是否充分意识到云端所面临的网络安全威胁? 在当今互联互通的世界中,维护安全的环境至关重要。云的出现扩大了潜在威胁的范围,因为它催生了机器身份(称为非人类身份 (NHI))及其秘密。随着组织越来越多地转向云原生…

【Linux】Linux权限管理:文件与目录的全面指南

在Linux系统中,权限管理是确保数据安全的关键。本文将为大家介绍Linux文件与目录的权限管理,帮助你理解如何设置和管理访问权限。无论你是新手还是有经验的用户,这里都将提供实用的技巧和知识,助你更好地掌握Linux环境。让我们一起…

前端工程化面试题目常见

前端工程化面试常见题目包括: • 谈谈你对WebPack的认识。 • Webpack打包的流程是什么? • 说说你工作中几个常用的loader。 • 说说HtmlWebpackPlugin插件的作用。 • Webpack支持的脚本模块规范有哪些? • Webpack和gulp/grunt相比有什么特…