shell之批量操作(一)

178 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

在研究批量修改内容的过程中.遇到的很多奇奇怪怪的问题.在问题的诱惑下.导致对批量操作甚是喜欢.记录一下学习成果.

您能在这里开到啥

  1. 批量创建

批量创建

在准备批量修改内容的测试用例的时候.我就深有感触,因为我是纯纯的手动创建.也完全的忽略了.对啊,我这不是学习的就是脚本吗?.竟然还手动创建.真是不该啊.下面我就记录一下.自己是怎么用脚本批量创建的.如有更好的思路,请不吝赐教.

实现步骤:

  1. 创建abcd四个文件夹.
  2. 并在每一个文件夹里创建对应的txt文件.
  3. txt文件里写入测试数据.

最终效果: 截屏2022-12-01 21.19.07.png

当然上面的效果图还是我手动创建.经过上面的分析.这样就可以对症下药.一直以来,都没有使用函数,今天咱就试一试.

  1. 创建父类文件夹

    1. 判断父类文件夹是否存在
    2. 父类文件夹存在,即执行创建子文件.
    3. 父类文件夹不存在.创建父类文件夹.执行第2步.
    # 创建父文件夹
     createSupDir() {
         if [ ! -d "$ydir" ]; then
             mkdir -p "$ydir" && cd "$ydir" || exit
             
             createSubDirS
         else
             cd "$ydir" || exit
             createSubDirS
         fi
     }
    
  2. 创建子类文件夹

    1. 利用for in循环机制.进行文件夹创建.由于我第一次失误,没有进行每次循环的结束事件.导致创建文件夹结果如下所示.

      截屏2022-12-01 22.07.28.png 当我看到创建的文件结果后,一脸懵逼.什么情况.这是递归创建到底了啊.下面是我第一次的代码.如下所示

      # 创建子文件夹
      createSubDirS() {
           for var in a b c d; do
               if [ ! -d "$var" ]; then
                  mkdir -p "$var" && cd "$var" || exit
                  createText $var
               else
                  echo "$var文件夹已存在"
                  cd "$var" || exit
                  createText $var
               fi
           done
       }
      

      经过我仔细排查,总算找到问题了.关键的问题就是cd "$var",为了创建对应文件夹里面的文件.我这边就执行了cd文件夹的操作,坏就坏在了这里,只知道进去,却忘记回退了,哎.也是粗心导致的.下面是我的解决方法

      # 创建子文件夹
      createSubDirS() {
          for var in a b c d; do
              if [ ! -d "$var" ]; then
                  mkdir -p "$var"
                  createText $var
              else
                  echo "$var文件夹已存在"
                  createText $var
              fi
          done
      }
      # 创建文件
      createText() {
          cd "$1" || exit
          ····
          cd ..   
      }
      

      经过上面的修改后,总算完成了第三步.如下所示 截屏2022-12-01 22.27.13.png

      哈哈,也算是完成了效果.

  3. 创建文件

    创建文件就相对简单了,一波操作,也是顺顺利利.我就直接上代码了

    # 创建文件
    
      createText() {
          # 执行进入文件夹操作
          cd "$1" || exit
          file="$1"_text.txt
          if [ ! -f "$file" ]; then
              # 创建文件
              touch "$file"
              # 写入文件
              writeText "$file"
          else
              echo "$file文件已存在"
              writeText "$file"
          fi
          # 执行回退操作
          cd ..
      }
    
    
  4. 写入数据

    说实话,确实不太清楚怎么写入文件,查找资料后.这里也做一下记录.

    • 单行写入

      覆盖写入: echo 内容 > 文件

        事例:
        `echo shell > test.txt`
         shell
        
      

      末尾写入: echo 内容 >> 文件

        事例:
        echo shell >> test.txt
        结果
        shell
        shell
        
      
    • 多行写入

      格式如下

      cat <<EOF > filename
      内容
      EOF
      

      通过第一个,我们知道>>>的区别.用法是一样的.

      cat <<EOF> test.txt
      我是测试
      我是测试
      我是测试
      我是测试
      EOF
      
      这个结果是永远是输入的内容
       cat <<EOF >> test.txt
      我是测试
      我是测试
      我是测试
      我是测试
      EOF
      这个结果就是一直往后面添加内容.
      

    经过上面的学习,我们来完成写入功能吧,

    # 写入信息
     writeText() {
         # 把内容写入到文件里,并写在内容后面.文件原内容会保留下来
         echo "$1我是测试数据" >>"$1"
    }
    

经过上面的4步,我们终于可以完成了我们的需求了.直接调用第一步createSupDir方法.我们就看一下执行结果吧.

截屏2022-12-01 22.52.45.png

当然,由于我们每个文件的都判断了文件是否存在,所以不会出现重复创建.到此,今天的笔记完成了.

系列文章

参考文章