2

我正在编写简单的家政脚本。该脚本包含以下代码行。这是我从实际代码中提取的示例代码,因为它是一个大文件。

 #!/bin/bash

 ARCHIVE_PATH=/product/file

 FunctionA(){
    ARCHIVE_USER=user1  # archive storage user name (default)
    ARCHIVE_GROUP=group1    # archive storage user group (default)

    functionB
 }

 functionB() {
    _name_Project="PROJECT1"
    _path_Componet1=/product/company/Componet1/Logs/
    _path_Component2=/product/company/Componet2/Logs/


     ##Component1##
     archive "$(_name_Project)" "$(_path_Componet1)" "filename1" "file.log" 
 }

 archive(){
     _name= $1
     _path=$2
     _filename=$3
     _ignore_filename=$4
     _today=`date + '%Y-%m-%d'`
     _archive=${ARCHIVE_PATH}/${_name}_$(hostname)_$(_today).tar
     if [ -d $_path];then
        echo "it is a directory"
     fi
 }

 FunctionA

当我运行上述脚本时,出现以下错误

@localhost.localdomain[] $ sh testScript.sh
testScript.sh: line 69: _name_Component1: command not found
testScript.sh: line 69: _path_Component2: command not found
date: extra operand `%Y-%m-%d'
Try `date --help' for more information.
testScript.sh: line 86: _today: command not found
it is a directory

有人可以解释一下我在这里做错了什么。

4

3 回答 3

3

我看到这条线:_today=date + '%Y-%m-%d'

我发现的一个错误是通过删除 + 和 ' 之间的空格来解决的,如下所示:

_今天=date +'%Y-%m-%d'

我看不到 _name_Component1 和 _name_Component2 变量的声明位置,所以无能为力:)

于 2012-05-02T15:43:21.103 回答
2

您的变量扩展不正确-您正在使用$()它来执行子shell替换。你想要${},即:

 archive "${_name_Project}" "${_path_Componet1}" "filename1" "file.log" 

至于date错误,后面没有空格+

于 2012-05-02T15:40:37.037 回答
1

一些事情......你使用 $(variable) 当它应该是 ${variable} 在 date 命令时,确保 + 和格式之间没有空格并且你有 name= $1,你不想要那里的那个空间

于 2012-05-02T15:44:13.307 回答