#!/bin/bash
#By Spinestars#2013-11-11#This is a lvsnap of auto-create
Help(){
echo "Usage:
---device eg:sd[b-z]
---partition_number eg:-
---partition_size  

-P \"1 2 3\" create partition
eg:lvsnap.sh -P \"sdc 1 4G\"
-p \"1 2\" create lv
-a \"1 2 3\"create all (interactive)
-h Usage
"
}#**********************************************************
part(){
fdisk -l /dev/$ &&
read -p " if go on ,initialize the $1 partation [any press] or ctrl + c:"
 bs= count=
sync
echo 'create partition:'
echo "n
p
$

+$
t
8e
w
p" | fdisk /dev/$1
sync

partx -a /dev/$$ /dev/$
echo "$1$2 has been created successfully!The size is $3!"
}#**********************************************************
pv(){
ifpv=`pvdisplay | grep "/dev/$1$2"`
echo 'create pv...'
[ -z "$ifpv" ] &&
pvcreate /dev/$$ ||
echo "Warnning:PV:$1$2 is existed!" && read -p " if go on [any press] or ctrl + c:"
}
#**********************************************************
vg(){
read -p 'create vg(plesae input vgname):' vgname
ifvg=`vgdisplay | grep "$vgname"`
[ -z "$ifvg" ] &&
vgcreate $vgname /dev/$$ ||
echo "Warnning:$vgname is existed!" && read -p "if go on [any press] or ctrl + c:"
}
#**********************************************************
lv(){
read -p 'create lv(please input lvname):' lvname
read -p 'create lv(please input lvsize):' lvsize
iflv=`lvdisplay | grep "/dev/$vgname/$lvname"`
[ -z "$iflv" ] &&
lvcreate -n $lvname -L $lvsize $vgname  &&
echo "initialize /dev/mapper/$vgname-$lvname:" &&
mke2fs -t ext4 /dev/mapper/$vgname-$lvname &&
 ||
echo "Warnning:$lvname is existed!" &&
read -p "if go on [any press] or ctrl + c:"
read -p "mount /dev/mapper/$vgname-$lvname(please input mount point and if point is not exist ,then create it):" point
ls / | grep "^`basename $point`$" &&
mount | grep "$lvname" &&
echo "$point is existed and is mounted!" ||
{
mkdir -p $point &&
mount -t ext4 /dev/mapper/$vgname-$lvname $point &&
[ $? -eq  ] && echo "$vgname-$lvname is mounted successfully!"
}
}
#********************************************************
# ];do
#    [ $lvsnapsize -le $lvsize ] ||
#    echo "Warnning:$lvsnapsize is too larger!" &&
#    read -p 'Retry:input lvsnapsize:' lvsnapsize
#done
#********************************************************
lvsnap(){
read -p 'create lvsnap(please input lvsnapname):' lvsnapname
read -p 'create lvsnap(please input lvsnapsize):' lvsnapsize &&
iflv=`lvdisplay | grep "/dev/$vgname/$lvsnapname"`
[ -z "$iflv" ] &&
lvcreate -s -p r -n $lvsnapname -L $lvsnapsize /dev/mapper/$vgname-$lvname ||
echo "Warnning:$lvsnapname is existed!" && read -p "if go on [any press] or ctrl + c:"
read -p "mount /dev/mapper/$vgname-$lvsnapname(please input mount point and if point is not exist ,then create it):" snappoint
ls / | grep "^`basename $snappoint`$" &&
mount | grep "$lvsnapname" &&
echo "$snappoint is existed and is mounted!" ||
{
mkdir -p $snappoint &&
mount -t ext4 /dev/mapper/$vgname-$lvsnapname $snappoint &&
[ $? -eq  ] && echo "$vgname-$lvsnapname is mounted successfully!"
}
}
#*********************************************************
tar2bak(){
bakfile_name="/backup/$lvname/$lvname-`date +%F_%T`.tar.xz"
echo $bakfile_name
mkdir "${bakfile_name%/*}"
echo "tar $snappoint to ${bakfile_name%/*}:"
tar Jcf $bakfile_name $snappoint
[ -f $bakfile_name ] &&
echo "$bakfile_name has been created successfully!"

echo "remove $lvsnapname:"
umount $snappoint
lvremove /dev/mapper/$vgname-$lvsnapname
}

