ddddfang's Blog.

shell

字数统计: 620阅读时长: 2 min
2019/01/23 Share

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

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

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

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

逐行处理文件内容:

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

3.循环30次

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

4.死循环

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 循环

1
2
3
4
5
6
7
# a.sh
i=0
while [ $i -le 30 ] #[]的空格要有
do
echo $i #这里又是一个字符串的连接
i=$(( $i+1 )) #这里i和右边的等号之间又不能有空格
done
1
2
3
4
5
6
# 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))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/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
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
CATALOG
  1. 1. 1.测试某个文件是否存在,类似的,-c是否是一个字符文件,-z该变量是否有值,-d是否是一个目录 -r是否可读
  2. 2. 2.遍历当前文件夹下所有文件
  3. 3. 3.循环30次
  4. 4. 4.死循环
  5. 5. 5.使用自己产生的序列 for 循环
  6. 6. 6.使用另一个脚本的输出作为序列 for 循环
  7. 7. 7.[很实用] 递归遍历某目录下所有文件并进行相应处理(注意这个脚本运行的时候用bash而不是默认的sh(dash))