当前位置: 首页 > 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 

http://www.lryc.cn/news/162369.html

相关文章:

  • Linux CentOS7命令及命令行
  • 【C++入门到精通】C++入门 ——搜索二叉树(二叉树进阶)
  • 学成在线-网站搭建
  • stm32同芯片但不同flash工程更换Device出现报错
  • Element UI实现每次只弹出一个Message消息提示
  • 「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识
  • 解决Redis分布式锁主从架构锁失效问题的终极方案 含面试题
  • 建站系列(三)--- 网络协议
  • jetson orin nx无显示器启动
  • 【APUE】标准I/O库
  • es6---模块化
  • 【项目 计网12】4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信
  • 创建简单的 Docker 数据科学映像
  • angualr:CSS一个div内两个子元素的高度自适应
  • Java基础之static关键字
  • iPhone 15 Pro有5项重大设计升级,让iPhone 15看起来很无聊
  • xCode14.3.1运行MonkeyDev出现“Executable Not Found“的解决办法
  • C# Emgu.CV+Tesseract实现识别图像验证码
  • ORACLE 11.2.0.4 RAC Cluster not starting cssd with Cannot get GPnP profile
  • Converting Phase Noise to Random Jitter(Cycle-to-Cycle)
  • HashMap知识总结
  • PLC编码器测速(限幅滤波+中心差分法求导SCL源代码)
  • SW的stp文件转成CAD格式文件学习笔记
  • 【数据结构】栈---C语言版(详解!!!)
  • sqlserver 联表查询、子查询、窗口函数、聚合函数等概念与例子
  • GO学习之 消息队列(Kafka)
  • 搭建自己的OCR服务,第三步:PPOCRLabel标注工具安装
  • Java学习笔记37——网络编程01
  • powershell 搜索文本并返回行号
  • 网络原理