看板 Linux 關於我們 聯絡資訊
目前在寫一個備份用得程式 希望可以把要備份保留的數量做成變數來指定 像下面~設定保留 7 天 將 7 天前的檔案做刪除 del_num=7 stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256 stamp_del=`date -d' -${del_num} day' +%Y%m%d_%H%M` #要刪除的時間 echo "Time(stamp): ${stamp}" echo "DEL(stamp_del): ${stamp_del}" 但是執行的結果如下 在刪除日期的檔名沒被抓到 感覺上是變數沒被抓進去 [root@linux10 ~]# sh test2.sh date: invalid date ‘ -${del_num} day’ Time(stamp): 20201116_1026 DEL(stamp_del): [root@linux10 ~]# 不知道有沒有哪位可以指點一下這個寫法是哪裡有問題? -- 『老闆你好 我是國立的』 『老闆你好 我是私立的』 『腦~~~~~~~闆~~~~~~』 Amy! 有消息會跟你聯絡 有消息會跟你聯絡 給她個私人秘書職位 ◤ ◥ ◤◥ 國立 -○=○- -□=□- ● ● ◤ ◥ 私立 ) 尬不過 -? - )) 兩粒 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.62.244 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1605493899.A.E62.html
ckc1ark: 單引號改用雙引號 11/16 10:42
照你說的單引號改雙引號還是不行~ del_num=7 stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256 stamp_del=`date -d" -${del_num} day" +%Y%m%d_%H%M` #要刪除的時間 echo "Time(stamp): ${stamp}" echo "DEL(stamp_del): ${stamp_del}" 輸出結果 test2.sh: line 3: -${{del_num}} day: bad substitution Time(stamp): 20201116_1137 DEL(stamp_del): ※ 編輯: sanbis (59.125.62.244 臺灣), 11/16/2020 11:38:43
bitlife: day前面空百拿掉 11/16 11:41
ucrxzero: -要拿掉 -在變數裡面有特別意義 11/16 13:13
ucrxzero: 還是+忘了 11/16 13:14
ucrxzero: 反正改了就應該好了 11/16 13:14
ucrxzero: 我記得是dash在變數是若空則q的意義 11/16 13:16
ucrxzero: escape 掉那個dash用返斜線試試看 我懶得試了但應該是 11/16 13:16
ucrxzero: 這原因 11/16 13:16
ucrxzero: 我輸出你修改後的可以欸 11/16 13:18
ucrxzero: 我看是不是sh dash bash版本的關係 11/16 13:19
ucrxzero: 第一行加個#!/bin/bash試試看 11/16 13:23
ucrxzero: #!/bin/sh #!/bin/dash 都試試看 11/16 13:39
ucrxzero: 先不要動- 11/16 13:39
a58524andy: 個人script寫完都會先shellcheck 因為實在是不太熟XD 11/16 17:11
ucrxzero: 等樓主看看怎麼說 11/16 17:27
最後是這個樣子~ #!/bin/sh #!/bin/dash del_num=7 stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256 stamp_del=`date -d" -${del_num}day" +%Y%m%d_%H%M` #要刪除的時間 echo "Time(stamp): ${stamp}" echo "DEL(stamp_del): ${stamp_del}" 輸出結果為 Time(stamp): 20201116_1744 DEL(stamp_del): 20201109_1744 -${del_num}day 這個 - 不能拿掉~ 不然就變成往後算七天了~ 感激上面的幾位提供的意見~m(_ _)m ※ 編輯: sanbis (59.125.62.244 臺灣), 11/16/2020 17:47:42
ucrxzero: 一個就好 不要兩個 11/16 18:00
ucrxzero: 可以兩個嗎== 11/16 18:00
ucrxzero: 是請你個別試試看那三個 11/16 18:02
明天再來各別測試~
newversion: 刪除7天前資料, 用 find -mtime -delete 最簡單 11/17 17:24
原本的計畫是在遠端主機上執行備份並用 FTP 上傳~ 結果測試以後………… 遠端主機權限沒有提供 FTP 傳輸檔案~ 要改用 PHP 去寫這個傳輸檔案的功能~ 整個備份架構重新更改中~ (眼神死~Orz ※ 編輯: sanbis (61.224.154.49 臺灣), 11/18/2020 01:56:27
bitlife: 說不定是提供sftp? 畢竟ftp和telnet一樣都是以前明碼傳輸 11/18 06:31
bitlife: 時代的產物,不提供很正常 11/18 06:31
有提供 FTP 上傳/下載檔案功能 只是你用 script 直接執行就不支援 至於 sftp 。。。。 遠端主機連 SSH 都沒有~怎麼可能會有 sftp ※ 編輯: sanbis (59.125.62.244 臺灣), 11/18/2020 15:41:40 剛剛重新測試~ #!/bin/sh #!/bin/dash 這個不是必要的 只要把 ' -${del_num} day' 改為雙引號就可以了 (之前說失敗可能是眼睛脫窗沒看清楚?) del_num=7 stamp=`date +%Y%m%d_%H%M` #時間標記 , format 20110107_1256 stamp_del=`date -d" -${del_num} day" +%Y%m%d_%H%M` #要刪除的時間 echo "Time(stamp): ${stamp}" echo "DEL(stamp_del): ${stamp_del}" ※ 編輯: sanbis (59.125.62.244 臺灣), 11/18/2020 15:47:22