我无法解决此bash脚本(版本4.1.2)中的语法错误

时间:2016-06-09 19:29:23

标签: linux bash scripting

下面是我用于复制数据的bash脚本代码,但我在toLowerCase(Locale)行中遇到语法错误。我是bash的新手,所以无法理解语法有什么问题。任何帮助表示赞赏。

SUBSTRING

2 个答案:

答案 0 :(得分:1)

bash中,变量的名称只能包含大写,小写,数字和下划线。在字符类术语中,那将是:

[[:alnum:]_]

任何用户定义变量的名称也不能以数字开头。

在您的情况下,您将变量定义为:

**SUBSTRING=....
$SUBSTRING=....

由于前面所述的原因,这些声明是不正确的。

答案 1 :(得分:1)

这并非旨在为您提供完整的解决方案,但是评估者会向您提供有关出错的信息。

for循环可以用globs编写,不需要echo和命令替换。实际上$(echo */)的输出如果没有引用则会word splittingglobbing

for i in *; do
  [ -e "$i" ] || continue
  ..

似乎你想在第二次迭代时从i得到基本名称。 Just use ${i##*/}将删除所有内容,包括最后一个斜杠:

substring=${i##*/}

第一个for循环是列出当前directoty中的所有文件?你可以简单地使用:

printf "%s\n" *

Uppercase variable names are reserved for environment variables,不应该被应用程序使用。

完整的脚本将如下所示:

#!/bin/bash
cd "/var/www/html/zong/public/HostedPBX/" || exit 5
printf "/var/www/html/zong/public/HostedPBX/%s\n" *
printf "\n"
sleep 2
printf "Taking Backup of above folders...\n"
sleep 3
for i in *; do
  [ -e "$i" ] || continue
  substring=${i##*/}
  # Copy line below:
  # cp -R -- "$i" "/root/HostedPBX_Backup/$substring"
done

您可以正确地使用以下内容替换整个脚本:

cd "/var/www/html/zong/public/HostedPBX/" || exit 5
cp -R -- * "/root/HostedPBX_Backup/"