bash脚本编程之函数
1、bash脚本编程函数的作用?
答:函数的主要功能是为了代码重用,模块化编程,是脚本的代码结构清晰。
2、函数的定义格式有几种,具体是什么格式?
答:函数的定义格式之一:
function 函数名{
函数体
}
函数的定义格式之一:
函数名 () {
函数体
}
实例:探测172.16.0.0内的所有主机的状态
#!/bin/bash #***************************************************************************************** # Check user login System * # zouhg 2014-12-3 * #***************************************************************************************** #***************************************************************************************** # function code * #***************************************************************************************** function Ping { ip=$1 if ping -t1 -w1 $ip &> /dev/null;then echo -e "\033[32m$ip is On-line\033[0m" else echo -e "\033[31m$ip not On-line\033[0m" fi } #***************************************************************************************** # Mian function code * #***************************************************************************************** main() { for i in {0..255};do for j in {1..254};do Ping 172.16.$i.$j done done } main
3、函数的基本用法
函数的调用:使用函数名,函数名出现的地方,会被自动替换为函数代码
函数的返回值:函数的执行结果返回值:(1)函数中使用打印语句:echo、printf
(2)函数体中系统命令执行结果的输出
函数的退出状态码:默认取决于函数体执行的最后一个命令的退出状态码。
自定义退出状态码:return [0-255] ;注意:函数体运行时,一旦遇到return语句,函数即返回
函数可接受参数:传递参数给函数:调用函数时,在函数名后给出参数列表即可;格式:函数名 参数1 参数2 参数3 ..
在函数体中可使用$1,$2......来调用传递过来的各参数;可使用类似脚本的特殊变量:$*,$@:一次性获取参数列表,$#:参数的个数。
实例:要求:1、列出当前系统上的所有磁盘设备;
2、让用户选择一个磁盘设备,并在选择后显示指定设备上的所有分区信息;
3、询问用户是否擦除此磁盘上的所有现存分区后重新添加三个分区;
y或yes: 继续
n或no: 中止脚本
其它字符则提醒用户重新输入合法的字符
4、在用户选择是后执行相应的分区操作
创建三个分区
主分区1:512M,ext4
主分区2: 512M,swap
主分区3:2G,ext4
5、将创建的分区按如上说明分别格式为相应的文件系统;
6、将主分区1挂载至/mnt/boot目录,主分区3挂载至/mnt/sysroot目录;
#!/bin/bash #************************************************************************** # zouhg 2014-12-2 * # fdisk tool * #************************************************************************** #************************************************************************** # Function code section * #************************************************************************** function ListDsik { echo "The current system of disk:" fdisk -l |grep "Disk /dev/[sh]d" |cut -d: -f1|cut -d' ' -f2 } function ListPart { if [ -b $1 ];then fdisk -l $1 return 0 else return 1 fi } function CheckMount { if mount |grep "$1" &> /dev/null ;then for mountDisk in `mount |grep "$1" |cut -d' ' -f1`;do if ! umount $mountDisk &> /dev/null;then fuser -km $mountDisk &> /dev/null umount $mountDisk &> /dev/null fi done fi } function Partition { local dvice=$1 dd if=/dev/zero of=$dvice bs=510 count=1 &> /dev/null echo -e "\033[32m$1 clean partitions successfully\033[0m" echo -e "n\np\n1\n\n+512M\nn\np\n2\n\n+512M\nn\np\n3\n\n+2G\nt\n2\nb8\nwq" |fdisk $dvice &> /dev/null partx -d $dvice &> /dev/null partx -a $dvice &> /dev/null echo -e "\033[32mCreate partitions successfully \033[0m" } function Mkfs { local mk_type=$1 local dir_dvice=$2 if [ $mk_type == "swap" ];then mkswap $dir_dvice &> /dev/null else mkfs -t $mk_type $dir_dvice &>/dev/null fi echo -e "\033[32mmkfs $dir_dvice successfully\033[0m" } function Mount { local dir_dvice=$1 local dir_point=$2 if [ -d $2 ] ;then mount ${dir_dvice} $dir_point &> /dev/null else mkdir -p $dir_point &> /dev/null mount ${dir_dvice} $dir_point &> /dev/null fi echo -e "\033[32mmount $dir_dvice successfully\033[0m" } #************************************************************************** # The main function of part of the code * #************************************************************************** main(){ while true ;do ListDsik read -p "Please enter an existing disk:" disk if ListPart $disk;then while true;do read -p "Delete the partition table,select the automatically partition(yes/no):" delete case $delete in yes) CheckMount $disk Partition $disk Mkfs "ext4" ${disk}1 Mkfs "swap" ${disk}2 Mkfs "ext4" ${disk}3 Mount ${disk}1 "/mnt/boot" Mount ${disk}3 "/mnt/sysroot" break;; no) break;; *) echo -e "\033[31mERR:Please input yes or no!!!\033[0m";; esac done break else echo -e "\033[31mERR:Disk equipment department \033[0m" fi done } main