shell平时用的上的一些脚本

1、shell里统计字符串长度

 设shell变量

 var=hello

 有哪些方法计算$var的长度呢,下面提供几种常用方法:

 1 ${#var}

 2 expr length $var 或者 expr $var : ./* 或者expr match $var  .*

 3 awk 'BEGIN {print length("'$var'")}'

 4 echo -n $var | wc -c

 

2、shell里的数组

 Bash中还可以使用数组变量,其赋值有两种:

 (1) name = (value1 ... valuen) 此时下标从0开始

 (2) name[index] = value

 数组下标的范围没有任何限制,同时也不必使用连续的分量.

 --------------------------------------------------------------------------------

 $ A=(a b c def)

 ==================================================

 $ echo ${A[@]}         //取全部元素

 a b c def

 =================================================

 $ echo ${A[0]}        //取第一个元素

 a

 =================================================

 //取得数组元素的个数

 $ echo ${#A[@]}

 4

 $ echo ${#A[*]}

 4

 $ echo ${#A[3]}    //取得元素3的长度

 $

 ==================================================

 $ A[3]=yaoshuyin   //将第三个元素重新赋值

 $ echo ${A[@]}

 a b c yaoshuyin

 =================================================

 //清除变量

 $ unset A

 $ echo ${A[@]}

 $

 ==================================================

 //清空变量,即将值变为空

 $ A=

 $ echo ${A[@]}

 $

 ==================================================

   #清理一个月前log的脚本

 

HOME_PATH[0]="/data/path1" HOME_PATH[1]="/data/path2" HOME_PATH[2]="/data/path3" lenArrSource=${#HOME_PATH[*]} i=0 while [ $i -lt $lenArrSource ] do echo ${HOME_PATH[$i]} cd ${HOME_PATH[$i]} rm *${CurDay}* let i++ done

3、for、while、if、case的使用

 (1) for的例子

  for user in $(cut -d: -f1 $FILENAME)

  do

       echo $user

  done

 (2) while的例子

  while read name do cd /usr/local/services/$name/admin/data if [ -d /usr/local/services/$name/admin/data/tmp ];then rm -rf tmp; mkdir -p tmp; #注意,sh的话这里不能使用局部变量 fi done < $HOME/file.tmp

  ////////////////////////////

  i=20100115 while [ $i -lt 20100129 ] do awk -F"&" '{ print $4,$11}' flow.$i | sort -u | awk -F'[ =]' -v date=$i '{ a+=$4; sum++;} END { printf("%d/t%d/t%d/n", date, sum, a/1000);}' (( i=i+1)) done

 (3) if的例子

  if [ $WRONG_NUM -ge 20 -o $WRONG_NUM -lt -10 ];then

   (4) case的例子

   

       RAND=`expr $RANDOM % 3`

       case "$RAND" in

       0)

           ret=`expr index "$1" "$2"`

           ;;

       1)

           ret=`echo $1 $2 | awk '{print index($1, $2)}'`

           ;;

       *)

           ret=`expr index "$1" "$2"`

           ;;

       esac

4、 常用

 (1)crontab里的脚本加上如下的环境变量,避免crontab执行时找不到变量

 PATH=/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin:$PATH;

 export PATH

 (2)

 ARGC="$#"                     #命令行参数个数

 ARGV="$*"                     #命令行参数列表

 RUN_HOME=`dirname $0`         #脚本所在路径

 INDEX=`expr $RANDOM % 10`;

 

 (3)

 Ctrl + a - Jump to the start of the line

 Ctrl + e - Jump to the end of the line

 Ctrl + u - Delete backward from cursor // 密码输入错误的时候比较有用

 (4)导入crontab

 {crontab -l; echo "* * * * *" /path/to/mon.sh; } | crontab -

 

5、处理数据库

#!/bin/sh i=10 while [ $i -lt 100 ]; do j=0; while [ $j -lt 100 ]; do /usr/local/mysql/bin/mysql -uroot <<! use db_usr_info_${i}; ALTER TABLE t_usr_info_${j} ADD iCftTmpAccount int(10) unsigned NOT NULL default '0'; !#此处的!号要写到行首 j=`expr $j + 1` done i=`expr $i + 1` done

6、awk相关

  (1) 将shell的变量传递给awk

      awk -v var=$SHELL_VAR '{ print var;}'

 

 

7、要注意变量为空的情况,经常会发生“在异常情况下,变量为空,导致脚本报错”

 

你可能感兴趣的:(Date,shell,脚本,bash,Random,Path)