shell 脚本练习4

练习:写一个脚本,(使用函数)
	1、提示用户输入一个磁盘设备的设备文件,如果设备文件不存在,就提示用户重新输入,直到用户输入正确为止;
		当用户给出正确的块设备后:
		1、显示用户输入块设备,并提示用户,后续的操作会损坏设备上的所有文件,让用户选择是否继续
		2、如果用户输入y,则继续后面的操作;
			1、如果用户选择了y, 则抹除指定块设备上的所有分区;
				1、在上面的磁盘创建两个主分区:
					(1) 50M
					(2) 512M
				2、均格式化为ext4文件系统;
				3、分别挂载至/mnt/boot和/mnt/sysroot
					1、在此设备上安装grub;
					2、在/mnt/sysroot目录下创建根文件系统所需要各目录;
						1、移植多个应用程序,至少包含bash、ifconfig等;
		3、如果用户输入n,则显示用户选择了中止,并退出脚本;
		4、输入任何其它字符,则让用户重新选择;
	2、用户可以输入quit退出;
#!/bin/bash
#########################################################################
# File Name: 007.sh
# Author: LookBack
# Email: [email protected]
# Licence: GNU General Public Licence
# Created Time: Wed 23 Jul 2014 04:11:57 AM CST
#########################################################################

mntboot="/mnt/boot"
mntsysroot="/mnt/sysroot"
Program="bash ifconfig ls df ping"

checkInput() {
	clear
	until [ -n "$(fdisk -l $DiskName)" -a -n "echo $(fdisk -l $DiskName) | grep -o ‘[0-9]‘" ]; do
		read -p "Plz Enter A Device File Name : " DiskName
	done
}

printDisk() {
	clear
	fdisk -l $DiskName
	echo "============================================================================================="
	echo "====                                                                                     ===="
	echo "==== Subsequent actions will damage all the files on the device, ask whether to continue ===="
	echo "==== If you continue, please enter: y|Y|Yes|YES|yes|yES|yEs|YeS|yeS                      ===="
	echo "==== If you do not want to enter the: n|N|No|NO|no|nO                                    ===="
	echo "====                                                                                     ===="
	echo "============================================================================================="
	echo ""
	read XDisk
}

makePartition() {
	dd if=/dev/zero of=$DiskName bs=512 count=1
	fdisk $DiskName << EOF
n
p
1

+50M
n
p
2

+512M
w
EOF
}

mke2fsPartition() {
	mke2fs -t ext4 ${DiskName}{1,2}
}

mountPartition() {
	[ ! -d "$mntboot" ] && mkdir -p "$mntboot" && mount ${DiskName}1 $mntboot
	[ ! -d "$mntsysroot" ] && mkdir -p $mntsysroot && mount ${DiskName}2 $mntsysroot
}

installGrub() {
	grub-install --root-directory=/mnt $DiskName
}

makeFHSdir() {
	mkdir {bin,dev,etc,home,lib/modules,lib64,opt,proc,root,sbin,selinux,sys,usr/{bin,sbin,lib,lib64},mnt,media,tmp,var/lib}
}

transplantProgram() {
	for I in echo $Program; do
		[ ! -d ${mntsysroot}$(dirname $I) ] && mkdir -p ${mntsysroot}$(dirname $I)
		[ ! -f ${mntsysroot}$(which --skip-alias $I) ] && cp $(which --skip-alias $I) ${mntsysroot}$(dirname $I)
		for II in $(ldd $(which --skip-alias $I) | grep -oE ‘/[^[:space:]]+‘); do
			[ ! -d ${mntsysroot}$(dirname $II) ] && mkdir -p ${mntsysroot}$(dirname $II)
			[ ! -f ${mntsysroot}$II ] && cp $II ${mntsysroot}/
		done
	done
}

nextScript() {
	printDisk
	case $XDisk in
	y|Y|Yes|YES|yes|yES|yEs|YeS|yeS)
		makePartition
		mke2fsPartition
		mountPartition
		installGrub
		makeFHSdir
	n|N|No|NO|no|nO)
		clear
		exit 0 ;;
	*)
		nextScript
	esac
}

read -p "Plz Enter A Device File Name : " DiskName
case $DiskName in
q|Q|quit|QUIT)
	clear
	exit 0
	;;
*)
	checkInput
	nextScript
esac
时间: 2024-10-24 17:13:27

shell 脚本练习4的相关文章

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

利用shell脚本批量修改表

最近公司里因为开发新功能,程序员需要快速在某一个库里的所有表添加字段,于是就用shell脚本简单快速实现批量修改表添加字段 #!/bin/bash export mysql_bin=/usr/local/mysql/bin export database=database export tables=`$mysql_bin/mysql -Bse "use ${database};show tables;"` for i in ${tables}         do          

Shell 脚本模拟 milter 实现黑白名单及关键词过滤

程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键词信息,则拒绝接收   该邮件;否则,接收该邮件. Usage: sh mailfilter.sh  [-r reject-addr] [-a add-addr][-k keywords]########################################################

Linux Shell脚本攻略(1.12)

1.12 函数和参数 和其他脚本语言一样,Bash同样支持函数,并且可以传递参数. 1.12.1 函数定义和传参 #!/bin/bash function fname() #也可以用fname()代替 { echo $1,$2; #访问参数1和参数2 echo "[email protected]"; #以列表的方式一次性打印所有参数 echo "$*"; #类似于[email protected],但是参数被作为单个实体 return 0; #返回值 } fnam

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装 首先在网上用gfsoso.com来搜索下载mysql软件包mysql-5.5.28-linux2.6-x86_64.tar.gz,再用 winSCP把mysql上传到服务器上,上传位置可根据个人喜好,我个人一般放在服务器的/usr/local/src目录下. 此处我们是先命令行下实现一次,而后所有操作全部用shell脚本自动实现. 个人环境 centos 6.5 X86-64  所用空闲空间都做成了LVM. 准备工作