欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux?shell腳本學(xué)習(xí)指南

 更新時間:2022年09月23日 08:19:16   作者:englyf八戒  
這篇文章主要介紹了linux?shell腳本學(xué)習(xí)指南的相關(guān)資料,需要的朋友可以參考下

從頭一來二去閱讀語法和命令說明,對于腳本小白來說比較枯燥,難以堅持,所以這里選擇對一份完整的shell腳本代碼來逐行逐段解讀,希望可以渡一渡小白,幫助我們快速進入腳本的大門。

老司機要開車了:

#!/bin/sh

用注釋的形式說明文件打開類型,此處意指本腳本需要用 /bin/sh 打開。

#V1.0?Added?hardware?type?detection
#V1.1?xxxx-xx-xx?重構(gòu)腳本
#V1.2?xxxx-xx-xx?將日志信息輸出到U盤
#V1.3?xxxx-xx-xx?讀取存儲的檢測結(jié)果值
#V1.4?xxxx-xx-xx?添加校驗程序版本,U盤下有對應(yīng)版本信息文件才校驗

上面幾行表示注釋內(nèi)容。單行注釋,以#開始

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

聲明變量 UDiskMountDir 并賦值。

$()括號內(nèi)填入命令并執(zhí)行,最后返回輸出到變量 UDiskMountDir。

df命令顯示liinux系統(tǒng)上的文件系統(tǒng)磁盤使用情況統(tǒng)計。后邊還可以帶選項,執(zhí)行更復(fù)雜的輸出。命令后邊加 '|' 表示將此命令的輸出作為后邊緊接著的命令的輸入。

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

awk命令用于對文本處理,END表示執(zhí)行最后的運算或者打印最終的輸出結(jié)果,這里用于打印輸出,$NF 表示列數(shù),print $NF 表示打印最后一個字段,各個字段默認以空格劃分,可用選項 -F指定使用什么字符串來劃分。

LogFile=${UDiskMountDir}/Debug.log

聲明變量 LogFile 并以右邊的內(nèi)容賦值。將變量 UDiskMountDir 所代表的路徑名與后邊的字符串結(jié)合為新的文件名。一般命令中用到的文件名,要不是帶相對路徑的文件名,如 ./diretion/filename,就是帶絕對路徑的文件名,如 /root/diretion/filename

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

AllCheckPassed=true

聲明變量 AllCheckPassed 并賦值為true。

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

聲明函數(shù) AddError,輸入?yún)?shù)無需聲明。

變量 AllCheckPassed 賦值為true。

echo命令用于輸出字符串。echo "-200" > /tmp/VerCheckRes 將 -200 輸出到文件 /tmp/VerCheckRes 并覆蓋原有內(nèi)容。如果將符號 > 換成 >> 則是將內(nèi)容追加到最后位置。

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

聲明函數(shù) AddRecord。

if 表示 if 語句的開始。if[]方括號內(nèi)填判斷條件,如為 true 則執(zhí)行 then 后的語句,否則跳出 if 語句。fi表示 if 語句的結(jié)束。和 C 語言類似,if 語句也可以有 else 甚至 else if (shell 內(nèi)應(yīng)該寫成 elif)。if/elif 和 then 如果不在同一行則可以省略符號 ;。if [ ! -d "/userdata/recordsDir/" ] 判斷目錄 /userdata/recordsDir/ 是否存在,并對結(jié)果值取反(!)。

mkdir命令用于構(gòu)建目錄。帶選項 -p表示構(gòu)建路徑下所有的目錄。mkdir -p /userdata/recordsDir/創(chuàng)建目錄 /userdata/recordsDir/, /userdata/ 如果不存在也會被構(gòu)建。

echo "$*" > /userdata/recordsDir/test 將函數(shù)輸入的所有參數(shù)都輸出到文件 '/userdata/recordsDir/test' 并覆蓋原有內(nèi)容。'$*' 表示當前函數(shù)或者腳本的所有輸入?yún)?shù),由于在函數(shù)內(nèi)引用,所以這里表示函數(shù)的所有輸入?yún)?shù)。

sync命令用于數(shù)據(jù)同步。Linux 系統(tǒng)中寫入硬盤的數(shù)據(jù)往往會被先存放于 buffer 中,這樣是為了效率起見,但是如果系統(tǒng)突然斷電,那么數(shù)據(jù)就會丟失,這時可以調(diào)用 sync 將 buffer 中的數(shù)據(jù)同步到硬盤。

