正在浏览标签为 Shell脚本 的文章

Shell字符串截取
一、Linux shell 截取字符变量的前8位,有方法如下:

1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘\(.\\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null

二、按指定的字符串截取

1、第一种方法:

    * ${varible##*string} 从左向右截取最后一个string后的字符串
    * ${varible#*string}从左向右截取第一个string后的字符串
    * ${varible%%string*}从右向左截取最后一个string后的字符串
    * ${varible%string*}从右向左截取第一个string后的字符串

“*”只是一个通配符可以不要

例子:
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg

2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。

可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga

这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。

三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2

Dump MySQL DB Shell

抢板凳

脚本简介:
将MySQL数据库dump出后压缩为gz格式。本脚本支持两个参数。第一个参数为数据库类型(myisam,innodb)第二个参数是想要dump的数据库。如果省略第二个参数默认备份所有。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/bash
#================================================
# Name   : dumpdb.sh
# Version: 1.0
# Writer : Nathan.Zhou
# Date   : 2009.06.23
# Modify :
# Info   : 将MySQL数据库dump出后压缩为gz格式。本脚本支持两个参数。第一
#          个参数为数据库类型(myisam,innodb) 第二个参数是想要dump的
#          数据库。如果省略第二个参数默认备份所有。
# History:
#
#================================================
 
. /etc/profile
 
USER="root"
PWD="jobkoo"
CHARACTER="utf8"
 
DATE=`date +%F`
 
DUMP_MYISAM_ARG=" -u $USER -p$PWD --default-character-set=$CHARACTER
--opt --extended-insert=false --triggers -R --hex-blob -x "
 
DUMP_INNODB_ARG=" -u $USER -p$PWD --default-character-set=$CHARACTER --opt
--extended-insert=false --triggers -R --hex-blob --single-transaction "
MYSQL=`which mysql`
MYSQLDUMP=`which mysqldump`
SCP=`which scp`
 
# 本地备份后scp到目标主机的路径
TARGET_PATH="/data/db_dump_sql/"
TARGET_HOST="210.51.191.183|192.168.108.112"
TARGET_TYPE=2 # 选择 TARGET_HOST变量中的第二个主机地址 
 
BAK_FILENAME=rms_db_`date +%F`.sql.gz
 
# argument 1 : mysql data type
DATABASE_TYPE=`echo $1 | tr 'A-Z' 'a-z'`
 
# argument 2 :  to be dumped database
if [ "$2" == "" ];then
    TO_BAK_DB="all"
else
    TO_BAK_DB=`echo $2 | tr 'A-Z' 'a-z'| sed 's/,/ /g'`
fi
 
# 将备份下来的数据库scp到其他主机
function SCPTOHOST()
{
HOST=`echo $TARGET_HOST|cut -d '|' -f $TARGET_TYPE`
$SCP $1 $HOST:$TARGET_PATH
}
 
# 检查用户输入的数据库名是否存在,若存在,执行备份数据库操作
function DUMPSELECTDB()
{
for BASE in $TO_BAK_DB
do
  DB=`$MYSQL -u $USER -p$PWD -e 'show databases;' | grep $BASE`
  if [ "$DB" == "" ];then
    echo "You choose database $DB not exist! please try again!"
    continue
  else
  $MYSQLDUMP $1 -B $BASE | gzip >$TARGET_PATH/$BASE\_$DATE.sql.gz
  SCPTOHOST $TARGET_PATH/$BASE\_$DATE.sql.gz 2>&1>/dev/null
  fi
done
}
 
function DUMPALL()
{
$MYSQLDUMP $1 -A | gzip >$TARGET_PATH/$BAK_FILENAME
SCPTOHOST $TARGET_PATH/$BAK_FILENAME 2>&1>/dev/null
}
 
# main
if [ "$1" == "myisam" ];then
 
   if [ "$TO_BAK_DB" == "all" ];then
	DUMPALL "$DUMP_MYISAM_ARG"
   else
        DUMPSELECTDB "$DUMP_MYISAM_ARG"
   fi
 
elif [ "$1" == "innodb" ];then
 
   if [ "$TO_BAK_DB" == "all" ];then
	DUMPALL "$DUMP_INNODB_ARG"
   else
	DUMPSELECTDB "$DUMP_INNODB_ARG"
   fi
 
else
	echo "please input correct mysql db type!(myisam or innodb)"
	exit 1
fi