我正在编写简单的内务处理脚本。这个脚本包含以下代码行。这是我从实际代码中提取的示例代码,因为它是一个大文件。
#!/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
有人可以解释一下我在这里做错了什么。
答案 0 :(得分:3)
我看到了这一行:_today = date + '%Y-%m-%d'
我发现的一个错误是通过删除+和'之间的空格来解决的:像这样:
_today = date +'%Y-%m-%d'
我没有看到声明_name_Component1和_name_Component2变量的位置所以无法帮助那里:)
答案 1 :(得分:2)
您的变量扩展不正确 - 您正在使用$()
来执行子shell替换。你想要${}
,即:
archive "${_name_Project}" "${_path_Componet1}" "filename1" "file.log"
至于date
错误,+
之后没有空格。
答案 2 :(得分:1)
一些事情......当你应该是$ {variable}时,你正在使用$(变量) 在date命令上,确保+和格式之间没有空格 你有名字= $ 1,你不想要那个空间