[問題] 時間增減的計算

看板Linux作者 (方正)時間4年前 (2020/11/16 10:31), 4年前編輯推噓8(8013)
留言21則, 5人參與, 4年前最新討論串1/1
目前在寫一個備份用得程式 希望可以把要備份保留的數量做成變數來指定 像下面~設定保留 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

11/16 10:42, 4年前 , 1F
單引號改用雙引號
11/16 10:42, 1F
照你說的單引號改雙引號還是不行~ 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

11/16 11:41, 4年前 , 2F
day前面空百拿掉
11/16 11:41, 2F

11/16 13:13, 4年前 , 3F
-要拿掉 -在變數裡面有特別意義
11/16 13:13, 3F

11/16 13:14, 4年前 , 4F
還是+忘了
11/16 13:14, 4F

11/16 13:14, 4年前 , 5F
反正改了就應該好了
11/16 13:14, 5F

11/16 13:16, 4年前 , 6F
我記得是dash在變數是若空則q的意義
11/16 13:16, 6F

11/16 13:16, 4年前 , 7F
escape 掉那個dash用返斜線試試看 我懶得試了但應該是
11/16 13:16, 7F

11/16 13:16, 4年前 , 8F
這原因
11/16 13:16, 8F

11/16 13:18, 4年前 , 9F
我輸出你修改後的可以欸
11/16 13:18, 9F

11/16 13:19, 4年前 , 10F
我看是不是sh dash bash版本的關係
11/16 13:19, 10F

11/16 13:23, 4年前 , 11F
第一行加個#!/bin/bash試試看
11/16 13:23, 11F

11/16 13:39, 4年前 , 12F
#!/bin/sh #!/bin/dash 都試試看
11/16 13:39, 12F

11/16 13:39, 4年前 , 13F
先不要動-
11/16 13:39, 13F

11/16 17:11, 4年前 , 14F
個人script寫完都會先shellcheck 因為實在是不太熟XD
11/16 17:11, 14F

11/16 17:27, 4年前 , 15F
等樓主看看怎麼說
11/16 17:27, 15F
最後是這個樣子~ #!/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

11/16 18:00, 4年前 , 16F
一個就好 不要兩個
11/16 18:00, 16F

11/16 18:00, 4年前 , 17F
可以兩個嗎==
11/16 18:00, 17F

11/16 18:02, 4年前 , 18F
是請你個別試試看那三個
11/16 18:02, 18F
明天再來各別測試~

11/17 17:24, 4年前 , 19F
刪除7天前資料, 用 find -mtime -delete 最簡單
11/17 17:24, 19F
原本的計畫是在遠端主機上執行備份並用 FTP 上傳~ 結果測試以後………… 遠端主機權限沒有提供 FTP 傳輸檔案~ 要改用 PHP 去寫這個傳輸檔案的功能~ 整個備份架構重新更改中~ (眼神死~Orz ※ 編輯: sanbis (61.224.154.49 臺灣), 11/18/2020 01:56:27

11/18 06:31, 4年前 , 20F
說不定是提供sftp? 畢竟ftp和telnet一樣都是以前明碼傳輸
11/18 06:31, 20F

11/18 06:31, 4年前 , 21F
時代的產物,不提供很正常
11/18 06:31, 21F
有提供 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
文章代碼(AID): #1ViUIBvY (Linux)
文章代碼(AID): #1ViUIBvY (Linux)