我是Stackoverflow的新手,也是bash-scripting的新手,所以请原谅我提出这样一个愚蠢的问题。我真的在这里浏览了很多答案,但似乎没有什么对我有用。
我正在尝试制作这个小脚本来检查wordpress.org的最新版本,并检查我是否已将该文件放在与脚本所在目录相同的目录中:
#!/bin/bash
function getVersion {
new=$(curl --head http://wordpress.org/latest.tar.gz | grep Content-Disposition | cut -d '=' -f 2)
echo "$new"
}
function checkIfAlreadyExists {
if [ -e $new ]; then
echo "File $new does already exist!"
else
echo "There is no file named $new in this folder!"
fi
}
getVersion
checkIfAlreadyExists
它的作用是输出:
jkw@xubuntu32-vb:~/bin$ ./wordpress_check
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
wordpress-3.4.1.tar.gz
in this folder! named wordpress-3.4.1.tar.gz
jkw@xubuntu32-vb:~/bin$
所以我用curl& grep& cut得到了正确的文件名,但变量有问题。当我在第5行打印它似乎没关系,但是当在第12行打印时,它看起来很有趣。此外,if语句不起作用,我确实将文件放在同一目录中。
如果我输出curl --head http://wordpress.org/latest.tar.gz |的结果grep Content-Disposition |在文本文件中剪切-d'=' - f 2,我似乎最终得到一个新行,这可能是问题吗?如果我将命令传递给xdd,它看起来像这样:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0000000: 776f 7264 7072 6573 732d 332e 342e 312e wordpress-3.4.1.
0000010: 7461 722e 677a 0d0a tar.gz..
..我无法理解它。
我试图通过 tr'\ n''\ 0'或 tr -d'\ n'管理命令,正如许多类似问题所示在这里,但似乎什么都不做。有什么想法吗?
PS:我也想知道线路在哪里.. % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
..来到我的shell输出。当我在终端中只运行命令 curl --head http://wordpress.org/latest.tar.gz 时,输出没有这样的任何行。
答案 0 :(得分:1)
以下是您的代码的工作版本,其中包含更改的评论。
#!/bin/bash
function latest_file_name {
local url="http://wordpress.org/latest.tar.gz"
curl -s --head $url | # Add -s to remove progress information
# This is the proper place to remove the carridge return.
# There is a program called dos2unix that can be used as well.
tr -d '\r' | #dos2unix
# You can combine the grep and cut as follows
awk -F '=' '/^Content-Disposition/ {print $2}'
}
function main {
local file_name=$(latest_file_name)
# [[ uses bash builtin test functionality and is faster.
if [[ -e "$file_name" ]]; then
echo "File $file_name does already exist!"
else
echo "There is no file named $file_name in this folder!"
fi
}
main