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 

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

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

相关文章

【uni-app】

准备工作&#xff08;Hbuilder&#xff09; 1.下载hbuilder&#xff0c;插件使用Vue3的uni-app项目 2.需要安装编译器 3.下载微信开发者工具 4.点击运行->微信开发者工具 5.打开微信开发者工具的服务端口 效果图 准备工作&#xff08;VScode&#xff09; 插件 uni-cr…

c++day3

stack.h #ifndef STACK_H #define STACK_H #include <iostream> //#define max 128 using namespace std; class Stack { private:int* stack;//数组指针int top;//栈顶元素int max;//栈容量 public://构造函数Stack();//析构函数~Stack();//定义拷贝构造函数Stack(cons…

Android窗口层级(Window Type)分析

前言 Android的窗口Window分为三种类型&#xff1a; 应用Window&#xff0c;比如Activity、Dialog&#xff1b;子Window&#xff0c;比如PopupWindow&#xff1b;系统Window&#xff0c;比如Toast、系统状态栏、导航栏等等。 应用Window的Z-Ordered最低&#xff0c;就是在系…

matlab如何遍历文件夹及子文件夹下的所有文件

需求 有一个比较深层的文件夹&#xff0c;每个文件夹及其子文件夹下都可能存在我所需要的csv文件&#xff0c;写一个函数&#xff0c;输入文件夹路径后可以返回所有符合要求的csv文件。 代码实现 % folder_path为输入的文件夹&#xff0c;str为指定的文件所特有的关键字&…

Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave

Vue导航守卫以我自己的理解就是监听页面进入,修改,和离开的功能。每个守卫接受三个参数 to: Route: 即将要进入的目标路由对象 from: Route: 当前导航正要离开的路由 next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。 next(): 进行…

docker运行并进入MySQL容器

1、运行容器 $ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql这是一个使用Docker命令行工具来启动一个MySQL容器的命令。下面&#xff0c;让我们来详细解析这条命令&#xff1a; docker run docker: Docker的命令行工具。 run: Docke…

Codeforces Round 827 (Div. 4) D 1e5+双重for循环技巧

Codeforces Round 827 (Div. 4) D 做题链接&#xff1a;Codeforces Round 827 (Div. 4) 给定一个由 n个正整数 a1,a2,…,an&#xff08;1≤ai≤1000&#xff09;组成的数组。求ij的最大值&#xff0c;使得ai和aj共质&#xff0c;否则−1&#xff0c;如果不存在这样的i&#…

ChatGPT企业版来了,速度翻倍,无使用限制

美国时间8月28日&#xff0c;OpenAI宣布了自ChatGPT推出以来最重大的新闻&#xff1a;将推出ChatGPT企业版&#xff0c;企业版ChatGPT将直接对接GPT-4&#xff0c;提供无限制访问、高级数据分析功能、定制服务等服务&#xff0c;并支持处理更长文本输入的长上下文窗口。 OpenAI…

Jetsonnano B01 笔记3:GPIO上拉下拉-输入输出读取

今日继续我的jetsonnano学习之路&#xff0c;今日学习的是GPIO的上拉下拉&#xff0c;输入输出的读取&#xff0c;文章贴出完整操作步骤过程&#xff0c;贴出源码。 目录 Linux常用文件命令&#xff1a; ls&#xff08;list&#xff09;列表&#xff1a; man&#xff1a; …

页面页脚部分CSS分享

先看效果&#xff1a; CSS部分&#xff1a;&#xff08;查看更多&#xff09; <style>body {display: grid;grid-template-rows: 1fr 10rem auto;grid-template-areas: "main" "." "footer";overflow-x: hidden;background: #F5F7FA;min…

有哪些Linux可以替代centerOS的

有哪些Linux可以替代centerOS的 CentOS是一个非常流行的企业级Linux发行版&#xff0c;但是在2020年12月&#xff0c;CentOS宣布将停止提供长期支持&#xff08;LTS&#xff09;版本&#xff0c;这对于很多企业和用户来说是一个巨大的打击。以下是一些可以替代CentOS的Linux发…

如何使用SQL系列 之 如何在MySQL中使用触发器

引言 当使用关系型数据库和结构化查询语言(SQL)时&#xff0c;对数据的大多数操作都是显式执行查询的结果&#xff0c;例如SELECT、INSERT或UPDATE。 然而&#xff0c;SQL数据库也可以被指令在特定事件发生时通过触发器自动执行预定义的操作。例如&#xff0c;您可以使用触发…

【微服务】五. Nacos服务注册

Nacos服务注册 5.1 Nacos服务分级存储模型Nacos服务分级存储模型&#xff1a;服务集群属性&#xff1a;总结&#xff1a; 5.2 根据集群负载均衡总结 5.3 Nacos服务实例的权重设置总结&#xff1a; 5.6 环境隔离namespace总结 5.7 Nacos和Eureka的对比总结 5.1 Nacos服务分级存储…

C#数据类型:object、var和dynamic的比较与应用

文章目录 引言&#xff1a;一、object类型&#xff1a;object类型的使用场景&#xff1a;object类型的限制&#xff1a; 二、var类型&#xff1a;var类型的使用场景&#xff1a;var类型的限制&#xff1a; 三、dynamic类型&#xff1a;dynamic类型的使用场景&#xff1a;dynami…

buildroot中C语言使用libconfig的实例

首先在buildroot中开启libconfig 在config中添加 BR2_PACKAGE_LIBCONFIGy 下面是官方给出来的3个实例 /* ----------------------------------------------------------------------------libconfig - A library for processing structured configuration filesCopyright (…

科技云报道:AI时代,对构建云安全提出了哪些新要求?

科技云报道原创。 随着企业上云的提速&#xff0c;一系列云安全问题也逐渐暴露出来&#xff0c;云安全问题得到重视&#xff0c;市场不断扩大。 Gartner 发布“2022 年中国 ICT 技术成熟度曲线”显示&#xff0c;云安全已处于技术萌芽期高点&#xff0c;预期在2-5年内有望达到…

Material Design系列探究之LinearLayoutCompat

谷歌Material Design推出了许多非常好用的控件&#xff0c;所以我决定写一个专题来讲述MaterialDesign&#xff0c;今天带来Material Design系列的第一弹 LinearLayoutCompat。 以前要在LinearLayout布局之间的子View之间添加分割线&#xff0c;还需要自己去自定义控件进行添加…

自动驾驶多任务框架Hybridnets——同时处理车辆检测、可驾驶区域分割、车道线分割模型部署(C++/Python)

一、多感知任务 在移动机器人的感知系统&#xff0c;包括自动驾驶汽车和无人机&#xff0c;会使用多种传感器来获取关键信息&#xff0c;从而实现对环境的感知和物体检测。这些传感器包括相机、激光雷达、雷达、惯性测量单元&#xff08;IMU&#xff09;、全球导航卫星系统&am…

Spark 增量抽取 Mysql To Hive

题目要求&#xff1a; 抽取ds_db01库中customer_inf的增量数据进入Hive的ods库中表customer_inf。根据ods.user_info表中modified_time作为增量字段&#xff0c;只将新增的数据抽入&#xff0c;字段名称、类型不变&#xff0c;同时添加静态分区&#xff0c;分区字段为etl_date&…

SpringCloud(二)

1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#…