while getopts P:p:ha: select
do
    case $select in
    P)
        read -p 'partition automation to create[yes|no]:' Partif
        [ $Partif = 'yes' ] && part $OPTARG
    ;;
    p)
        pv $OPTARG
        vg
        lv
        lvsnap
        tar2bak && echo "backup success!" &&
        find ${bakfile_name%/*} -amin -1 -type f -ls
    ;;
    a)
        read -p 'partition automation to create[yes|no]:' Partif
        [ $Partif = 'yes' ] && part $OPTARG
        read -p 'Pv automation to create[yes|no]:' Pvif
        [ $Pvif = 'yes' ] && pv
        read -p 'Vg automation to create[yes|no]:' Vgif
        [ $Vgif = 'yes' ] && vg
        read -p 'Lv automation to create[yes|no]:' Lvif
        [ $Lvif = 'yes' ] && lv
        read -p 'Lvsnap automation to create[yes|no]:' Lvsnapif
        [ $Lvsnapif = 'yes' ] && lvsnap
        read -p 'bak is baginning [yes|no]:' tar2bakif
        [ $tar2bakif = 'yes' ] && tar2bak && echo "backup success!" &&
        find ${bakfile_name%/*} -amin -1 -type f -ls
    ;;
    *)
        Help
    ;;
    esac
done

shell脚本练习(短路练习)的更多相关文章

  1. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  2. shell && 和 || 的短路使用

    shell && 和 || 的短路使用 && 和 || 在 shell 中分别表示 and 和 or,和其它语言类似,这两个操作有短路效应.也就是说,当判断式已经确定时 ...

  3. shell脚本编程之for语句、if语句使用介绍

    介绍了shell脚本编程之for语句.if语句的使用方法. 上部: 面向过程: 顺序执行 选择执行: if, case 循环执行: for, while, until 一.for语句 格式:      ...

  4. [转载]关于shell脚本的基本语法

    关于shell脚本的基本语法 整理于:2014-03-31,何俭飞,mymladdr@sina.com 一.执行 1.shell脚本如果要被执行,一般地必须要有执行权限"x"(除了 ...

  5. Shell脚本编写

    1.什么是Shell脚本 Shell脚本是利用 shell 的功能所写的一个程序 program,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式.管 ...

  6. shell脚本编写实例

    实际案例 1.判断接收参数个数大于1 [ $# -lt 1 ] && echo "至少需要一个参数" && { echo "我要退出了.. ...

  7. Linux基础篇–shell脚本编程基础

    本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础程序:指令+数据程序编程风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为中心 ...

  8. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  9. shell脚本-基础

    shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...

随机推荐

  1. 前端开发:面向对象与javascript中的面向对象实现(一)

    前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...

  2. mq_unlink

    NAME mq_unlink - 销毁一个消息队列 (REALTIME) SYNOPSIS #include <mqueue.h> int mq_unlink(const char *na ...

  3. 关于 .net 开发 Office Word 的一些问题小结

    1.在"组件服务"的DCom配置中找到Microsoft Office Word =>属性=>标识选项卡,然后选择交互式用户:::=>"安全" ...

  4. [Angular 2] Adding a data model

    Instead of add todo as a string, we create a data model: export class TodoModel{ constructor( public ...

  5. Routing(路由) &amp; Multiple Views(多个视图) step 7

    Routing(路由) & Multiple Views(多个视图) step 7 1.切换分支到step7,并启动项目 git checkout step-7 npm start 2.需求: ...

  6. seo优化做起来不是哪么简单,其实需要的是思维

          SEO百科:随着人们互联网的认识水平的提升,SEO似乎也已经得到了更多的认识.无论是浅显还是深入,SEO一直被大众认为是简单的,甚至是不值得一提的东西,甚至认为SEO无非就是作弊,SEO并 ...

  7. ubuntu修改键盘映射

    code {margin: 0;padding: 0;font-size: 100%;word-break: normal;background: transparent;border: 0;}ol ...

  8. nodeJs 操作Mysql数据库

    nodeJs下操作数据库需要安装npm模块: mysql npm install mysql --save-dev 新建express项目 express --view=ejs 在项目根目录下新建数据 ...

  9. ADOQuery.Parameters: Property Parameters does not exist

    Exception class EReadError with message 'Property Parameters does not exist'. Exception class EReadE ...

  10. 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行

    使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行 前几天项目中有一个图表的是用echart生成的,遇到一个问题,就是在手机端显示的售时候,如果文字太长就会超出div,之前的 ...