下面是我用于复制数据的bash脚本代码,但我在toLowerCase(Locale)
行中遇到语法错误。我是bash的新手,所以无法理解语法有什么问题。任何帮助表示赞赏。
SUBSTRING
答案 0 :(得分:1)
在bash
中,变量的名称只能包含大写,小写,数字和下划线。在字符类术语中,那将是:
[[:alnum:]_]
任何用户定义变量的名称也不能以数字开头。
在您的情况下,您将变量定义为:
**SUBSTRING=....
$SUBSTRING=....
由于前面所述的原因,这些声明是不正确的。
答案 1 :(得分:1)
这并非旨在为您提供完整的解决方案,但是评估者会向您提供有关出错的信息。
for循环可以用globs编写,不需要echo
和命令替换。实际上$(echo */)
的输出如果没有引用则会word splitting和globbing:
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/"