shell常用语法

一、shell变量

定义变量语法:

变量名=值  # 等号两边不能有空格

示例:

#!/bin/bash
name="Alice"
echo "Hello, $name!"  # 使用变量

使用变量-语法:

两种方式:
第一种:${变量名}
第二种:$变量名

示例: 

代码示例:1 #! /bin/bash2 3 #定义变量的方式有两种4 #第一种:${变量名}5 name="Tom"6 echo "你好呀!${name}"7 8 #第二种:$变量名9 echo "你好呀!$name" 

 二、shell的数据类型

1.字符串

基本语法:

定义:str=”hello shell”
长度:${#str}
切片:${str:1:4}

代码示例:

#! /bin/bash
#定义字符串并赋值
str="I LOVE Shell!"
#取值
echo "str:${str}" 
#获取长度
echo "Length the str is ${#str}"
#获取字符串的切片
echo "str[1:6] is ${str:1:6}"

运行效果:

2. 数组

基本语法:

定义: arr=(vl v2 v3 v4 v5 v6)
通过索引获取元素: ${arr[0]}
获取列表所有元素:${arr[*]}
获取列表的长度:${#arr[*]}

代码示例:

1 #! /bin/bash
2 
3 #定义一个数组
4 zoo=(
5         Dog
6         pig
7         Monkey
8         Panda
9         lion
10 )
11 #输出所有元素:${变量名[*]}
12 echo "All Animal are ${zoo[*]}"
13 #输出数组长度(数组中元素的个数):${#变量名[*]}
14 echo "Length the zoo is ${#zoo[*]}"
15 #输出某个元素:${变量名[n]} n<=数组的长度-1
16 n=3
17 echo "zoo的第${n}个元素是:${zoo[$[n]]}"
18 #组合应用:
19 echo "zoo的最后一个元素是:${zoo[((${#zoo[*]})-1)]}"

 运行结果:

三、shell的逻辑判断

1.if else

基本语法:

if [ 条件 ]; then命令
elif [ 条件 ]; then命令
else命令
fi

示例:

#!/bin/bash
echo "请输入一个数字:"
read numif [ $num -gt 10 ]; thenecho "这个数字大于10"
elif [ $num -eq 10 ]; thenecho "这个数字等于10"
elseecho "这个数字小于10"
fi

运行结果:

请输入一个数字:
8
这个数字小于10

** 补充:文件目录的判断 **

1 #! /bin/bash
2 
3 path=$1
4 
5 #-e 判断文件是否存在
6 if [ -e $path ]
7 then
8         echo "$path 存在"
9 else    
10         echo "$path 不存在"
11 fi12 #-f 判断是否是文件
13 if [ -f $path ]
14 then
15         echo "$path 是文件"
16 else    
17         echo "$path 不是文件"
18 fi      19 #-d 判断是否是目录
20 if [ -d $path ]
21 then
22         echo "$path 是目录"
23 else
24         echo "$path 不是目录"
25 fi

运行结果:

if else小结

表达式使用: condition 和中括号之间,一定要有空格

2.case

语法:

case $变量名 in
"值 1") 操作;;
esac

四、shell的循环

1. for循环

for val in ${list[*]}:
docommandcommand
done

代码示例:

1 #! /bin/bash
2 
3 list=(
4         service1
5         service2
6         service3
7         service4
8         service5
9 )
10 
11 for service in ${list[*]}
12 do
13         echo "检查服务:${service}"
14 done

运行结果:

2. while循环

语法:

while condition
docommandcommand
done

五、shell函数

1. 语法:

[ function ] funname [()]{action;[return int;]}

说明:

  • 1、可以带 function fun() 定义,也可以直接 fun() 定义,不带任何参数。
  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return 后跟数值 n(0-255).

2. 代码示例:

#!/bin/bashdemoFun(){echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

输出结果:

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

下面定义一个带有 return 语句的函数:

代码示例:

#!/bin/bashfunWithReturn(){echo "这个函数会对输入的两个数字进行相加运算..."echo "输入第一个数字: "read aNumecho "输入第二个数字: "read anotherNumecho "两个数字分别为 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

输出结果:

这个函数会对输入的两个数字进行相加运算...
输入第一个数字: 
1
输入第二个数字: 
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 ! 

函数返回值在调用该函数后通过 $? 来获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

注意: return 语句只能返回一个介于 0 到 255 之间的整数,而两个输入数字的和可能超过这个范围。

要解决这个问题,您可以修改 return 语句,直接使用 echo 输出和而不是使用 return:

funWithReturn(){echo "这个函数会对输入的两个数字进行相加运算..."echo "输入第一个数字: "read aNumecho "输入第二个数字: "read anotherNumsum=$(($aNum + $anotherNum))echo "两个数字分别为 $aNum 和 $anotherNum !"echo $sum  # 输出两个数字的和
}

六、函数参数

 在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数$2表示第二个参数...

 1. 带参数的函数示例:

#!/bin/bashfunWithParam(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"echo "第十个参数为 $10 !"echo "第十个参数为 ${10} !"echo "第十一个参数为 ${11} !"echo "参数总数有 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出结果:

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

另外,还有几个特殊字符用来处理参数:

参数处理说明
$#传递到脚本或函数的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

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

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

相关文章

《教育退费那些事儿:从困境到破局》

《教育退费那些事儿&#xff1a;从困境到破局》 教育退费&#xff1a;不容忽视的热点问题 在当今社会&#xff0c;教育消费已成为家庭支出的重要组成部分。无论是 K12 阶段的学科辅导、艺术特长培训&#xff0c;还是成人的职业技能提升、学历继续教育&#xff0c;家长和学生们…

老字号焕新案例:天猫代运营如何让传统品牌年轻化破圈

老字号焕新案例&#xff1a;天猫代运营如何让传统品牌年轻化破圈 在消费升级与年轻化浪潮的冲击下&#xff0c;传统老字号品牌常面临“有历史无活力、有产品无流量”的困境。如何借助电商平台实现品牌焕新&#xff0c;成为其破局的关键。品融&#xff08;PINKROON&#xff09…

高可靠低纹波国产4644电源芯片在工业设备的应用

摘要 随着工业自动化和智能化的飞速发展&#xff0c;工业设备对于电源芯片的性能和可靠性提出了前所未有的严格要求。电源芯片作为工业设备的核心供电组件&#xff0c;其性能直接影响到整个设备的运行效率和稳定性。本文以国科安芯的ASP4644四通道降压稳压器为例&#xff0c;通…

Vue组件-霓虹灯:技术解析与实现

Vue组件-霓虹灯&#xff1a;技术解析与实现 本文将详细解析如何使用Vue 3实现一个动态炫彩霓虹灯效果。 预览 概述 此Vue组件创建了一个由7个同心圆环组成的霓虹灯效果&#xff0c;每个圆环具有彩虹中的一种颜色&#xff08;红、橙、黄、绿、蓝、靛、紫&#xff09;。这些圆…

【实战教程】从零实现DeepSeek AI多专家协作系统 - Spring Boot+React打造AI专家团队协作平台

&#x1f680; 本项目是DeepSeek大模型应用系列的V3版本&#xff0c;基于V1和V2版本的功能进行全面升级&#xff0c;引入了多智能体协作机制&#xff01; 系列教程推荐阅读顺序&#xff1a; 【V1版本】零基础搭建DeepSeek大模型聊天系统 - Spring BootReact完整开发指南【V2版本…

第8章-5 sql的执行顺序

上一篇&#xff1a;《第8章-4 查询性能优化2》&#xff0c;接着来了解查询的执行顺序&#xff0c;了解顺序对于优化会有帮助。 1&#xff0c;sql编写顺序 select distinct 查询字段 from 表名 JOIN 表名 ON 连接条件 where 查询条件 group by 分组字段 having 分组后…

设计模式学习整理

目录 UML类图 设计模式六大原则 1.单一职责原则 2.里氏替换原则 3.依赖倒置原则 4.接口隔离原则 5.迪米特法则(最少知道原则) 6.开(放封)闭原则 设计模式分类 1.创建型模式 2.结构型模式 4.行为型模式 一、工厂模式(factory——简单工厂模式和抽象工厂模式) 1.1、…

Linux干货(二)

前言 从B站黑马程序员Linux课程摘选的学习干货&#xff0c;新手友好&#xff01;若有侵权&#xff0c;会第一时间处理。 目录 前言 1.cd pwd命令 1.cd命令的作用 2.pwd命令的作用 2.相对路径绝对路径和特殊路径符 1.相对路径和绝对路径 1.绝对路径 2.相对路径 2.特殊…

ngx_http_keyval_module动态键值管理

一、模块安装与验证 检查模块是否可用 nginx -V 2>&1 | grep --color -o ngx_http_keyval_module如果看到 ngx_http_keyval_module&#xff0c;说明模块已编译进 NGINX。 若未找到&#xff0c;请联系你的 NGINX 供应商&#xff0c;获取商业版或重新编译并启用该模块&am…

upload-labs通关笔记-第4关 文件上传之.htacess绕过

目录 一、.htacess 二、代码审计 三、php ts版本安装 1、下载ts版本php 2、放入到phpstudy指定文件夹中 3、修改php配置文件 4、修改php.ini文件 5、修改httpd.conf文件 &#xff08;1&#xff09;定位文件 &#xff08;2&#xff09;修改文件 6、重启小皮 7、切换…

LeetCode 88. 合并两个有序数组 | Python 最简写法 + 实战注释

在日常刷题和面试中,「合并两个有序数组」是一个经典基础题。虽然属于简单难度,但它非常考察你的数组操作技巧和代码优化能力。本篇文章将带你从基础解法入手,进阶到最简洁的三元表达式写法,理解每一行代码背后的逻辑。 📌 题目描述 给你两个按 非递减顺序 排列的整数数组…

Kafka进阶指南:从原理到实战

目录 一、Kafka 基础回顾 二、生产者进阶 2.1 数据生产流程深度解析 2.2 关键配置参数详解 2.3 序列化与自定义序列化器 三、消费者进阶 3.1 消费方式与原理 3.2 分区分配策略 3.2.1 Range&#xff08;范围&#xff09;策略 3.2.2 Round - Robin&#xff08;轮询&…

Lightpanda开源浏览器:专为 AI 和自动化而设计的无界面浏览器

​一、软件介绍 文末提供程序和源码下载 Lightpanda开源浏览器&#xff1a;专为 AI 和自动化而设计的无界面浏览器&#xff1b; Javascript execution Javascript 执行Support of Web APIs (partial, WIP)支持 Web API&#xff08;部分、WIP&#xff09;Compatible with Pla…

团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级

光照、材质与交互效果的精细控制&#xff0c;通常意味着复杂的技术挑战&#xff0c;但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中)&#xff0c;这一切都变得简单易用。通过最新团结引擎官方车模 Sample&#xff0c;开发者能切身感受到全新光照优化与编辑功能…

SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。 Ribbon 主要功能是提供客户端负载均衡算法和服务调用 Ribbon 客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等。 Ribbon 会基于某种规则&#xff08;如简单…

当 DeepSeek 遇见区块链:一场颠覆式的应用革命

目录 一、DeepSeek 与区块链的初印象二、技术融合&#xff1a;创新的基石2.1 强化学习优化智能合约2.2 混合专家系统适配多链2.3 语义理解增强合规性 三、应用实践&#xff1a;重塑行业格局3.1 DeFi 协议智能化跃迁3.2 GameFi 经济深度进化3.3 供应链金融信任增强 四、面临挑战…

vue3项目中使用CodeMirror组件的详细教程,中文帮助文档,使用手册

简介 这是基于 Vue 3 开发的 CodeMirror 组件。该组件基于 CodeMirror 5 开发&#xff0c;仅支持 Vue 3。 除了支持官方提供的各种语法模式外&#xff0c;还额外添加了日志输出展示模式&#xff0c;开箱即用&#xff0c;但不一定适用于所有场景。 如需完整文档和更多使用案例…

LeetCode热题100--240.搜索二维矩阵--中等

1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[1…

2025爬虫实战技巧:高效数据采集方案

2025爬虫实战技巧:高效数据采集方案 🔥 本文核心价值 HTTPS请求链路加密逆向解析动态Cookie生成机制破解Cloudflare等高级防护绕过方案分布式爬虫架构设计要点目录 2025爬虫实战技巧:高效数据采集方案🔥 本文核心价值一、现代反爬机制技术解析1.1 主流平台防护体系1.2 反…

绑定 SSH key(macos)

在 macOS 上绑定 Gitee 或 GitHub 的 SSH Key&#xff0c;通常分为以下几步操作&#xff0c;包括生成 SSH key、添加到 ssh-agent&#xff0c;并配置到 Gitee 或 GitHub 平台。 1. 检查是否已有 SSH Key ls -al ~/.ssh 看看是否已有 id_rsa 或 id_ed25519 等文件。如果没有就…