当前位置: 首页 > news >正文

C高级 DAY3

一、shell中的变量

shell本身是擅长运行指令,是一种弱数据类型语言

它与c语言中定义变量有所不同

C中:
存储类型 数据类型 变量名;shell中:
变量=变量的值       ----->如果变量的值中间没有空格直接使用
变量='变量的值'     ----->变量的值中间有空格
变量="变量的值"     ----->使用一个已有的变量给新的变量赋值,并且赋值中有空格时
''内,$变量名,不会被展开

注意:shell中等号两边不允许有空格,空格会被识别为一个指令

使用变量时在变量前加$

$变量名        ${变量名}        无法区分变量名时使用

不使用${变量名} 

name="John"
echo "$nameDoe"  # 这将不会输出任何东西,因为Shell会尝试查找一个名为nameDoe的变量

 使用${变量名} 

name="John"
echo "${name}_Doe"  # 这将输出 "John_Doe"

shell脚本的本质:命令的集合

修饰变量关键字

readonly  ---->只读不能修改
unset     ---->清空变量(不能清空只读(readonly)的变量)
local     ---->定义局部变量(只能在函数中使用)

位置变量

用来接收脚本的外部传参(在命令行传递过来)

$数字

注意:9以上的数字需要加{}如${10} ${11}...

命令置换符

拿到指令输出的结果(赋值给变量)

sudo apt-get install lolcat

自动换行`` :反引号,esc键下面就是``   ----->常用
$()

二者是一个效果,只是想要使用反引号得需要下载

$():命令替换        ${}:变量替换或变量操作

二、shell中的数组

C中
int arr[4]={1,2,3,4};shell:
数组名=(1 2 3 4)    ----->每个元素之间以空格作为分隔shell中支持稀疏数组
数组名=([下标]=初始值1 [下标]=初始值2 ·····)#!/bin/bash 
arr=(12 90 89 100)   #shell中支持稀疏数组,下标不连续的数组 
brr=([0]=90  [3]=70  [7]=900) crr[0]=29   #给crr数组中下标为0的元素赋值 
crr[3]=78   #给crr数组中下标为3的元素赋值  #再重新给brr中没有提供的下标的元素赋值 
brr[4]=67 echo ${brr[4]} 
echo ${crr[3]}

访问数组中的所有元素

${数组名[*]}        ${数组名[@]}

如果要记录数组中元素个数

