• Linux嵌入式学习之Ubuntu入门(六)shell脚本详解


    系列文章内容

    Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍

    Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等

    Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

    Linux嵌入式学习之Ubuntu入门(四)Makefile

    Linux嵌入式学习之Ubuntu入门(五)汇编语法学习

    Linux嵌入式学习之Ubuntu入门(六)shell脚本详解



    前言

    最近痛定思痛,觉得自己应该硬杠Linux,确实有些难度,但是我觉得学习之后一定会大有用处,而且我不希望局限在当下的情况,学习完嵌入式Linux之后,我想学习制作一些更加有难度,更加锻炼人的东西。

    内容有些多,我觉得最好是过一遍,好好记录一下,一些开发最好把暂时用不到的模块跳过,时间不够。


    shell脚本详解

    shell脚本类似windows的批处理文件,将连续可执行命令写成一个文件,提供数组、循环、条件判断的等功能,shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

    shell脚本是纯文本文件,命令从上而下,一行一行执行,扩展名为.sh

    在这里插入图片描述
    第一行一定为:(表示使用bash,表示实现shell的环境路径)

    #!/bin/bash
    
    • 1

    在这里插入图片描述
    例如将echo命令写在文件中,在命令窗输出字符串
    在这里插入图片描述
    如上图所示,通过 ls -l 查看tesh.sh文件的权限,之后通过chmod(change mode)修改文件的权限,之后即可运行,但是修改回去后发现,只有读写是不能执行的。

    关于文件权限相关见:Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

    详细学习linux的shell脚本推荐《鸟哥的Linux私房菜》

    shell脚本语法

    外部输入

    程序功能:外部输入进行变量赋值
    这就涉及到shell的命令编写语法了,需要学习积累
    在这里插入图片描述
    read命令读取输入值,类比C语言的各种函数吧

    read命令参数含义
    read -a arrayname把单词清单读入arrayname的数组里
    read -p “text”打印提示(text),等待输入,并将输入存储在REPLY中。
    read -r line允许输入包含反斜杠。
    read -t 3指定读取等待时间为3秒。
    read -n 2 var从输入中读取两个字符并存入变量var,不需要按回车读取。
    read -d " :" var用定界符“ :”结束输入行。

    整型计算

    程序功能:输入两个整型完成加法运算:
    在这里插入图片描述
    shell还支持整型运算,数值计算用 $(表达式),如上图

    test命令

    程序功能:查看文件是否存在:
    在这里插入图片描述
    程序功能:测试输入字符串是否相等:
    在这里插入图片描述

    test命令参数含义
    -e当路径存在时返回真
    -f当路径存在且为文件时返回真
    -d当路径存在且为文件夹时返回真
    -z当str为空时返回真
    -n当str为非空时返回真
    =两个字符串相等时返回真
    ==两个字符串相等时返回真,同=
    !=两个字符串不相等时返回真

    还有大于小于,各种逻辑运算符的参数,之后用到了再积累

    [ ]判断符

    程序功能:判断字符串相等。
    【】前后要有空格,同时记得变量加上双引号,可以用==或者!=
    在这里插入图片描述
    如果不加双引号,那么这个变量就不可赋值带空格的字符串,因为系统会识别为多个变量。发送错误提示:

    在这里插入图片描述
    在这里插入图片描述
    first赋值为a,系统输出1,first赋值”1 2“,系统会识别为两个变量,这样就不是判断字符串相等

    默认变量

    程序功能:测试各个默认变量的作用
    在这里插入图片描述
    在这里插入图片描述
    0   0~ 0 n,表示shell脚本的参数,shlle脚本命令本身为$0
    $#:#表示最后一个参数的标号。(参数的个数)
    $@:表$1、$2、$3…即所有的参数的集合

    条件判断

    程序功能:判断输入为Y或者N,并输出语句 在这里插入图片描述
    格式:

    /第一种
    if  条件判断 ; then
     //判断成立要做的事情
    fi
    
    /第二种
    if
      条件判断 ; then
     //条件判断成立要做的事情
    else
     //条件判断不成立要做的事情。
    fi
    
    /第三种
    if  条件判断 ; then
     //条件判断成立要做的事情
    elif [条件判断]; then    //可以叠加多个elif
    //条件判断成立要做的事情
    else
     //条件判断不成立要做的事情。
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    程序功能:*这里代表的是通配符,表示所有符号,如果输入参数为a或者b,会输出语句,其他输入都进入通配符的程序块
    在这里插入图片描述

    //类似C的switch case语句
    case $变量 in
    “第1个变量内容”)
    	程序段
    	;;	//表示该程序块结束!!
    “第2个变量内容”)
    	程序段;;
    “第n个变量内容”)
    	程序段
    	;;
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    函数

    在这里插入图片描述
    在这里插入图片描述

    function fname () {
    	//函数代码段
    }
    
    • 1
    • 2
    • 3

    还支持传参:a b在这里是传递的参数,也就是C语言里面的实参
    在这里插入图片描述
    在这里插入图片描述

    循环

    while循环:
    在这里插入图片描述
    在这里插入图片描述

    while [条件] 	//括号内的状态是判断式
    do			//循环开始
    	//循环代码段
    done
    
    //还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:
    until [条件]
    do
    //循环代码段
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    for循环:
    在这里插入图片描述
    在这里插入图片描述

    for var in con1 con2 con3……
    do
    //循环代码段
    done
     
    for循环数值处理,写法
    for((初始值; 限制值; 执行步长))
    do
    //循环代码段
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Abnova荧光原位杂交(FISH)探针解决方案
    Google Earth Engine(GEE)——单景影像导出到Google 硬盘中
    JavaSE:异常处理
    航拍无人机技术,航拍无人机方案详解,无人机摄影技术
    SaaSBase:什么是Asana?
    【C++】从零开始的CS:GO逆向分析1——寻找偏移与基址的方法
    前端开发实习生面试总结
    【Vue-Demo】倒计时3秒后返回首页
    RabbitMQ工作队列
    代码质量与安全 | “吃狗粮”能够影响到代码质量?来了解一下!
  • 原文地址:https://blog.csdn.net/zerokingwang/article/details/133364462