嵌入式学习day14(shell脚本)

news2024/9/24 15:19:38

一丶概念

          shell脚本的本质:shell命令的有序集合
          shell既是应用程序又是脚本语言,并且是解释型语言,不需要编译,解释一条执行一条。
          shell脚本编程:将shell命令结合一些按照一定逻辑集合到一起,写一个.sh文件,实现一个或多个功能,这个脚本不用编译直接执行

         创建shell脚本文件的步骤:
                                 1.  创建一个脚本文件      
touch xxx.sh
                                 2.  将脚本权限修改为可执行         
chmod 777 xxx.sh
                                 3.  编辑内容          
vi xxx.sh(可以在vscode中编辑脚本内容),第一行必须为#!/bin/bash,意思是必须用/bin/bash来执行
                                 4.  执行脚本          
./xxx.sh 或者 bash xxx.sh

二丶shell变量

            shell中允许建立变量存储数据,但是不支持数据类型 (如:整型、字符、浮点类型),所有赋值给变量的值都解释为一串字符

1.用户自定义变量

         一般用大写, 进行赋值用=, 左右两边不能有空格 引用变量前面加$

2.环境变量

         环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

         使用命令查看系统环境变量:printenv 或者 env


         export 变量名=值 临时终端有效
         永久生效只需要将这个命令放到 家目录下 .bashrc 文件中,当前用户永久有效
         若放到/etc/bash.bashrc 这个中间中就是所有用户永久有效

         HOME: /etc/passwd文件中列出的用户主目录
         PATH :shell搜索路径,就是是一系列目录,当执行命令时,linux就在这些目录下查找。

3.命令变量和命令行参数

         $0或者${0}是命令行的第一个参数,也就是包含脚本名的参数./xx.sh
         $1,$2...就是剩下的第二个第三个命令行参数了,以此类推
         $# 所有命令行参数的个数(除了第一个命令行参数)
         $@或者$* 所有命令行参数(除了第一个命令行参数)

4.预定义变量

         $? 前一个命令是否是正确的执行结果(0为真,非0为假)
         $$ 正在执行进程的ID号

三丶功能语句

1.说明性语句

         以 # 开始到该行结束,不被解释执行
         #!/bin/bash 告诉操作系统使用哪种类型的shell执行此脚本文件

2.功能性语句

(1).read

      功能:read从标准输入读入一行,并且赋值给后面的变量
      格式:read V1 V2 V3
                把读入行中的第一个单词赋值给V1变量,第二个单词赋值给V2,以此类推,把其余所有单词赋值给最后一个变量。
      read -p "提示语句" 变量列表: 可以将提示语句输出,同时输入变量

(2).expr

算术运算命令expr 主要用于进行简单的整数运算,包括 +、-、*、/、% 等操作

注意:
            1)  运算符左右两侧必须有空格
            2)  *和()必须加转义字符,\*、\( \)
            3)  expr语句可以直接输出运算结果

如:expr \( 12 + 3 \) \* 2
       NUM=`expr \( 12 + 3 \) \* 2`:将运算结果赋值给变量

(3).test

字符串测试:
                 s1 = s2 测试两个字符串的内容是否完全一样
                 s1 != s2 测试两个字符串的内容是否有差异
                 -z s1    测试s1 字符串的长度是否为0
                 -n s1    测试s1 字符串的长度是否不为0

#s1 = s2        测试两字符串的内容是否一样
    test "hello" = "world"
    echo $?    # 1        相等为真,不相等为假

#s1 != s2        测试字符串的内容是否有差异
    test "hello" != "hello"
    echo $?    # 1        相等为假,不相等为真
    
#-z s1            测试s1字符串长度是否为0
    test -z ""
    echo $?    # 0        字符串的长度为0,则为真
    test -z "hello"
    echo $?    # 1        字符串有长度,则为假
    
#-n s1            测试s1字符串的长度是否不为空  (空的时候为假,反之为真)
    test -n ""
    echo $?    # 1        字符串长度为空,则为假
    test -n "hello"
    echo $?    # 0        字符串有长度,则为真

