2015-09-02 81 views
0

我试图创建脚本由cron运行,以创建子文件夹多个文件夹。shell脚本,使目录和子目录变量名

DATE=`date +%Y-%m-%d` 
IP_ADDR=`ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'` 
/bin/mkdir -p /mnt/db-backup/12/$DATE/$IP_ADDR/ 

如果我运行此脚本如预期的那样手动创建的一切。当脚本由cron子目录运行时,$ IP_ADDR未被创建并且没有错误。

+0

要找到你可以改变这个问题你脚本将ifconfig的输出保存在文件中。还有变量IP_ADDR。 – erik

+0

都返回正确的值:10.1.1.3 –

+1

顺便说一句,'grep的-v富| SED的/酒吧/巴兹/''是[无用使用'grep'](http://www.iki.fi/era/unix/award.html#grep),并且更好的写入'的sed -n' /富/!S /酒吧/巴兹/ p'' – tripleee

回答

1

我怀疑/sbin是不是路径为cron作业下运行环境的一部分。你应该指定ifconfig命令的完整路径:使用$()的命令替换

IP_ADDR=$(/sbin/ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p') 

这也是更好的做法,(一般)。

0

尝试使用调试模式:

set -x 
DATE=`date +%Y-%m-%d` 
IP_ADDR=`ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'` 
/bin/mkdir -p /mnt/db-backup/12/$DATE/$IP_ADDR/ 
set +x 

然后,你的cron的输出重定向到一个文件,看看,你会发现它有用的信息。

0

您已经为时不远了,但有几个排序警告,可能会导致问题。许多系统对于ifconfig输出行都有不同的格式。一些与inet xxx.xxx.xxx.xxx,别人用inet addr:xxx.xxx.xxx.xxx。 (这是最常见的两种)。您可能还需要处理多个有线inet接口(盒中的2+网卡)的情况。但是,如果只有1个网卡,你可以尝试以下处理共同ifconfig格式:

DATE=`date +%Y-%m-%d` 
IP_ADDR=$(ifconfig | 
      grep -v '127.0.0.1' | 
      grep -E 'inet[ ](addr:)*[0-9]{1,3}([.][0-9]{1,3}){3}' | 
      sed -e 's/^.*inet \(addr:\)*//' -e 's/ .*$//') 
/bin/mkdir -p /mnt/db-backup/12/$DATE/$IP_ADDR/ 

IP_ADDR写成一行:

IP_ADDR=$(ifconfig | grep -v '127.0.0.1' | grep -E 'inet[ ](addr:)*[0-9]{1,3}([.][0-9]{1,3}){3}' | sed -e 's/^.*inet \(addr:\)*//' -e 's/ .*$//')