设为首页 加入收藏

TOP

尝试阅读理解一份linux shell脚本(一)
2023-07-23 13:34:02 】 浏览:73
Tags:解一份 linux shell 脚本

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/YkJsqlqsviWtHHArONv3Rw


从头一二去阅读语法和命令说明,对于脚本小白来说比较枯燥,难以坚持,所以这里选择对一份完整的shell脚本代码来逐行逐段解读,希望可以一渡小白,帮助我们快速进入脚本的大门_
司机要开车了:


#!/bin/sh

用注释的形式说明文件打开类型,此处意指本脚本需要用 /bin/sh 打开。

#V1.0 Added hardware type detection
#V1.1 xxxx-xx-xx 重构脚本
#V1.2 xxxx-xx-xx 将日志信息输出到U盘
#V1.3 xxxx-xx-xx 读取存储的检测结果值
#V1.4 xxxx-xx-xx 添加校验程序版本,U盘下有对应版本信息文件才校验

上面几行表示注释内容。单行注释,以#开始

UDiskMountDir=$(df | grep /mnt/sd | awk 'END{print $NF}')

声明变量 UDiskMountDir 并赋值。
$() 括号内填入命令并执行,最后返回输出到变量 UDiskMountDir。

df命令显示liinux系统上的文件系统磁盘使用情况统计。后边还可以带选项,执行更复杂的输出。命令后边加 '|' 表示将此命令的输出作为后边紧接着的命令的输入。

grep命令用于对文本按行搜索然后输出该行。英文全称 global search regular expression(RE) and print out the line。grep /mnt/sd 表示搜索输入信息里包含 /mnt/sd的一行,并输出该行。

awk命令用于对文本处理,END表示执行最后的运算或者打印最终的输出结果,这里用于打印输出,$NF 表示列数,print $NF 表示打印最后一个字段,各个字段默认以空格划分,可用选项 -F指定使用什么字符串来划分。

LogFile=${UDiskMountDir}/Debug.log

声明变量 LogFile 并以右边的内容赋值。将变量 UDiskMountDir 所代表的路径名与后边的字符串结合为新的文件名。一般命令中用到的文件名,要不是带相对路径的文件名,如 ./diretion/filename,就是带绝对路径的文件名,如 /root/diretion/filename

${UDiskMountDir} 表示引用变量 UDiskMountDir 的值。

AllCheckPassed=true

声明变量 AllCheckPassed 并赋值为true。

AddError()
{
    AllCheckPassed=false
    echo "-200" > /tmp/VerCheckRes
}

声明函数 AddError,输入参数无需声明。

变量 AllCheckPassed 赋值为true。

echo命令用于输出字符串。echo "-200" > /tmp/VerCheckRes 将 -200 输出到文件 /tmp/VerCheckRes 并覆盖原有内容。如果将符号 > 换成 >> 则是将内容追加到最后位置。

AddRecord()
{
    if [ ! -d "/userdata/recordsDir/" ];then
        mkdir -p /userdata/recordsDir/
    fi
    echo "$*" > /userdata/recordsDir/test
    sync
    AddDebugLog2UDisk $*
}

声明函数 AddRecord。

if 表示 if 语句的开始。if[]方括号内填判断条件,如为 true 则执行 then 后的语句,否则跳出 if 语句。fi表示 if 语句的结束。和 C 语言类似,if 语句也可以有 else 甚至 else if (shell 内应该写成 elif)。if/elifthen 如果不在同一行则可以省略符号 ;if [ ! -d "/userdata/recordsDir/" ] 判断目录 /userdata/recordsDir/ 是否存在,并对结果值取反(!)。

mkdir命令用于构建目录。带选项 -p表示构建路径下所有的目录。mkdir -p /userdata/recordsDir/创建目录 /userdata/recordsDir/, /userdata/ 如果不存在也会被构建。

echo "$*" > /userdata/recordsDir/test 将函数输入的所有参数都输出到文件 '/userdata/recordsDir/test' 并覆盖原有内容。'$*' 表示当前函数或者脚本的所有输入参数,由于在函数内引用,所以这里表示函数的所有输入参数。

sync命令用于数据同步。Linux 系统中写入硬盘的数据往往会被先存放于 buffer 中,这样是为了效率起见,但是如果系统突然断电,那么数据就会丢失,这时可以调用 sync 将 buffer 中的数据同步到硬盘。

AddDebugLog2UDisk $* 调用函数 AddDebugLog2UDisk 并传入当前函数(AddRecord)的所有参数。

AddDebugLog2UDisk()
{
    echo "$*" >>"$LogFile"
    sync
}

声明函数 AddDebugLog2UDisk。

echo "\$*" >>"$LogFile" 表示将函数的所有输入参数输出到变量 LogFile 表示的文件中,以追加的形式输入到文件末尾。

sync同步数据到硬盘。

#生成下/tmp/App/version.txt版本信息

注释内容

rm -f "$LogFile&qu
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇rsync 下一篇Linux系统安装Mysql8.0流程与遇到..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目