整数的测试:

             a -eq b 测试a 与b 是否相等 equal
             a -ne b 测试a 与b 是否不相等 not equal
             a -gt b 测试a 是否大于b greater than
             a -ge b 测试a 是否大于等于b greater equal
             a -lt b 测试a 是否小于b litter than
             a -le b 测试a 是否小于等于b litter equal

#a -eq b            测试a和b是否相等的  # equal
    read A B
    test $A -eq $B 
    echo $?        # 如果两个数相等则为真,反之为假
#a -ne b            测试a和b是否不相等 # no equal
    read A B
    test $A -ne $B 
    echo $?        # 如果两个数不相等则为真,反之为假
#a -gt b            测试a是否大于b # greater than
    read A B
    test $A -gt $B 
    echo $?        # 如果a大于b则为真,反之为假   
#a -ge b            测试a是否大于等于b # greater equal than
    read A B
    test $A -ge $B 
    echo $?        # 如果a大于等于b则为真,反之为假   
#a -lt b            测试a是否小于b # less then
    read A B
    test $A -lt $B 
    echo $?        # 如果a小于b则为真,反之为假   
#a -le b            测试a是否小于等于b # less equal then
    read A B
    test $A -le $B 
    echo $?        # 如果a小于等于b则为真,反之为假

文件属性测试:
                 -d name 测试name 是否为一个目录
                 -f name 测试name 是否为普通文件
                 -e name 测试文件是否存在

#-d name            测试name是否是一个目录
    test -d 路径
    echo $?        # 如果name是目录则为真,反之为假
    
#-f name            测试name是否是一个普通文件
    test -f 路径
    echo $?        # 如果name是普通文件则为真,反之为假
    
#-e name            测试文件是否存在
    test -e 路径
    echo $?        # 如果文件或者目录存在则为真,反之为假

3.结构性语句

(1).if语句

基本结构:   if 条件
                     then
                     命令表1
                     else
                     命令表2
                     fi


多路分支结构:if 条件1
                         then
                         命令表1
                         elif 条件2
                         then
                         命令表2
                         fi
          注意:如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。if和fi是条件语句的语句括号, 必须成对使用;命令表中的命令可以是一条, 也可以是若干条。


嵌套结构:if 条件1
                  then
                  if 条件2
                  then
                  命令表1
                  fi
                  else
                  命令表2
                  fi

补充操作符:
               -o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true
               -a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false
               ! 非运算 例如 [ ! false ] 返回 true
               && 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false
               || 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true
               | 位或 例如 echo $[2|2]
              &位与 例如 echo $[2&1]

(2).case语句

                  case 变量 in
                  模式1)
                          命令表1
                   ;;
                  模式2)
                          命令表2
                   ;;
                   *)
                          命令表n
                   ;;
                   esac

(3).for循环

             for 变量名 in 单词表
             do
                 命令表
             done

执行顺序:
               变量依次取单词表中的各个单词,每次只取一个单词,就执行一次循环体中的命令,循环次数是由单词表中的单词数量决定,命令表中命令可以是一条。也可以是由分号或者换行符分开的多条

for语句的几种书写格式:
         (1)for i in 1 2 3 4 do....done : 变量i从单词表中取值
                               for I in 1 2 3 4 5 6 7 8 9 10 do ... done     
         (2)for i in {1..10} do...done: 变量i从1-10个数中取值
                               for I in {1..10} do ... done
         (3)for i do...done: 变量i从命令行取值,可以省略in单词表 


         (4)for ((i = 0; i < 10; i++)) do...done:书写格式类似c语言

(4).while循环

               while 命令或表达式

               do
                   命令表
               done
           while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。

(5).循环控制语句

           break n: 结束n循环
           continue n: 结束n层的本次循环,继续下一次循环
#!/bin/bash
for ((i=0;i<5;i++)) 
do 
    for ((j=0;j<5;j++)) 
    do 
        if [ $j -eq 3 ]
        then
            #break 1 ,跳出内层循环
            #break 2 ,跳出内层循环后跳出外层循环
            #continue 1 ,跳出一次内层循环,继续下一次循环
            continue 2    #跳出两次内层循环,继续下一次循环
        fi
        echo "$i : $j"  
    done 
