目录

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
$?代表上一个命令执行后的退出状态