• C高级 DAY3


    一、shell中的变量

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

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

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

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

    使用变量时在变量前加$

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

    不使用${变量名} 

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

     使用${变量名} 

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

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

    修饰变量关键字

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

    位置变量

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

    $数字

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

    命令置换符

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

    sudo apt-get install lolcat

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

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

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

    二、shell中的数组

    1. C中
    2. int arr[4]={1,2,3,4};
    3. shell:
    4. 数组名=(1 2 3 4) ----->每个元素之间以空格作为分隔
    5. shell中支持稀疏数组
    6. 数组名=([下标]=初始值1 [下标]=初始值2 ·····)
    7. #!/bin/bash
    8. arr=(12 90 89 100)
    9. #shell中支持稀疏数组,下标不连续的数组
    10. brr=([0]=90 [3]=70 [7]=900)
    11. crr[0]=29 #给crr数组中下标为0的元素赋值
    12. crr[3]=78 #给crr数组中下标为3的元素赋值
    13. #再重新给brr中没有提供的下标的元素赋值
    14. brr[4]=67
    15. echo ${brr[4]}
    16. 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对字符串的运算

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

    五、shell中的分支语句

    if...else分支

    1. []就是test指令
    2. #单分支结构
    3. if [ test语句 ] -----> if test 表达式
    4. then
    5. 语句块
    6. fi
    7. #双分支
    8. if [ test语句 ] -----> if test 表达式
    9. then
    10. 语句块
    11. else
    12. 条件不成立执行的语句块
    13. fi
    14. #多分支语句
    15. if [ test语句 ] -----> if test 表达式
    16. then
    17. 语句块
    18. elif [ test语句 ] ------> elif test 表达式
    19. then
    20. 条件不成立执行的语句块
    21. fi
    22. #!/bin/bash
    23. num1=90
    24. num2=300
    25. #if [ $num1 -le $num2 ]
    26. if test $num1 -le $num2
    27. then
    28.  echo "num1<=num2"
    29. fi

  • 相关阅读:
    一网打尽——线粒体基因组高级分析
    202212 青少年等级考试机器人实操真题六级试卷
    Python列表操作指南:索引、切片、遍历与综合应用
    【计算机毕设案例推荐】洋州影院购票管理系统SpringBoot+Vue
    Git 代码库 gogs 部署私服及 https 配置手册
    【c++】基于无锁循环队列的线程池的实现
    信号与系统2——LTI
    springboot基于Java的多元化智能选课系统毕业设计源码040909
    svg图片调整大小和颜色
    多输入多输出 | MATLAB实现CNN-BiGRU卷积双向门控循环单元多输入多输出
  • 原文地址:https://blog.csdn.net/weixin_69028524/article/details/132791520