AddDebugLog2UDisk $* 調(diào)用函數(shù) AddDebugLog2UDisk 并傳入當前函數(shù)(AddRecord)的所有參數(shù)。

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

聲明函數(shù) AddDebugLog2UDisk。

echo "\$*" >>"$LogFile" 表示將函數(shù)的所有輸入?yún)?shù)輸出到變量 LogFile 表示的文件中,以追加的形式輸入到文件末尾。

sync同步數(shù)據(jù)到硬盤。

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

注釋內(nèi)容

rm?-f?"$LogFile"

rm命令用于移除文件。選項 -f表示強制。rm -f "$LogFile"強制移除變量 LogFile 代表的文件,變量 LogFile 存儲的是文件名,包括路徑。

echo?"0"?>?/tmp/VerCheckRes

輸出字符串 '0' 到文件 /tmp/VerCheckRes

sh?/data/bin/run_normal.sh

在當前的環(huán)境中使用另一個shell來執(zhí)行腳本文件 /data/bin/run_normal.sh,當前環(huán)境中變量的值可以在新腳本(/data/bin/run_normal.sh)中被使用(非引用,如果使用 source則變?yōu)橐茫?,新腳本文件屬性可以無執(zhí)行權(quán)限。sh后邊可以帶選項 -n、-x等,-n 用于進行shell腳本的語法檢查,-x用于實現(xiàn)shell腳本的逐句跟蹤調(diào)試并打印該行命令和狀態(tài)等。

sleep?2

阻塞當前進程,睡眠 2 秒,和 sleep 2s 同樣效果。sleep 2h 表示睡眠 2 小時。

sh?/tmp/App/kill.sh

執(zhí)行腳本文件 /tmp/App/kill.sh

killall?MachineCheckNode

殺掉進程 MachineCheckNode,MachineCheckNode 為進程名。

lastSNScanResult=$(cat?/userdata/recordsDir/scan)

讀取文件 /userdata/recordsDir/scan 內(nèi)容并賦值給變量 lastSNScanResult。

cat命令用于連接文件并輸出內(nèi)容到標準輸出。

AddDebugLog2UDisk?"last?sn?scan?result:$lastSNScanResult"

調(diào)用函數(shù) AddDebugLog2UDisk,并傳遞字符串 last sn scan result:$lastSNScanResult,$lastSNScanResult 獲取變量 lastSNScanResult 的值然后和前面的字符串結(jié)合成新的字符串。

#檢查SN和markData
if?[?!?-f?/data/bin/sysData/sn?];?then?
????AddRecord?"sn?missing"
????AddError
else
????snContent=$(cat?/data/bin/sysData/sn)
????AddRecord?"sn?is:$snContent"
????snLen=$(cat?/data/bin/sysData/sn?|?awk?'{print?length($0)}')
????if?[?"$snLen"?!=?"16"?]?;?then
????????AddRecord?"sn?length?error?$snLen"
????????AddError
????fi
fi

if [ ! -f /data/bin/sysData/sn ] 判斷文件 /data/bin/sysData/sn 是否是常規(guī)文件而且存在,'!' 表示對結(jié)果值取反。

如果文件 /data/bin/sysData/sn 找不到或者不是常規(guī)文件,則調(diào)用后邊的語句塊,直到 else 為止。調(diào)用函數(shù) AddRecord(傳入字符串 "sn missing") 和 AddError(無參數(shù)傳入)。

