shell平时用的上的一些脚本

1、shell里统计字符串长度

设shell变量

var=hello

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

1${#var}

2exprlength$var或者expr$var:./*或者exprmatch$var.*

3awk'BEGIN{printlength("'$var'")}'

4echo-n$var|wc-c

2、shell里的数组

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

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

(2)name[index]=value

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

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

$A=(abcdef)

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

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

abcdef

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

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

a

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

//取得数组元素的个数

$echo${#A[@]}

4

$echo${#A[*]}

4

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

$

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

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

$echo${A[@]}

abcyaoshuyin

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

//清除变量

$unsetA

$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的例子

foruserin$(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-ge20-o$WRONG_NUM-lt-10];then

(4)case的例子

RAND=`expr$RANDOM%3`

case"$RAND"in

0)

ret=`exprindex"$1""$2"`

;;

1)

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

;;

*)

ret=`exprindex"$1""$2"`

;;

esac

4、常用

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

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

exportPATH

(2)

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

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

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

INDEX=`expr$RANDOM%10`;

(3)

Ctrl+a-Jumptothestartoftheline

Ctrl+e-Jumptotheendoftheline

Ctrl+u-Deletebackwardfromcursor//密码输入错误的时候比较有用

(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-vvar=$SHELL_VAR'{printvar;}'

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

<!--EndFragment-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值