码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux嵌入式学习之Ubuntu入门(六)shell脚本详解


    系列文章内容

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

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

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

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

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

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


    文章目录

    • 系列文章内容
    • 前言
    • shell脚本详解
      • shell脚本语法
        • 外部输入
        • 整型计算
        • test命令
        • [ ]判断符
      • 默认变量
      • 条件判断
      • 函数
      • 循环


    前言

    最近痛定思痛,觉得自己应该硬杠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

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

  • 相关阅读:
    (数据科学学习手札156)地图可视化神器kepler.gl 3.0版本发布
    简易版 图书管理系统
    实验18:模拟温度传感器实验
    HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效——错误代码:0x8007000d
    webpack高级特性,相关性能优化也基于该知识点,优化见下一篇
    Vue:第一个Vue程序和vue-router路由
    【project 】软件使用
    长篇图解etcd核心应用场景及编码实战
    AMD锐龙R5600G&VEGA7 GPU环境搭建
    vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9
  • 原文地址:https://blog.csdn.net/zerokingwang/article/details/133364462
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号