2015-09-02 112 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/ .*$//')