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

简介:

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

bash变量类型:

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

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

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

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

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

指定变量类型:declare

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

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

        declare -a variable:声明一个数组

语言控制结构:

        1、顺序结构

        2、选择执行

        3、循环执行

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),为指定的硬盘创建分区:
1、列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择;
2、当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,n就退出;否则,让用户重新选择;
3、抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区);并为其创建三个主分区,第一个为20M,第二个为512M, 第三个为128M,且第三个为swap分区类型;

wKioL1Nosu6hSz4PAANeG58syGM769.jpg

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

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

wKioL1Nos2_g8ojfAAKySINADZM174.jpg

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

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



本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1406577

相关文章
|
4月前
|
Shell 开发者
深入理解Bash脚本中的函数
【8月更文挑战第20天】
90 0
|
4月前
|
监控 安全 Shell
有用的 Bash 别名和函数简介
有用的 Bash 别名和函数简介
27 0
|
7月前
|
存储 弹性计算 运维
bash中的函数
【4月更文挑战第29天】
37 0
|
7月前
|
机器学习/深度学习 Unix Shell
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
134 0
|
缓存 Shell 开发工具
【Shell编程】Shell中Bash基本功能
【Shell编程】Shell中Bash基本功能
106 0
【Shell编程】Shell中Bash基本功能
|
Shell
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
94 0
|
Shell
【Shell编程】Shell中Bash变量-预定义变量
【Shell编程】Shell中Bash变量-预定义变量
115 0
|
Shell
【Shell编程】Shell中Bash变量-环境变量
【Shell编程】Shell中Bash变量-环境变量
84 0
|
机器学习/深度学习 Shell
【Shell编程】Shell中Bash变量-位置参数变量
【Shell编程】Shell中Bash变量-位置参数变量
117 0
|
Shell
【Shell编程】Shell中Bash变量-用户自定义变量
【Shell编程】Shell中Bash变量-用户自定义变量
91 0