您的位置:首页 > 运维架构 > Shell

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

2014-05-05 13:35 309 查看
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,并为它们设置密码。



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



如何在shell脚本中进行算术运算:
写一个脚本,计算100以内所有整数的和。



判断:
if 条件;then
sentence one
sentence two
.....
else
sentence one
sentence two
.....
fi
例1:让用户输入一个用户,如果其ID号大于499就说明是普通用户,否则就说明是管理员或系统用户。



例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打开此文件,并使用光标默认处于最后一行;
保存退出后,如果文件有语法错误提示用户有错误;
如果没有语法错误,则给些文件赋予执行权限;



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}”



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



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;



终于写完了,bash的内容有点多。 以上代码都是小菜手写测试截图。
有问题欢迎与我交流QQ:1183710107

本文出自 “突破舒适区” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: