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