按行讀取檔案後read標準輸入不執行
阿新 • • 發佈:2021-11-20
按行讀取檔案後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