1. 程式人生 > 其它 >按行讀取檔案後read標準輸入不執行

按行讀取檔案後read標準輸入不執行

按行讀取檔案後read標準輸入不執行

  上一篇阿里雲oss空間清理【https://www.cnblogs.com/windysai/p/15573975.html】,最後提到一個刪除的操作。

ssh -p遠端機器埠 root@遠端機器ip '
    rm -rf 遠端掛載oss的bucket/考試id*
'

  文章有個判斷:if [ "${remotenum}" == "${strnum}" ];,代表本地備份的檔案數和遠端考試id的檔案數一致,本來這個刪除想放到這個判斷下,想想應該加多一個二次確認,再進行操作,跑下來的結果如下:

  竟然不然我輸入“y”進行刪除確認,直接跳過去了。

  於是我做了個實驗:

1、準備要刪除的列表目錄

2、寫有指令碼:test.sh

#!/bin/bash

cat /root/scripts/test-1120 | while read line
do
   read -p "確定要刪除$line 麼,輸入是或否(y/n): " choice
   if [ "$choice" == "y" ];
then
echo "開始刪除。。。" rm -rf /tmp/deletedir/${line} fi done

其中檔案test-1120內容如下:

3、執行效果

竟然把檔案:test-1120,當前讀取的下一行傳遞給choice了。

解決:不要寫兩個read,外層迴圈改成for

改良指令碼如下:

for i in `cat /root/scripts/test-1120`
do
   read -p "確定要刪除$i 麼,輸入是或否(y/n): " choice
   if [ "$choice" == "y" ];
   then
      echo "開始刪除。。"
      rm -rf /tmp/deletedir/${i}
   fi
done