否則,獲取文件內(nèi)容并賦值給變量 snContent,調(diào)用函數(shù) AddRecord(輸入 sn is:$snContent", 字符串其中會插入變量 snContent 的值);聲明變量 snLen,賦值為命令 cat /data/bin/sysData/sn | awk '{print length($0)}'的執(zhí)行結(jié)果;判斷 snLen 是否不等于 16,是則調(diào)用函數(shù) AddRecord 和 AddError。

$(cat /data/bin/sysData/sn | awk '{print length($0)}') 讀取文件 /data/bin/sysData/sn 的內(nèi)容,通過管道('|')輸入到后一命令語句,awk 計算輸入內(nèi)容的第一字段的字符長度并輸出。

if?[?!?-f?/data/bin/sysData/markData?];?then?
????AddRecord?"markData?missing"
????AddError
fi

判斷文件 /data/bin/sysData/markData 是否不存在,不存在則調(diào)用后邊的語句(以 fi 為止)。

#檢驗版本信息
while?read?-r?line?||?[?-n?"${line}"?];?do
????[?"$line"?=?""?]?&&?continue
????item_filename=$(echo?"$line"?|?awk?-F":"?'{print?$1}')
????item_filemd5=$(echo?"$line"?|?awk?-F":"?'{print?$2}')
????if?[?!?-e?"$item_filename"?];?then
????????AddRecord?"$item_filename?missing"
????????AddError
????fi
????acture_md5=$(md5sum?"$item_filename"?|?awk?'{print?$1}')
????if?[?"$item_filemd5"?=?"$acture_md5"?];?then
????????continue
????else
????????AddRecord?"$item_filename"?"md5?diff!?file:"?"$item_filemd5"?"acture:"?"$acture_md5"
????????AddError
????fi
done?</tmp/MachineDecDir/check_md5list

while read xxx; do...
done </filename循環(huán)讀取文件名 filename 所指向的文件的內(nèi)容,每讀取一行存入 xxx 變量。read xxx為 while 語句的判斷語句,判斷語句和 do如果不在同一行,則 ;可省略,如:
while read xxxdo...
done </filename

read 后邊的 -r 表示讀取內(nèi)容過程中對特殊字符有效,如 / (輸入未結(jié)束需要換行繼續(xù)輸入的特殊符號),'/n' 等等。

[ -n "${line}" ] 判斷 line 的內(nèi)容不為空。而前邊的 '||' 表示前一語句 read -r line 返回 false 才執(zhí)行這個語句。

[ "$line" = "" ] && continue 表示如果 line 的內(nèi)容為空則執(zhí)行 continue;continue 命令用于跳過當前循環(huán)內(nèi)容回去執(zhí)行 while 判斷語句。

 item_filename=$(echo "$line" | awk -F":" '{print $1}') 聲明變量 item_filename 并以后邊語句執(zhí)行結(jié)果賦值。awk -F":" '{print $1}') 將輸入的內(nèi)容按照 : 來劃分字段并輸出第1個字段。awk -F":" '{print $2}') 則是將輸入的內(nèi)容按照 ':' 來劃分字段并輸出第2個字段。

if [ ! -e "$item_filename" ] 用于判斷變量 item_filename 代表的文件名所指的文件是否不存在。!表示取反。if 判斷的內(nèi)容為 true 則執(zhí)行 then 后邊的語句,直到 fi 為止,否則跳過。

md5sum "$item_filename" 表示計算變量 item_filename 代表的文件名所指的文件的MD5值。

 | awk '{print $1}' 將前一語句的輸出通過管道連接到后邊的這個語句的輸入,默認按照空格劃分內(nèi)容并輸出第1個字段內(nèi)容。

if [ "$item_filemd5" = "$acture_md5" ]; then 判斷 item_filemd5 和 acture_md5 所代表的內(nèi)容作為字符串是否一樣,是則執(zhí)行 then 后的語句。continue 指示程序執(zhí)行流程直接回到執(zhí)行 while 判斷語句。else 后的語句塊當 if 的判斷條件不為 true 時執(zhí)行。

#找到 U 盤路徑
UDiskMountDir=$(df?|?grep?/mnt/sd?|?awk?'END{print?$NF}')
#校驗mcu程序版本,U盤下有mcuversion.txt才校驗
UDiskMountDirfile="${UDiskMountDir}/SpecialDir/mcuversion.txt"
CurMcuVersionFile="/tmp/mcuversion.txt"
if?[?-f?"$UDiskMountDirfile"?];?then
????TargetMcuVersion=$(cat?"$UDiskMountDirfile")
????if?[?-f?"$CurMcuVersionFile"?];?then
????????CurMcuVersion="$(cat?"$CurMcuVersionFile")"
????????if?[?"$TargetMcuVersion"?!=?"$CurMcuVersion"?];?then
????????????AddRecord?"mcuversion?diff?cur:$CurMcuVersion?target:$TargetMcuVersion"
????????????AddError
????????fi
????else
????????AddRecord?"$CurMcuVersionFile?not?found"
????????AddError
????fi
fi

UDiskMountDirfile="${UDiskMountDir}/SpecialDir/mcuversion.txt" 聲明變量 UDiskMountDirfile 并賦值為其后的內(nèi)容,其后是將變量 UDiskMountDir 所代表的路徑名與后邊的字符串結(jié)合為新的文件名。

if 語句可以有多重嵌套,如上。

