標籤:shell linux
練習:寫一個指令碼,(使用函數)1、提示使用者輸入一個磁碟裝置的裝置檔案,如果裝置檔案不存在,就提示使用者重新輸入,直到使用者輸入正確為止;當使用者給出正確的塊裝置後:1、顯示使用者輸入塊裝置,並提示使用者,後續的操作會損壞裝置上的所有檔案,讓使用者選擇是否繼續2、如果使用者輸入y,則繼續後面的操作;1、如果使用者選擇了y, 則抹除指定塊裝置上的所有分區;1、在上面的磁碟建立兩個主要磁碟分割:(1) 50M(2) 512M2、均格式化為ext4檔案系統;3、分別掛載至/mnt/boot和/mnt/sysroot1、在此裝置上安裝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() {clearuntil [ -n "$(fdisk -l $DiskName)" -a -n "echo $(fdisk -l $DiskName) | grep -o ‘[0-9]‘" ]; doread -p "Plz Enter A Device File Name : " DiskNamedone}printDisk() {clearfdisk -l $DiskNameecho "============================================================================================="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=1fdisk $DiskName << EOFnp1+50Mnp2+512MwEOF}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}/donedone}nextScript() {printDiskcase $XDisk iny|Y|Yes|YES|yes|yES|yEs|YeS|yeS)makePartitionmke2fsPartitionmountPartitioninstallGrubmakeFHSdirn|N|No|NO|no|nO)clearexit 0 ;;*)nextScriptesac}read -p "Plz Enter A Device File Name : " DiskNamecase $DiskName inq|Q|quit|QUIT)clearexit 0;;*)checkInputnextScriptesac
shell 指令碼練習4