shell片段

1.测试某个文件是否存在,类似的,-c是否是一个字符文件,-z该变量是否有值,-d是否是一个目录 -r是否可读

tar_dir=`pwd`/123      #这其实就是一个字符串的连接,在shell里面将执行命令作为字符串返回,只要放在 `` 里
if [ -f $tar_dir ];then
    echo "tar exist"   
else
    mkdir -p $tar_dir
fi

2.遍历当前文件夹下所有文件

for file in `ls -l |awk '{print $9}'`   #这里其实file是新建的
do
    if [ -d $file ]; then                        #这里的file就是对刚刚新建的file的引用了
        echo "dir!"
    else
        echo "file!"
    fi
done

逐行处理文件内容

cat data.dat | while read line
do
    echo "File:${line}"
done

3.循环30次

i=0
while [ $i -le 30 ]          #[]的空格要有
do
    echo "this is "$i         #这里又是一个字符串的连接
    i=$(( $i+1 ))                #这里i和右边的等号之间又不能有空格
done

4.死循环

while true;do
echo "hello"
sleep 2        #这里sleep 2 秒
done

5.使用自己产生的序列 for 循环

generator()
{
    i=0
    while [ $i -le 30 ]          #[]的空格要有
    do
        echo $i         #这里又是一个字符串的连接
        i=$(( $i+1 ))                #这里i和右边的等号之间又不能有空格
    done
}
for f in `generator`   #这里是直接调用的函数
do
    echo $f
    sleep 1        #这里sleep 1 秒
done

6.使用另一个脚本的输出作为序列 for 循环

# a.sh
i=0
while [ $i -le 30 ]          #[]的空格要有
do
    echo $i         #这里又是一个字符串的连接
    i=$(( $i+1 ))                #这里i和右边的等号之间又不能有空格
done
# b.sh
for f in `sh a.sh`   #这里是使用 a.sh 的执行结果。还可以使用某个文件的内容,cat a.txt
do
    echo $f
    sleep 1        #这里sleep 2 秒
done

7.[很实用] 递归遍历某目录下所有文件并进行相应处理(注意这个脚本运行的时候用bash而不是默认的sh(dash))

#!/bin/bash

function changeName(){
    t=$(printf "%d\tpath %s,file %s " $cnt $1 $2)   # simple string format
    echo $t

    if [[ $2 = *.cc ]]
    then
        new=`echo $2|sed 's/.cc/.cpp/g'`    # replace
        mv $2 $new
        echo $(printf "changed to ======> %s" $new)
    else
        :
    fi

    cnt=$(( $cnt+1 ))   # increase global cnt
}

function travFolder(){
    flist=`ls $1`
    cd $1     # enter subdir that we search from

    for f in $flist
    do
        if test -d $f
        then
            #echo "dir:$f"
            travFolder $f   #recursive, when complete, should return to parent dir
        else
            c=`pwd`
            changeName $c $f
        fi
    done

    cd ..     # retrun to parent dir
}
function usage(){
    echo "usage:$0 <dir that search from>"
}

cnt=0

#下面是参数的检查
if [[ $# != 1 ]]
then
    usage
    exit 1;
fi

if test -d $1
then
    travFolder $1
else
    usage
    exit 1;
fi

猜你喜欢

转载自blog.csdn.net/ddddfang/article/details/88897237
今日推荐