[ "$TargetMcuVersion" != "$CurMcuVersion" ] 判斷 TargetMcuVersion 和 CurMcuVersion 所代表的內(nèi)容是否不相等。

#寫入檢查結(jié)果
if?[?$AllCheckPassed?=?"true"?];?then
????AddRecord?"Pass"
else
????AddRecord?"Fail"
fi

if [ $AllCheckPassed = "true" ]; then 判斷 AllCheckPassed 的值是否等于字符串 "true",是則調(diào)用函數(shù) AddRecord 并傳入?yún)?shù)字符串 "Pass",否則調(diào)用函數(shù) AddRecord 并傳入?yún)?shù)字符串 "Fail"。

#啟動checkall
/data/bin/Factory/MachineCheckNode?MachineImcomingTest

調(diào)用絕對路徑下的程序 MachineCheckNode,并傳入字符串參數(shù) MachineImcomingTest。此種調(diào)用方式,要求程序文件 MachineCheckNode 具有可執(zhí)行的權(quán)限屬性x。想要查看指定路徑下所有文件或某個文件的屬性可以使用命令 ls -l查看,r表示可讀,w表示可寫,x表示可執(zhí)行。

username@DESKTOP-ABCDEF:/mnt/d/username/work/temp$ ls -l
total 0
drwxrwxrwx 1 username username 4096 May 21 16:10 Udisk_IQC

這篇講解到此為止,下期再見!

到此這篇關(guān)于linux shell腳本學(xué)習(xí)指南的文章就介紹到這了,更多相關(guān)linux shell腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解shell 變量的高級用法示例

    詳解shell 變量的高級用法示例

    這篇文章主要介紹了詳解shell 變量的高級用法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • shell -z和-n的使用區(qū)別

    shell -z和-n的使用區(qū)別

    本文將深入探討shell命令中的-z和-n選項,通過詳細解釋這兩個選項的工作原理和用途,幫助讀者更好地理解和掌握Shell腳本編寫,感興趣的可以了解一下
    2024-01-01
  • 深入了解Linux的文件權(quán)限

    深入了解Linux的文件權(quán)限

    Shell是操作系統(tǒng)外殼程序的統(tǒng)稱,Windos中的圖形化界面、Linux中的命令行外殼都是外殼程序。CentOS中的外殼程序被稱為bash。本文主要是和大家聊聊Linux中的文件權(quán)限,感興趣的可以了解一下
    2022-10-10
  • 利用Shell腳本循環(huán)讀取文件中每一行的方法詳解

    利用Shell腳本循環(huán)讀取文件中每一行的方法詳解

    讀取文件是我們在日常工作中經(jīng)常遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于利用Shell腳本循環(huán)讀取文件中每一行的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • Shell中關(guān)于exit 0的那些坑

    Shell中關(guān)于exit 0的那些坑

    在 shell 編程中,需慎用 exit 0,本文主要介紹了Shell中關(guān)于exit 0的那些坑,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Linux中cp命令的使用詳解

    Linux中cp命令的使用詳解

    cp?命令是?Linux?中一個重要的命令,你可能經(jīng)常會用到它,所以本文主要來和大家講講cp命令的具體使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • 創(chuàng)建Linux系統(tǒng)服務(wù)的方法

    創(chuàng)建Linux系統(tǒng)服務(wù)的方法

    這篇文章主要介紹了通過linux sh創(chuàng)建Linux系統(tǒng)服務(wù)的方法,需要的朋友可以參考下
    2014-01-01
  • Shell編程中while與for的區(qū)別及用法詳解

    Shell編程中while與for的區(qū)別及用法詳解

    在shell編程中經(jīng)常用到循環(huán),常用的循環(huán)有for和while循環(huán)兩種。while循環(huán)默認以行讀取文件,而for循環(huán)以空格讀取文件切分文件,本篇就結(jié)合現(xiàn)網(wǎng)的一些使用示例說說二者的用法和區(qū)別
    2016-02-02
  • shell產(chǎn)生隨機數(shù)七種方法的實現(xiàn)

    shell產(chǎn)生隨機數(shù)七種方法的實現(xiàn)

    這篇文章主要介紹了shell產(chǎn)生隨機數(shù)七種方法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • linux 環(huán)境 mysql寫入中文報錯

    linux 環(huán)境 mysql寫入中文報錯

    本篇文章主要介紹了linux 環(huán)境 mysql寫入中文報錯的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04

最新評論