美文网首页
shell 部分基础需求-持续更新~

shell 部分基础需求-持续更新~

作者: YocnZhao | 来源:发表于2019-05-07 11:58 被阅读0次

整理几个shell的基础需求
1、文件不存在时等待

while true; do
  if [ ! -f "/Users/yocn/Desktop/a.txt" ]; then
    #文件不存在,等待5s
    sleep 5
  else
    #文件存在,停止等待
    break
  fi
done

2、删除文件夹下除了a.txt和b文件夹下的所有文件

#除了a.txt和b文件夹和.svn文件夹之外都删除  利用grep -v反选操作,-E指使用正则表达式,支持多个排除
rm -rf `ls -a|grep -vE "a.txt|b|.svn"`

3、命令输出作为变量
使用$()包起来或者使用` (键盘左上角 数字键1左边那个)

v0=`cat aaa.txt`
echo $v0
v1=$(cat aaa.txt)
echo $v1

4、拷贝源目录下的.apk文件到目标目录,如果目标目录存在则在xxx.apk的xxx后面加-0变成xxx-0.apk

#!/bin/bash
#所有apk文件
for file in `ls |grep -E ".apk$"`; do
    #目标名字  Avatar-3.0.0.debug-103980.apk
    destFileName=Avatar-${file#*-}
    echo "destFileName->$destFileName"
    if [ -f export/$destFileName ]; then
        # 目标目录中存在同名文件 Avatar-3.0.0.debug-103980开头的apk simpleName -> Avatar-3.0.0.debug-103980
        simpleName=${destFileName%%.apk*}
        echo "simpleName->$simpleName"
        apkNums=0
        for file2 in `ls export|grep -E ^$simpleName`; do
            let apkNums++
            echo $file2
        done
        echo "apkNums----->$apkNums"
        destFileName=${destFileName%%.apk*}-$apkNums.apk
    fi
    echo "destFileName->$destFileName   file->$file"
    cp -rf $file export/$destFileName
done

这牵扯到某几个小的知识点
4.1、shell中实现 i++,差不多有这么5种方法

a=1

a=$(($a+1))
a=$[$a+1]
a=`expr $a + 1`
let a++
let a+=1

4.2、字符串的匹配删除

#!/bin/bash
string="Avatardebug-3.0.0.debug-103980.apk"
# # 号截取,删除左边字符,保留右边字符。保留从左到右第一个 - 右边的 -> 3.0.0.debug-103980.apk
s1=${string#*-}
# ## 号截取,删除右边字符,保留左边字符。保留从左到右最后一个 - 右边的 -> 103980.apk
s2=${string##*-}
# % 号截取,删除左边字符,保留右边字符。保留从左到右最后一个 - 左边的 -> Avatardebug-3.0.0.debug
s3=${string%-*}
# % 号截取,删除右边字符,保留左边字符。保留从左到右第一个 - 左边的 -> Avatardebug
s4=${string%%-*}
echo "s1->$s1" 
echo "s2->$s2"
echo "s3->$s3" 
echo "s4->$s4"

5、找到文件夹中最新创建的文件并打印名字 -- 转自这里

ls -lt /dirname/ | grep filename | head -n 1 |awk '{print $9}'

逐条解释:
ls -lt /dirname/ 
列出此目录下的所有文件并按照时间先后排序
grep filename 
过滤出包含关键字的文件
head -n 1
查看排名第一的文件
awk '{print $9}'
打印出第九字段,此处为文件名

6、遍历数组

for f in ${filelist[@]}
do
    echo " $f"
done

7、遍历文件夹下所有文件存到数组

c=0
for file in `ls`
do
    echo "$file"
    filelist[$c]=$file
    let c++
done

8、文件中替换string

#替换第一个
sed -i 's/原字符串/新字符串/' /home/1.txt
#替换所有的
sed -i 's/原字符串/新字符串/g' /home/1.txt

mac上需要是
sed -i '' 's/原字符串/新字符串/' /home/1.txt

9、shell文件参数个数

#!/bin/bash

if [ $# -gt 0 ]; then
        echo "参数个数为$#个"
else
        echo "没有参数"
fi

相关文章

  • shell 部分基础需求-持续更新~

    整理几个shell的基础需求1、文件不存在时等待 2、删除文件夹下除了a.txt和b文件夹下的所有文件 3、命令输...

  • shell编程100例—学习

    持续更新中,今年要好好学习shell呀。原文章连接:shell编程100例[https://blog.csdn.n...

  • Linux与shell 持续更新

    一、cp 高效用法 第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)这...

  • Vue基础篇(一)

    本教程分为三部分 : 基础 进阶 实战 ,深入浅出Vue.基础篇持续 更新中 --- vue.js的基本介绍和...

  • Vue基础篇(五)

    本教程分为三部分 : 基础 进阶 实战 ,深入浅出Vue.js基础篇持续 更新中 ------ 列表渲染指令v-­...

  • python面试题大全

    持续更新中... 算法部分:

  • 需求日记——持续更新 - 草稿

    2022.10.22 需求:被夸真乖,说喜欢我

  • Vue基础篇(六)

    本教程分为三部分 : 基础 进阶 实战 ,深入浅出Vue.js基础篇持续 更新中........ 第六章 表单与v...

  • 顶置目录(方便查看)

    简书技巧 简书基础简书Markdown进阶(持续更新) 笔记 操作系统 趣味合集 趣味合集(持续更新......)...

  • Python基础《 持续更新 》

    常用语法点 1. functools.partial: 作用:创建偏函数用法:简单使用 int()函数还提供额外的...

网友评论

      本文标题:shell 部分基础需求-持续更新~

      本文链接:https://www.haomeiwen.com/subject/kukeoqtx.html