gpt4 book ai didi

linux - 返回字符串比较结果 - bash

转载 作者:太空狗 更新时间:2023-10-29 11:38:41 25 4
gpt4 key购买 nike

我正在编写一个比较两个文件的 md512sums 的小函数。我不能说我擅长 bash,但我需要返回一个简单的结果注释部分是长代码。它要求减少。

顺便说一句,如果有人有任何想法来改进我的代码,我将不胜感激。

function TestStage()
{
local URL="distfiles.gentoo.org/releases/${1:7:5}/current-stage3/${1}"
wget -q ${URL}.DIGESTS
local SUM_WEB=`cat ${1}.DIGESTS | sed '2q;d'`
local SUM_LOC=`openssl dgst -r -sha512 ${1}`
####### time to return
return [[ "${SUM_WEB:0:128}" == "${SUM_LOC:0:128}" ]]

#if [ "${SUM_WEB:0:128}" == "${SUM_LOC:0:128}" ]
#then
# rm ${1}.DIGESTS
# return 0
#else
# rm ${1}.DIGESTS
# return 1
#fi
}

您可能已经猜到了 $1stage3-<arch>-<release>.tar.bz2 .

最佳答案

改进:

TestStage() {
local url sum_web sum_loc
url="distfiles.gentoo.org/releases/${1:7:5}/current-stage3/${1}"
wget -q "$url.DIGESTS"
{ read; read -r sum_web; } < "$1.DIGESTS"
sum_loc=$(openssl dgst -r -sha512 "$1")
####### time to return
[[ "${sum_web:0:128}" = "${sum_loc:0:128}" ]]
return
}
  • 使用小写变量名。
  • 不使用已弃用的 function关键字。
  • 使用$(...)而不是反引号。
  • 使用 bash 内置函数代替 sed获取文件的第二行 "$1.DIGESTS" .这节省了一个进程 spawn 和一个子 shell(以及对 cat 的无用使用)。
  • return自己会返回前一条语句的返回码,这里是测试语句。
  • 一次声明所有局部变量。

如果你不关心文件 $1.DIGESTS将被保存,你也可以这样做:

TestStage() {
local url sum_web sum_loc
url="distfiles.gentoo.org/releases/${1:7:5}/current-stage3/${1}"
{ read; read -r sum_web; } < <(wget -q -O- "$url.DIGESTS")
sum_loc=$(openssl dgst -r -sha512 "$1")
####### time to return
[[ "${sum_web:0:128}" = "${sum_loc:0:128}" ]]
return
}

现在,"${1:7:5}"据我了解,将扩展到 stage3-<arch>-<release>.tar.bz2 的第二个字段(其中字段由连字符分隔)。你也可以这样做:

IFS=- read _ arch _ <<< "$1"

在这种情况下,您的函数将是:

TestStage() {
local arch url sum_web sum_loc
IFS=- read _ arch _ <<< "$1"
url="distfiles.gentoo.org/releases/$arch/current-stage3/${1}"
{ read; read -r sum_web; } < <(wget -q -O- "$url.DIGESTS")
sum_loc=$(openssl dgst -r -sha512 "$1")
####### time to return
[[ "${sum_web:0:128}" = "${sum_loc:0:128}" ]]
return
}

希望这对您有所帮助。

然后,用作:

if TestStage "stage3-<arch>-<release>.tar.bz2"; then
# return value is true, proceed accordingly
else
# return value is false, proceed accordingly
fi

关于linux - 返回字符串比较结果 - bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com