done 

四丶数组

1 数组赋值

       (1)  arr=(1 2 3 4 5)

  (2)  arr=($1 $2 $3...)
  (3)  read a b c

        arr=($a $b $c)
  (4)  read -a arr

2.数组的调用

       ${arr[i]} #引用数组元素,数组元素下标0开始n-1结束

       arr[i]=10 #数组元素重新赋值
       ${arr[@]} #遍历数组
       ${#arr[@]} #数组元素个数

冒泡排序

五丶函数

1.函数定义方式

      (1)  函数名()

       {
        命令表
       }
(2)  function 函数名()

      {
      命令表
      }

2.函数调用

 #!/bin/bash
       fun ()
      {
        echo "hello world"
      }
      function add()
     {
       ((NUM=$1 + $2))
       echo $NUM
      }
      fun
      add 1 2

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

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

相关文章

springboot项目配置https证书

前言 springboot项目直接http访问不安全&#xff0c;如何开启https&#xff1f; 如何配置ssl 创建证书 注意:如果你有CA办法的数字证书&#xff0c;可以使用直接使用CA颁发的证书。非可信CA或者私人颁发的证书在浏览器地址栏会显示红色&#xff0c;不安全不受信任。 如果你没…

Mac/iPhone邮件APP绑定武大邮箱

Mac/iPhone邮件APP绑定武大邮箱 一、准备工作二、新增一个互联网账户三、设置收件箱和发件箱服务器 一、准备工作 武大邮箱账户&#xff0c;确保你知道自己的邮箱登陆密码。 下面的步骤是在Mac上操作&#xff0c;iPhone上的设置也是一样的&#xff0c;主要是收件箱和发件箱服…

DC-4 打靶渗透

一、信息收集 1、查看靶机MAC地址&#xff1a; 2、查看靶机的ip地址&#xff1a; nmap 192.168.13.0/24 3、查看靶机开放的端口&#xff1a; nmap -p- -sC -sT -sV -A 192.168.13.161 4、访问靶机的80端口&#xff1a; 5、扫描目录&#xff1a; dirsearch -u "http://192…

Redis远程字典服务器(3)——常用数据结构和单线程模型

目录 一&#xff0c;常用数据结构 1.0 前言 1.1 string 1.2 hash 1.3 list 1.4 set 1.5 zset 1.6 演示 二&#xff0c;关于单线程模型 2.1 关于Redis的单线程 2.2 Redis为什么快 一&#xff0c;常用数据结构 1.0 前言 Redis是采用键值对的方式来存储数据的&#…

pixel 3a 刷机和root 流程

1、下载镜像文件 官方下载出厂镜像刷入 或者直接下载手机本身自带的镜像。 下载地址&#xff1a;https://developers.google.com/android/images 找到对应手机的版本&#xff0c;可以通过指令 adb shell getprop 找到 [ro.bootimage.build.fingerprint]: [google/sargo/sargo:1…

代码随想录算法训练营第九天|151.翻转字符串里的单词 卡码网:55.右旋转字符串

LeetCode 151 翻转字符串里的单词 题目&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意…

超声波眼镜清洗机哪个品牌比较好用?四大高赞耐用单品全面测评

随着大家对健康卫生的关注不断提升&#xff0c;超声波清洗机逐渐受到佩戴眼镜人士的青睐。超声波清洗机是一种既方便又高效的智能清洁工具。它利用超声波技术&#xff0c;通过在眼镜表面产生高频振动&#xff0c;将污垢和油脂彻底分离&#xff0c;从而实现卓越的清洁效果。下面…

基于PSO-LSTM的多变量多特征数据分类预测

一、数据集 数据特征&#xff1a;12个多分类&#xff1a;4分类 二、PSO-LSTM网络 PSO-LSTM 网络是一种结合粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;和长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;的混合模型。它将 …

好领导都会用三招管好下属!

管不住人&#xff0c;你就当不好官&#xff0c;高明领导管人就靠这3大秘诀&#xff01; 秘诀一&#xff1a;敢于亮剑 身为领导&#xff0c;&#xff0c;有时候需要有勇气面对挑战和问题&#xff0c;勇于做出决策&#xff0c;拿出魄力&#xff0c;勇于亮剑&#xff0c;向一切宣…

【HarmonyOS NEXT星河版开发学习】小型测试案例11-购物车数字框

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 经过一周的学习&#xff0c;我发现还是进行拆分讲解效果会比较好&#xff0c;因为鸿蒙和前端十分的相识。主要就是表达的方式不同罢了…

2024年高教社杯全国大学生数学建模竞赛报名第一次通知!建议收藏!预测类模型及应用场景汇总

对于数学建模而言,算法模型选的对,文章写的顺~其中预测类模型是数模中常用的模型之一,通过预测模型,我们可以对未来的趋势和事件进行合理推测。今天,数模0error给大家汇总一下预测类模型及其应用场景,供大家参考,小伙伴们码住! 2024年高教社杯全大学生数学建模竞赛通知…

docker学习初体验

docker学习初体验 docker是什么 docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像&#xff08;Image&#xff09;&#xff0c;就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 roo…

四款口碑比较好充电宝排名,哪些性价比高?适合入手充电宝推荐

2024年快到下旬了&#xff0c;市场上的充电宝价格也是差不多都沉淀起来了。所以就性价比高的充电宝的入手时间来说&#xff0c;那确实是年底左右的时间挑选入手会比较好一点。而挑选性价比高的充电宝类型呢&#xff0c;那说充电宝&#xff0c;我个人其实也有入手过不少品牌的充…

晶体振荡器的频率容差与温度稳定性

晶体振荡器作为电子设备中不可或缺的频率源&#xff0c;其频率的准确性与稳定性至关重要。本文旨在阐述晶体振荡器的频率容差与温度稳定性的定义、测量单位及其在实际应用中的重要性。 一、频率容差定义及测量单位 频率容差是指晶体振荡器在特定条件下&#xff08;通常是25C的…

mysql 监控开始时间,结束时间,平均取n个时间点

需求 最近1小时 1分钟 60个点 最近3小时 5分钟 36个点 最近6小时 10分钟 36个点 最近12小时 20分钟 36个点 最近1天 1小时 24个点 最近3天 3小时 24个点 最近1周 6小时 28个点 如果你的递归查询支持递归CTE&#xff08;如MySQL 8.0&#xff09;&#xff0c;可以使用递归查询来…

[自学记录09*]关于模糊效果降采样优化性能的小实验

一、降采样在模糊中的优化 这两天接手了几个高度定制化的模糊&#xff0c;包括不限于放射和旋转状的径向模糊&#xff0c;移轴模糊&#xff0c;景深的散景模糊等等&#xff0c;这些效果在游戏中非常常见。 其实模糊的原理都差不多&#xff0c;无非就是对UV偏移后重新采样再求…

UI动画设计:提升用户体验的关键

传统的静态 UI 设计正在逐渐被淘汰&#xff0c;UI 动画设计正在脱颖而出。随着技术的成熟&#xff0c;UI 动画正试图超越现有的限制和规则&#xff0c;并通过应用程序形成、网站和其他产品的新互动模式。交互式动画也可以为 UI 设计增添活力&#xff0c;使用户界面更加丰富多彩…

【vue3|第20期】vue3中Vue Router路由器工作模式

日期&#xff1a;2024年8月6日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

ThreadLocal 详解(三)内存泄露原因,以及强弱引用

1、ThreadLocal内存泄漏 在Threadlocal的内部静态类中Entry将Threadlocal作为一个key&#xff0c;值作为value保存&#xff0c;他继承WeakReference&#xff0c;super(k)&#xff0c;代表了Threadlocal对象是一个弱引用&#xff1b; static class Entry extends WeakReference…

mysql中B+树的数据存储

B树索引基础分析 B树的定义 B树是一种自平衡的树形数据结构&#xff0c;常用于数据库和操作系统的索引结构。它具有以下特点&#xff1a; 所有数据都存储在叶子节点&#xff0c;非叶子节点仅存储键值和子节点的指针。 叶子节点之间通过指针相互连接&#xff0c;形成一个有序链…