BASH

生成1000以内的500个随机数

gawk 'BEGIN {srand(); for (i = 1; i <= 500; i++) print int(1000*rand())}'

#计算指定日期,查找指定路径文件的大小

#!/bin/bash 
 
if [ $# -ne 1 ] 
then 
 echo "Usage: total DATE" 
 exit 
fi 
 
TERA=/tera02 
NAME1=(adlantis adlantis_mobile) 
NAME2=(ad click conv) 
DIR1=("lb05?" "lb06?")   #target dir 
DATA1=$1 
 
find_du () 
{ 
   find /$TERA/$1/$2/$3 -type f -regex ".*"$DATA1"_.*" -exec du -s {} \;|awk '{ 
sum+=$1}; END{print sum}' 
} 
 
for i in ${NAME1[@]} 
do 
   for j in ${NAME2[@]} 
   do 
       for k in ${DIR1[@]} 
       do 
         echo -ne "$TERA->$k->$i->$j =" 
         find_du $k $i $j 
       done 
   done 
done

数组

[元素的添加、删除] 
删除数组中元素: 
该方法适用于bash、ksh,不支持cshunset varname[5] 
关于数组中元素的值的清除,即置空: 
bash和ksh下这样操作,不支持csh 
varname[5]= #清除数组varname中的第六个元素 
关于数组的清除: 
适用于bash、ksh、csh等大部分shell。 
unset varname 
向数组中添加元素: 
方法一、二只适用于bash、ksh,不适用于csh; 
方法一: 
varname=(${varname[*]} varn-1 varn varn+1) 
方法二: 
varname[${#varname[*]}]=varn 
方法三: 
是csh特有的。 
set varname=($varname varn+1 varn+2) #或者$varname用${varname[*]}替换。
find . -name *200908*_* -print0 |xargs -0 cp -aRv --parents --target-directory=/mnt/usb030c/lb05a.200908b/
###应用例 
declare -a LBSERVER 
 
for i in {a..f} 
do 
  LBSERVER[${#LBSERVER[@]}]=server01`printf "$i"` 
done

判断数字

判断变量是否为1位数字

read a;$[[ $a = [[:digit:]] ]] && echo OK ||echo ERROR

判断字符串是否全数字

read str; [[ $str == *[!0-9]* ]] && echo $str is string || echo $str is digit

特殊变量

$0shell或shell脚本的名字
$*以一对双引号给出参数列表
$@将各个参数分别加双引号返回
$#参数的个数
$_代表上一个命令的最后一个参数
$$代表所在命令的PID
$!代表最后执行的后台命令的PID
$?代表上一个命令执行后的退出状态
/home1/yepnnet/public_html/wiki/data/pages/bash.txt · 最后更改: 2010/02/02 01:53 由 admin
到顶部
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0