ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

按行读取文件后read标准输入不执行

2021-11-20 22:33:47  阅读:134  来源: 互联网

标签:文件 读取 删除 read choice 1120 按行 test


按行读取文件后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 

 

标签:文件,读取,删除,read,choice,1120,按行,test
来源: https://www.cnblogs.com/windysai/p/15582873.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有