从一个文件夹里随机抽些文件复制到另一个文件夹里:
#!/bin/bash rootpath="/home/parapax/dev/" testdatanum=5 srcpath=${rootpath}featureCata #srcpath=${rootpath}dir distpath=${rootpath}featureCata1 echo $rootpath echo $srcpath filenames=`ls ${srcpath}` #echo $filenames len=0 for file in $filenames do #echo $file; len=`expr $len + 1`; #echo $len; done echo "len="$len for ((freq=0;freq<5;freq++)); do rand=$RANDOM; echo $rand; ((i=$rand%$len)); echo "i="$i; file=`echo ${filenames}|cut -d " " -f$i`; echo $file; cp ${srcpath}"/"$file ${distpath}"/"$file done
cut命令里,-d表示分隔符,这里使用冒号: 作为分隔符,-f 表示字段
详见http://blog.csdn.net/arkblue/article/details/8507989
bash里的变量自增:
1. i=`expr $i + 1`;
2. let i+=1;
3. ((i++));
4. i=$[$i+1];
5. i=$(( $i + 1 ))
上面的脚本一开始在ubuntu里跑的时候一直提示Syntax error: Bad for loop variable,搜了一下,发现是以下原因:
Ubuntu为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼。
解决方法是 取消dash
sudo dpkg-reconfigure dash
在选择项中选No,即可。