${#数组名[#]}

三、shell中的输入输出

输出

echo        默认不解析转义字符并且会自动换行

-e:让echo指令解析转义字符

-n:取消换行

输入

read  变量名  
read -s 变量名    ---->输入的内容不回显
read -p "提示信息" 变量名   ----->-p回显提示信息
read -n 字符个数  变量名    ----->控制输入的字符个数,当超过会自动停止
read -t 秒数 变量名         ----->控制读入数据的时间,如果指定时间内不输入会自动停止
read -a 数组名    ---->输入数组

四、shell中的算术运算

shell本身不擅长算术运算,需要借助于运算符和其他指令

(())         $[]         let         expr

(())

使用方法:

  1. ((表达式1,表达式2,表达式3,····))每一个表达式都会执行,取到最后一个表达式的结果
  2. (())内使用变量时,可以加$也可以不加$
  3. (())内的运算符两侧,可以有空格也可以没有空格
  4. 变量名=$((表达式)),获取(())的运算结果
  5. 可以直接在(())内进行赋值操作,((var1 = var1+var2))

$[]

使用方法: (仍然支持幂运算和自增自减运算)

  1. 变量名=$[表达式1,表达式2,表达式3,····],每一个表达式都执行,获取最后一个表达式的结果
  2. 运算时,运算符两侧可以有空格也可以没有空格
  3. 使用变量时,可以加$也可以不加$
  4. $[]本质上会遗留一个计算结果在,运算所在行,可以选择直接echo $[表达式] ,变量名=$[表达式]

let

使用方法:

  1. let 变量名=表达式 ----->let和变量名中间一定有空格
  2. let使用变量可以加$,也可以不加$
  3. let运算时,运算符两侧一定不能有空格
  4. let 表达式,运算是可以进行的但是没有办法接收运算的结果

expr

expr是一条指令

使用方法:

  1. expr使用变量的值时,必须加$
  2. 运算符两侧必须加空格 (不支持幂运算和自增自减运算)
  3. expr在使用时,一些字符需要转义,*,>,<,&,|······(简单的expr语句,可以先在命令行敲出来,出现语法错误说明有转义字符)
  4. expr直接回显指令的执行结果到终端

expr对字符串的运算

match str1  str2返回str2在str1中完全匹配的个数(str2可以作为str1中子串)        substr STRING POS LENGTH如果字符串长度不够截取长度,就把字符串中所有的内容都截取出来从string中的第pos个位置开始截取长度为length的子串(pos从1开始) 
index STRING CHARS返回字符在字符串中第一次出现的位置,如果是多个字符,返回最先在字符串中出现的字符的下标(下标从1开始) 
length STRING求字符串的长度

五、shell中的分支语句

if...else分支

[]就是test指令
#单分支结构
if [ test语句 ]    -----> if  test 表达式 
then语句块
fi#双分支
if [ test语句 ]    -----> if  test 表达式 
then语句块
else 条件不成立执行的语句块
fi#多分支语句
if [ test语句 ]    -----> if  test 表达式 
then语句块
elif [ test语句 ]   ------> elif test 表达式 
then条件不成立执行的语句块
fi#!/bin/bash 
num1=90 
num2=300 
#if [ $num1 -le $num2 ] 
if test $num1 -le $num2 
then echo "num1<=num2" 
fi 

相关文章:

C高级 DAY3

一、shell中的变量 shell本身是擅长运行指令&#xff0c;是一种弱数据类型语言 它与c语言中定义变量有所不同 C中&#xff1a; 存储类型 数据类型 变量名;shell中&#xff1a; 变量变量的值 ----->如果变量的值中间没有空格直接使用 变量变量的值 ----->变量…...

Linux CentOS7命令及命令行

Linux CentOS7中命令及命令行是非常重要的概念。对大多数初学者来说是既熟悉又了解甚少。本文初步讨论这方面的内容&#xff0c;与同行者交流。 一、命令 命令又称为指令&#xff0c;&#xff08;英语命令 command&#xff0c;可用简写cmd表示&#xff09;&#xff0c;在终端…...

【C++入门到精通】C++入门 ——搜索二叉树(二叉树进阶)

阅读导航 前言一、搜索二叉树简介1. 概念2. 基本操作⭕搜索操作&#x1f36a;搜索操作基本代码&#xff08;非递归&#xff09; ⭕插入操作&#x1f36a;插入操作基本代码&#xff08;非递归&#xff09; ⭕删除操作&#x1f36a;删除操作基本代码&#xff08;非递归&#xff0…...

学成在线-网站搭建

文章目录 代码素材来自b站pink老师 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>学成在线首…...

stm32同芯片但不同flash工程更换Device出现报错

目录 1. 问题描述2. 解决方案 1. 问题描述 stm32同芯片但不同flash工程更换Device出现报错 2. 解决方案 更换Device&#xff0c;我是从ZE换为C8&#xff1a; 把这个从HD更换为MD 解决&#xff01;...

Element UI实现每次只弹出一个Message消息提示

前言 在开发Web应用程序时&#xff0c;我们经常需要使用消息提示来向用户展示重要信息。Element UI提供了一个方便易用的组件——Message&#xff0c;可以用于显示各种类型的消息提示。 然而&#xff0c;默认情况下&#xff0c;当多个消息提示同时触发时&#xff0c;它们会依…...

「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识

本文主要介绍使用Vue进行前端开发的一些必备知识&#xff0c;比如&#xff1a;Vue应用实例&#xff0c;Vue的组件概念&#xff0c;模板语言和模板语法&#xff0c;计算属性&#xff0c;路由配置等等。 文章目录 本系列前文传送门前言一、Vue实例&#xff1a;项目入口二、模板语…...

解决Redis分布式锁主从架构锁失效问题的终极方案 含面试题

面试题分享 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档AI绘画stab…...

建站系列(三)--- 网络协议

目录 相关系列文章前言一、定义二、术语简介三、协议的组成要素四、网络层次划分五、常见网络协议划分六、常用协议介绍&#xff08;一&#xff09;TCP/IP&#xff08;二&#xff09;HTTP协议&#xff08;超文本传输协议&#xff09;&#xff08;三&#xff09;SSH协议 相关系列…...

jetson orin nx无显示器启动

sudo apt-get install xserver-xorg-core-hwe-18.04 sudo apt-get install xserver-xorg-video-dummy在 /usr/share/X11/xorg.conf.d/ 中添加 xorg.conf 文件。 Section "Monitor"Identifier "Monitor0"HorizSync 28.0-80.0VertRefresh 48.0-75.0Modeline…...

【APUE】标准I/O库

目录 1、简介 2、FILE对象 3、打开和关闭文件 3.1 fopen 3.2 fclose 4、输入输出流 4.1 fgetc 4.2 fputc 4.3 fgets 4.4 fputs 4.5 fread 4.6 fwrite 4.7 printf 族函数 4.8 scanf 族函数 5、文件指针操作 5.1 fseek 5.2 ftell 5.3 rewind 6、缓冲相关 6.…...

es6---模块化

main.js import { bar } from "./module1"; import module2 from "./module2"; bar() module2()module1.js // 多变量导出&#xff0c;导入变量需要变量名一对一映射 export const module1module1 export function bar(params) {console.log(module1) }m…...

【项目 计网12】4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信

文章目录 4.32UDP通信实现udp_client.cudp_server.c 4.33广播bro_server.cbro_client.c 4.34组播multi_server.cmulti_client.c 4.35本地套接字通信ipc_server.cipc_client.c 4.32UDP通信实现 udp_client.c #include <stdio.h> #include <stdlib.h> #include <…...

创建简单的 Docker 数据科学映像

推荐&#xff1a;使用NSDT场景编辑器快速搭建3D应用场景 为什么选择 Docker for Data Science&#xff1f; 作为一名数据科学家&#xff0c;拥有一个标准化的便携式分析和建模环境至关重要。Docker 提供了一种创建可重用和可共享的数据科学环境的绝佳方法。在本文中&#xff…...

angualr:CSS一个div内两个子元素的高度自适应

问题&#xff1a; 如题 参考&#xff1a; CSS一个div内两个子元素的高度自适应-腾讯云开发者社区-腾讯云...

Java基础之static关键字

目录 静态的特点第一章、静态代码块第二章、静态属性第三章、静态方法调用静态方法时静态方法中调用非静态方法时 第四章、static关键字与其他关键字 友情提醒 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 静态的特点…...

iPhone 15 Pro有5项重大设计升级,让iPhone 15看起来很无聊

距离苹果9月份的发布会还有不到一周的时间&#xff0c;我们很快就会第一次看到iPhone 15系列。源源不断的传言表明&#xff0c;这一代人将对大多数机型进行另一次增量更新&#xff0c;这对那些想换iPhone 14或更旧手机的人来说是个坏消息。 但这一次的高端选择&#xff0c;iPh…...

xCode14.3.1运行MonkeyDev出现“Executable Not Found“的解决办法

安装MonkeyDev遇到的坑 环境&#xff1a;Xcode Version 14.3.1 (14E300c) 错误提示 is not a valid path to an executable file. 报错 /Users/xxxx//Library/Developer/Xcode/DerivedData/MonTest-ccparhdyzjuqhjdergwrngpfwwoh/Build/Products/Debug-iphoneos/MonTest.app…...

C# Emgu.CV+Tesseract实现识别图像验证码

效果图&#xff0c;简单的还行&#xff0c;复杂的。。。拉跨 懒得写讲解了&#xff0c;全部源码直接上吧 /// <summary>/// 验证码识别/// </summary>public partial class FrmCodeIdentify : FrmBase{private string _filePath;// 原图像Image<Bgr, byte> …...

ORACLE 11.2.0.4 RAC Cluster not starting cssd with Cannot get GPnP profile

最近&#xff0c;处理一次oracle 11.2.0.4 rac cluster由于cssd无法启动&#xff0c;导致集群一个节点的CRS集群无法正常启动的故障。原本&#xff0c;计划变更是从ASM剔除磁盘&#xff0c;解除存储到数据库服务器的映射&#xff1b;磁盘已经成功从ASM剔除&#xff0c;也已经成…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂&#xff0c;难以孤立地评估各个组件的贡献&#xff0c;传统的检索方法在处理复杂推理任务时可能不够有效&#xff0c;特别是在需要理解实体间关系或多跳知识的情况下。先说结论&#xff0c;看完后感觉这个框架性能上不会比Grap…...