当前位置: 首页 > 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;也已经成…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...