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