【发布时间】:2015-05-01 01:54:36
【问题描述】:
我正在尝试使用以下脚本获取服务器上某些站点的磁盘使用情况,但每当我尝试运行它时都会收到此错误:
args.sh: line 50: syntax error near unexpected token `fi'
args.sh: line 50: `fi'
我看不到任何语法错误,但我显然做错了什么。谁能告诉我这是怎么回事?
这是我的代码:
#!/bin/bash
prefix="/var/www/html/"
suffix=".example.com"
path="$prefix$1$suffix"
args_length="$#"
paths_array=[]
args_array=("$@")
# If there is one argument, calculate disk usage of given site.
if [ args_length -eq 1];
then echo "Calculating disk usage..."
output=$(du -sh $path)
echo "This site is currently using $output"
exit 1
# If there are no arguments, calculate disk usage of all sites.
elif [ args_length -lt 1];
then echo "Calculating disk usage for all sites..."
# I haven't done this part yet!
exit 1
# If there is more than one site, calculate their disk usage
elif [ args_length > 1];
then echo "Calculating disk usage for selected sites..."
#Save arguments to sites_array
for x in args_array; do
paths_array[x] = args_array[x]
done
#Loop through array, creating paths.
for i in paths_array; do
site = paths_array[i]
paths_array[i] = "$prefix$site$suffix"
done
#Print out disk usage for each path in array.
for y in paths_array; do
output = $(du -sh $paths_array[y])
echo "This site is currently using $output"
fi
旁注:对于我尚未编写的部分,谁能告诉我应该如何将当前工作目录中所有文件夹的名称保存到数组中?我听说解析“ls”的输出是个坏主意,所以如果有人有的话,我正在寻找一种替代方法。
【问题讨论】:
-
在这些
[测试中,您在关闭]之前缺少空格。您还缺少最后一个块中的最终done。通过shellcheck.net 运行您的代码以查找这些(和其他问题)。您也没有使用for y in paths_array循环遍历数组内容,它只是循环遍历字符串paths_array。
标签: bash if-statement syntax