总结bash编程基础,引入函数结构化编程。

        bash——Bourn Again Shell 是一种解释器解释执行的脚本语言,也能够实现编程功能。shell

bash变量类型:编程

        本地变量:只对当前shell有效vim

        局部变量:local variable 仅对局部代码有效数组

        环境变量:export variable 对当前shell及其子shell有效bash

        位置变量:$1,$2,$3ide

        特殊变量:$#,$!,$?,$@函数

指定变量类型:declare测试

        declare -i variable:声明一个整型变量ui

        declare -x variable:声明一个环境变量url

        declare -a variable:声明一个数组

语言控制结构:

        一、顺序结构

        二、选择执行

        三、循环执行

bash的for循环:

        for variable in Element list ;do

        sentence one

        sentence two

        ......

        done

例1:写一个脚本使用for建立10个用户user1..user10,并为它们设置密码。

wKioL1Nm5wGDIg9KAACPHLkZcdc486.jpg

例2:写一个脚本,使用for循环,复制/etc/fstab、/etc/inittab、/etc/rc.d/init.d/functions文件至/tmp目录中,并重命名为原有的名称以后加当前的日期。

wKiom1Nm6p_SP5frAACqxF53o5A107.jpg

如何在shell脚本中进行算术运算:

        写一个脚本,计算100之内全部整数的和。

wKioL1Nm7hmTBkDpAABp7qfYTU4098.jpg

判断:

        if 条件;then

        sentence one

        sentence two

        .....

        else

        sentence one

        sentence two

         .....

        fi

例1:让用户输入一个用户,若是其ID号大于499就说明是普通用户,不然就说明是管理员或系统用户。

wKioL1Nm-aiTvaBtAADDbZjRn54714.jpg

例2:写一个脚本,其能够接受三个参数,最后一个参数为文件名,但参数可变化,形如:
 script.sh  -a tuchao  /tuchao/test1.sh
 script.sh  -b 2013-07-19  /tuchao/test1.sh
 script.sh  -c 'some infomation' /tuchao/test1.sh

此脚本可以建立/magedu.com/scripts/test1.sh文件,而且,若是给出了-a MageEdu,则文件前两行为:
#!/bin/bash
# Author: MageEdu
若是给出了-d 2013-07-19,则文件前两行为:
#!/bin/bash
# Date: 2013-07-19
若是给出了-D "some infomation",则文件前两行为:
#!/bin/bash
# Description: some infomation
其它任何参数,均提示错误并退出;

若是没有退出,则使用vim打开此文件,并使用光标默认处于最后一行;

保存退出后,若是文件有语法错误提示用户有错误;

若是没有语法错误,则给些文件赋予执行权限;

wKioL1NnCoyS2sGJAAGKzkbfH_g723.jpg

bash编程之case:

case variable in 

           value1 )

            ;;

            value2)

            ;;

            value3)

            ;;

            * )

esac

例:写一个脚本:能够接受一个参数,其使用形式以下:
 sevtest.sh {start|stop|restart|status}
若是参数为start,且/var/lock/subsys/sevtest文件不存在,则建立空文件/var/lock/subsys/sevtest,并显示“Starting Server successfully.”;不然,显示“Server is already running.”

 若是参数为stop,且/var/lock/subsys/sevtest文件存在,则删除文件/var/lock/subsys/sevtest,并显示“Stop Server finished.”;不然,显示“Server is stopped yet.”

若是参数为restart,则删除文件/var/lock/subsys/sevtest后从新建立,并显示“Restarting Server successfully.”;
若是参数为status,那么:
 若是/var/lock/subsys/Server文件存在,则显示为“Server is running.”
 不然,则显示为“Server is stopped.”
其它任何参数:则显示“sevtest.sh {start|stop|restart|status}”

wKiom1NnIUyT_KZnAAMIYJ__fZ8121.jpg

再来一个例子?

例2:写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘建立分区:
一、列出当前系统上全部的磁盘,让用户选择,若是选择quit则退出脚本;若是用户选择错误,就让用户从新选择;
二、当用户选择后,提醒用户确认接下来的操做可能会损坏数据,并请用户确认;若是用户选择y就继续,n就退出;不然,让用户从新选择;
三、抹除那块硬盘上的全部分区(提示,抹除全部分区后执行sync命令,并让脚本睡眠3秒钟后再分区);并为其建立三个主分区,第一个为20M,第二个为512M, 第三个为128M,且第三个为swap分区类型;

wKioL1Nosu6hSz4PAANeG58syGM769.jpg

bash编程之函数,结构化编程:

 写一个脚本,完成如下功能:
说明:此脚本能于同一个repo文件中建立多个Yum源的指向;
一、接受一个文件名作为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存,不然,报错;
二、在脚本中,提醒用户输入repo id;若是为quit,则退出脚本;不然,继续完成下面的步骤;
三、repo name以及baseurl的路径,然后以repo文件的格式将其保存至指定的文件中;
四、enabled默认为1,而gpgcheck默认设定为0;
五、此脚本会循环执行屡次,除非用户为repo id指定为quit;

wKioL1Nos2_g8ojfAAKySINADZM174.jpg

 终于写完了,bash的内容有点多。   以上代码都是小菜手写测试截图。

有问题欢迎与我交流QQ:1183710107 

相关文章
相关标签/搜索