2015-11-05 135 views
0
#!/bin/bash 

BACKUP=backup_date 
SOURCE=Arithmetic_Operators 

echo "Taking backup from ${SOURCE} directory to backup directory ${BACKUP} .." 

# Checking the source directory ${SOURCE} exists or not ! if not exists die 
# Script is unsuccessful with exit status # 1 

[ ! -d $SOURCE ] && echo "source directory $SOURCE not found" 
exit 1 

# Checking the backup directory ${BACKUP} exists or not ! if not exists die 
# Script is unsuccessful with exit status # 2 

[ ! -d $BACKUP ] && echo "backup directory $BACKUP not found" 
exit 2 

# Let Start the backing up 

tar cvf $SOURCE $BACKUP 2> /wrong/logs.txt 

if [ $? -ne 0 ] 
then 
    # die with unsuccessful shell script termination exit status # 3 
    echo "An error occurred while making a source directory backup, see /wrong/logs.txt file". 
    exit 3 
fi 

这是我的脚本源目录(Arithmetic_Operators)备份到目标目录(backup_date),运行脚本我的脚本与消息结束而shell脚本备份源目录备份目录

以备份从Arithmetic_Operators目录备份目录backup_date ..
源目录Arithmetic_Operators找不到

在那里我没有错,为什么牛逼他的脚本没有运行,你能帮我解决吗?

+0

最proabably没有目录'Arithmetic_Operators '在你启动脚本的目录中。 –

+0

谢谢Gerald !!,同时脚本没什么问题,它可能是目录不在路径上或目录本身不存在的问题。 – PradyJord

+0

谢谢Pradyjord – viswa

回答

1

这行的意思是脚本退出无条件:

[ ! -d $SOURCE ] && echo "source directory $SOURCE not found" 
exit 1 

你大概的意思是:

if [ ! -d $SOURCE ] 
then 
    echo "source directory $SOURCE not found" >&2 
    exit 1 
fi 

或许:

[ ! -d $SOURCE ] && { echo "source directory $SOURCE not found" >&2; exit 1; } 

注意错误信息应该被发送到标准错误,而不是标准输出。在消息中包含脚本的名称($0)并不是一个坏主意;它有助于识别哪个脚本生成/检测到问题。

您在检查$BACKUP目录后有类似问题。

此外,作为一般规则,请将变量引用在双引号:

[ ! -d "$SOURCE" ] && { echo "source directory $SOURCE not found" >&2; exit 1; } 

(第二个引用是已经双引号内,当然)。

+0

嗨johathan非常感谢我在这里有一个问题什么是&2的含义是什么?重定向操作符是>,next&2呢?你能解释我吗? – viswa

+0

'>&2'符号将标准输出重定向到标准错误,所以错误消息出现在标准错误上,正如我所评论的。 –

+0

再次感谢乔纳森!现在我完全清除了0 1 2 /标准输入/标准输出/标准错误输出 – viswa