整理几个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
网友评论