国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux shell編程學(xué)習(xí)筆記44:編寫(xiě)一個(gè)腳本,將md5sum命令執(zhí)行結(jié)果保存到變量中,進(jìn)而比較兩個(gè)文件內(nèi)容是否相同

這篇具有很好參考價(jià)值的文章主要介紹了Linux shell編程學(xué)習(xí)筆記44:編寫(xiě)一個(gè)腳本,將md5sum命令執(zhí)行結(jié)果保存到變量中,進(jìn)而比較兩個(gè)文件內(nèi)容是否相同。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

0 前言

在?Linux shell編程學(xué)習(xí)筆記42:md5sumhttps://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501

中,我們提到編寫(xiě)一個(gè)在Linux系統(tǒng)下比較兩個(gè)文件內(nèi)容是否相同的腳本。

1?基本思路

基本思路是:

從命令行輸入兩個(gè)文件說(shuō)明符

用md5sum和cut命令獲取兩個(gè)文件的md5校驗(yàn)值

比較兩個(gè)文件的md5校驗(yàn)值

如果兩個(gè)文件的md5校驗(yàn)值相同,說(shuō)明兩個(gè)文件內(nèi)容相同。

否則說(shuō)明兩個(gè)文件不同。

其中有兩個(gè)難點(diǎn):

1.文件的md5值的獲取

2.md5值的比較

對(duì)于第1個(gè)難點(diǎn),我們的解決辦法是:用cut命令從md5sum的執(zhí)行結(jié)果中把md5校驗(yàn)值提取出來(lái)。

關(guān)于cut命令的用法可以參考:

Linux shell編程學(xué)習(xí)筆記43:cut命令https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501

對(duì)于第2個(gè)難點(diǎn),我們可以把提取出來(lái)的md5校驗(yàn)值保存到變量中。

下面我們來(lái)研究一下實(shí)現(xiàn)的具體辦法。

2 創(chuàng)建測(cè)試用的文件

2.1 測(cè)試文件a.txt

purpleEnduer @ bash \w $ echo -e "no\tname\tmusic\tsport" > a.txt
purpleEnduer @ bash \w $ echo -e "1\taa\t100\t100" >> a.txt
purpleEnduer @ bash \w $ echo -e "2\tbb\t99\t99" >> a.txt
purpleEnduer @ bash \w $ cat a.txt
no ? ? ?name ? ?music ? sport
1 ? ? ? aa ? ? ?100 ? ? 100
2 ? ? ? bb ? ? ?99 ? ? ?99

?md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

2.2?測(cè)試文件b.txt

我們直接用cp命令將a.txt 復(fù)制為b.txt

purpleEnduer @ bash \w $ cp a.txt b.txt
purpleEnduer @ bash \w $ cat b.txt
no ? ? ?name ? ?music ? sport
1 ? ? ? aa ? ? ?100 ? ? 100
2 ? ? ? bb ? ? ?99 ? ? ?99

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

2.3 測(cè)試文件 c.txt

purpleEnduer @ bash \w $ echo -e "no\tname\tmusic\tsport" > c.txt
purpleEnduer @ bash \w $ echo -e "3\tcc\t88\t88" >> c.txt
purpleEnduer @ bash \w $ echo -e "4\tdd\t77\t77" >> c.txt
purpleEnduer @ bash \w $ cat c.txt
no ? ? ?name ? ?music ? sport
3 ? ? ? cc ? ? ?88 ? ? ?88
4 ? ? ? dd ? ? ?77 ? ? ?77

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

3 用cut命令從md5sum的執(zhí)行結(jié)果中提取md5校驗(yàn)值

3.1 用md5sum命令計(jì)算文件a.txt的md5校驗(yàn)值

purpleEnduer @ bash \w $ md5sum a.txt
80938ffba186be260c0629fed44ff53a ?a.txt

?md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

md5sum命令計(jì)算md5校驗(yàn)值后返回信息的格式是:

md5校驗(yàn)值? 文件名

第1部分 md5校驗(yàn)值 和? 第2部分 文件名之間是用空格分隔的。

3.2 用cut命令和管道提取md5校驗(yàn)值

我們使用cut命令,指定分隔符是空格,并選擇第1個(gè)字段

purpleEnduer @ bash \w $ md5sum a.txt | cut -d' ' -f1
80938ffba186be260c0629fed44ff53a

這樣我們就把文件a.txt的md5校驗(yàn)值提取出來(lái)了。

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

4?將命令執(zhí)行結(jié)果保存到變量中

我們可以使用如下形式的 shell 命令置換特性,將命令的輸出存儲(chǔ)到變量中:

方法1:

變量名=$(命令 [命令選項(xiàng) ...] [參數(shù) ...])

方法2:

變量名=`命令 [命令選項(xiàng) ...] [參數(shù) ...]`

4.1 用第1種方法將?文件a.txt 的md5校驗(yàn)值保存到變量a

?

purpleEnduer @ bash \w $ a=$(md5sum a.txt | cut -d' ' -f1)
purpleEnduer @ bash \w $ echo $a
80938ffba186be260c0629fed44ff53a?

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

4.2 用第2種方法將?文件c.txt 的md5校驗(yàn)值保存到變量b

purpleEnduer @ bash \w $ b=`md5sum c.txt | cut -d' ' -f1`
purpleEnduer @ bash \w $ echo $b
d22c52262de65e6e5dcb47a389eb04c8

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

5 編寫(xiě)通過(guò)比較md5校驗(yàn)值判斷兩個(gè)文件內(nèi)容是否相同的腳本

5.1 創(chuàng)建腳本sf.sh?

sf.sh 的內(nèi)容如下:

# Show program information
echo -e "\n========\nsamefile v 1.0 by PurpleEndurer\n========\n"

# Check the number of parameters
if [ $# != 2 ]; then
  echo -e "The number of parameters is incorrect.\nUsage: samefile file1 file2"
else

  # Get the md5 checksum of file1
  a=$(md5sum $1 | cut -d" " -f1)
  if [ ${#a} != 32 ]; then
     echo "$1 MD5 checksum error"
     return 1
  fi
  echo "The MD5 checksum of file $1 is:" $a

  # Get the md5 checksum of file2

  b=`md5sum $2  | cut -d" " -f1`
  if [ ${#b} != 32 ]; then
     echo "$2 MD5 checksum error"
     return 2
  fi
  echo "The MD5 checksum of file $2 is:" $b

  # Check whether two strings are equal
  if [ $a = $b ]; then
     echo 'These files is same.'
  else
     echo 'These files is not same.'
  fi
fi

創(chuàng)建命令如下:?

purpleEnduer @ bash ~ $ cp /dev/stdin sf.sh
echo -e "\n========\nsamefile v 1.0 by PurpleEndurer\n========\n"
if [ $# != 2 ]; then
? echo -e "The number of parameters is incorrect.\nUsage: samefile file1 file2"
else
? a=$(md5sum $1 | cut -d" " -f1)
? if [ ${#a} != 32 ]; then
? ? ?echo "md5 error"
? ? ?exit 1
? fi
? echo "The MD5 of file $1 is:" $a

? b=`md5sum $2 ?| cut -d" " -f1`
? if [ ${#b} != 32 ]; then
? ? ?echo "md5 error"
? ? ?exit 2
? fi

? echo "The MD5 of file $2 is:" $b
? if [ $a = $b ]; then
? ? ?echo 'These files is same.'
? else
? ? ?echo 'These files is not same.'
? fi
fi

purpleEnduer @ bash ~ $?

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

由于腳本比較長(zhǎng),所以我們用?cp /dev/stdin sf.sh來(lái)創(chuàng)建它。

對(duì)這條命令不熟悉的朋友,可以參閱:

Linux shell編程學(xué)習(xí)筆記14:編寫(xiě)和運(yùn)行第一個(gè)shell腳本hello world!https://blog.csdn.net/Purpleendurer/article/details/133915687

?注意:在輸入所有內(nèi)容后要按Ctrl+D結(jié)束。

5.2 比較a.txt 和 b.txt 內(nèi)容是否相同

purpleEnduer @ bash ~ $ . sf.sh a.txt b.txt

========
samefile v 1.0 by PurpleEndurer
========

The MD5 checksum of file a.txt is: 040da8e416ea8877d9b91959cd986593
The MD5 checksum of file b.txt is: 040da8e416ea8877d9b91959cd986593
These files is same.

purpleEnduer @ bash ~ $?

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

文件a.txt 和 b.txt 的?md5校驗(yàn)值相同,所以兩個(gè)文件內(nèi)容相同。

5.3?比較a.txt 和 c.txt 內(nèi)容是否相同

purpleEnduer @ bash ~ $ . sf.sh a.txt c.txt

========
samefile v 1.0 by PurpleEndurer
========

The MD5 of file a.txt is: 040da8e416ea8877d9b91959cd986593
The MD5 of file c.txt is: 30a0ce6033957f499c6f0ac904781fa0
These files is not same.

purpleEnduer @ bash ~ $?

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

文件a.txt 和 c.txt 的?md5校驗(yàn)值相同,所以兩個(gè)文件內(nèi)容相同。

5.4?比較a.txt 和 不存在文件 x.txt 內(nèi)容是否相同

purpleEnduer @ bash ~ $ . sf.sh a.txt x.txt

========
samefile v 1.0 by PurpleEndurer
========

The MD5 checksum of file a.txt is: 8b039d79547840fef49dadb7f3853eae
md5sum: x.txt: No such file or directory
x.txt MD5 checksum error
purpleEnduer @ bash ~ $?

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut

由于第2個(gè)文件x.txt并不存在,所以sf.sh會(huì)顯示出錯(cuò)信息后退出。

5.5 傳遞參數(shù)數(shù)量不正確,會(huì)給出出錯(cuò)信息和命令正確用法

purpleEnduer @ bash ~ $ . sf.sh

========
samefile v 1.0 by PurpleEndurer
========

The number of parameters is incorrect.
Usage: samefile file1 file2
purpleEnduer @ bash ~ $ . sf.sh a.txt

========
samefile v 1.0 by PurpleEndurer
========

The number of parameters is incorrect.
Usage: samefile file1 file2
purpleEnduer @ bash ~ $ . sf.sh a.txt b.txt c.txt

========
samefile v 1.0 by PurpleEndurer
========

The number of parameters is incorrect.
Usage: samefile file1 file2
purpleEnduer @ bash ~ $?

md5sum -c 值賦給變量,麒麟操作系統(tǒng),編程資料,Linux世界,linux,學(xué)習(xí)筆記,shell編程,腳本編程,文件比較,md5sum,cut?

沒(méi)有傳遞參數(shù),只傳遞了1個(gè)參數(shù),或傳遞了3個(gè)參數(shù),都會(huì)給出出錯(cuò)信息和命令正確用法。

6 后記

sf.sh算是我寫(xiě)的第1個(gè)具有實(shí)用價(jià)值的腳本,這是開(kāi)了一個(gè)好頭,希望后續(xù)能夠?qū)懗龈喔玫膶?shí)用腳本。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-846583.html

到了這里,關(guān)于Linux shell編程學(xué)習(xí)筆記44:編寫(xiě)一個(gè)腳本,將md5sum命令執(zhí)行結(jié)果保存到變量中,進(jìn)而比較兩個(gè)文件內(nèi)容是否相同的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【運(yùn)維工程師學(xué)習(xí)三】Linux中Shell腳本編寫(xiě)

    【運(yùn)維工程師學(xué)習(xí)三】Linux中Shell腳本編寫(xiě)

    Shell程序有很多, 如 Korn shell(ksh)、Bourne Again shell(bash)、C shell(包括csh與tcsh) 等等, 各主要操作系統(tǒng)下缺省的shell: AIX下是 Korn Shell Solaris缺省的是 Bourne shell FreeBSD缺省的是 C shell HP-UX缺省的是 POSIX shell Linux缺省的是 Bourne Again shell 但這種在命令行中的命令是即時(shí)輸出結(jié)果的,不

    2024年02月11日
    瀏覽(21)
  • 【Shell編程練習(xí)】編寫(xiě) shell 腳本,打印 9*9 乘法表

    【Shell編程練習(xí)】編寫(xiě) shell 腳本,打印 9*9 乘法表

    輸出Hello World 通過(guò)位置變量創(chuàng)建 Linux 系統(tǒng)賬戶及密碼 監(jiān)控內(nèi)存和磁盤(pán)容量,小于給定值時(shí)報(bào)警 猜大小 輸入三個(gè)數(shù)并進(jìn)行升序排序 編寫(xiě)腳本測(cè)試 192.168.4.0/24 整個(gè)網(wǎng)段中哪些主機(jī)處于開(kāi)機(jī)狀態(tài),哪些主機(jī)處于關(guān)機(jī)狀態(tài) 運(yùn)行結(jié)果: seq 是一個(gè)用于生成數(shù)字序列的命令。它的基本語(yǔ)

    2024年01月17日
    瀏覽(29)
  • 編寫(xiě)一個(gè)阿里云DDNS的shell腳本

    首先,您需要獲取阿里云的AccessKey ID和AccessKey Secret,以便于通過(guò)API進(jìn)行操作。 然后,可以使用cURL命令,向阿里云的API發(fā)送HTTP請(qǐng)求,來(lái)實(shí)現(xiàn)動(dòng)態(tài)DNS的功能。 以下是一個(gè)簡(jiǎn)單的阿里云DDNS shell腳本的示例: ``` #!/bin/bash access_key_id=\\\" \\\" access_key_secret=\\\" \\\" domain=\\\" \\\" RR=\\\" \\\" ip= curl -s http:/

    2024年02月05日
    瀏覽(18)
  • shell 編寫(xiě)一個(gè)帶有進(jìn)度條的程序安裝腳本

    shell 編寫(xiě)一個(gè)帶有進(jìn)度條的程序安裝腳本

    使用 shell 寫(xiě)一個(gè) 軟件安裝腳本,帶有進(jìn)度條 在這個(gè)示例中,使用 ANSI 轉(zhuǎn)義序列來(lái)實(shí)現(xiàn)覆蓋原來(lái)的打印信息,并保持進(jìn)度條在同一行顯示。通過(guò)使用 r 進(jìn)行回車(chē),然后使用 \\033[K 清除當(dāng)前行的內(nèi)容,可以實(shí)現(xiàn)覆蓋效果。 在 print_progress 函數(shù)中,首先清除當(dāng)前行的內(nèi)容,然后構(gòu)

    2024年02月11日
    瀏覽(25)
  • Linux shell腳本編寫(xiě)

    Linux shell腳本編寫(xiě)

    一、常用shell腳本指令 echo: 輸出指定的文本或變量值到標(biāo)準(zhǔn)輸出。 read: 從標(biāo)準(zhǔn)輸入讀取用戶輸入,并將其保存到指定的變量中。 if: 執(zhí)行條件語(yǔ)句,如果滿足指定條件則執(zhí)行特定操作,否則執(zhí)行其他操作。 for: 循環(huán)執(zhí)行特定操作,每次迭代更新變量值。 while: 循環(huán)執(zhí)行

    2024年02月16日
    瀏覽(30)
  • 一篇文章教會(huì)你如何編寫(xiě)一個(gè)簡(jiǎn)單的Shell腳本

    一篇文章教會(huì)你如何編寫(xiě)一個(gè)簡(jiǎn)單的Shell腳本

    Shell腳本概念 Shell 腳本是一種用于自動(dòng)化執(zhí)行一系列命令和操作的腳本文件。它使用的是 Shell 解釋器(如 Bash、Korn Shell、Zsh 等)來(lái)解釋和執(zhí)行其中的命令。Shell 腳本通常用于編寫(xiě)簡(jiǎn)單的任務(wù)和工作流程,可以幫助我們進(jìn)行系統(tǒng)管理、批量處理、自動(dòng)化部署等任務(wù)。 以.sh后綴

    2024年02月10日
    瀏覽(30)
  • Linux shell編程學(xué)習(xí)筆記27:tput

    Linux shell編程學(xué)習(xí)筆記27:tput

    除了stty命令,我們還可以使用tput命令來(lái)更改終端的參數(shù)和功能。 tput 命令的主要功能有:移動(dòng)更改光標(biāo)、更改文本顯示屬性(如顏色、下劃線、粗體),清除屏幕特定區(qū)域等。 ?tput [選項(xiàng)] [參數(shù)] 命令格式: ? tput setab n?:?設(shè)置背景色,set text?attributes background color ? tput

    2024年02月05日
    瀏覽(26)
  • Linux shell編程學(xué)習(xí)筆記35:seq

    Linux shell編程學(xué)習(xí)筆記35:seq

    在使用 for 循環(huán)語(yǔ)句時(shí),我們經(jīng)常使用到序列。比如: for i in 1 2 3 4 5 6 7 8 9 10; do echo \\\"$i * 2 = $(expr $i * 2)\\\"; ?done 其中的 1 2 3 4 5 6 7 8 9 10; 就是一個(gè)整數(shù)序列 。 為了方便我們使用數(shù)字序列,Linux提供了seq命令,這個(gè)命令是取自單詞 sequence 的前3個(gè)字母。比如: for i in $(seq 1 10) ;

    2024年02月04日
    瀏覽(25)
  • Linux shell編程學(xué)習(xí)筆記25:tty

    Linux shell編程學(xué)習(xí)筆記25:tty

    在 1830 年代和 1840 年代,開(kāi)發(fā)了稱(chēng)為電傳打字機(jī)(teletypewriters)的機(jī)器,這些機(jī)器可以將發(fā)件人在鍵盤(pán)上輸入的消息“沿著線路”發(fā)送在接收端并打印在紙上。 電傳打字機(jī)的名稱(chēng)由teletypewriters, 縮短為teletypes,并最終縮短為 TTY。 電傳打字機(jī):teletypewriters → ?teletypes →?t

    2024年02月05日
    瀏覽(31)
  • Linux shell編程學(xué)習(xí)筆記36:read命令

    Linux shell編程學(xué)習(xí)筆記36:read命令

    ?*更新日志? *2023-12-18 1.根據(jù)[美] 威廉·肖特斯 (Willian?shotts)所著《Linux命令行大全(第2版)》 ? ? ? ? ? ? ? ? ? ? ? ? 更新了-e、-i、-r選項(xiàng)的說(shuō)明 ? ? ? ? ? ? ? ? ? ? ? 2.更新了 2.8 的實(shí)例,增加了gif動(dòng)圖 ? ? ? ? ? ? ? ? ? ? ? 3.補(bǔ)充了-i的應(yīng)用實(shí)例 2.12 目錄 目錄

    2024年02月04日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包