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

菜鸟学Linux 第031篇笔记 script,控制,while,function

2016-11-24 09:15 246 查看
菜鸟学Linux 第031篇笔记 script,控制,while,function

一、脚本需求:
说明:此脚本能于同一个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, 并退出

Script key (脚本不怎么健壮仅做输入正确使用)
#!/bin/bash
#
REPOFILE=/etc/yum.repos.d/$1

if [ -e $REPOFILE ]; then
echo "$1 is existed or you didn't input anything."
exit 5
fi

read -p "Repository ID:" REPOID
until [ $REPOID == 'quit' ]; do
echo "[$REPOID]" >> $REPOFILE
read -p "Repository name:" REPONAME
echo "name=$REPONAME" >> $REPOFILE
read -p "Repository Baseurl:" REPOURL
echo "baseurl=$REPOURL" >> $REPOFILE
echo -e 'enabled=1\ngpgcheck=0\n\n' >> $REPOFILE
read -p "Repository ID:" REPOID
done

二、脚本需求
1.判断一个指定的bash脚本是否有语法错误:如有错误则提醒用户键入
Q或q无视错误并退出,其它键入任何键直接通过vim打开该脚本进行编辑
2.如果用户通过vim打开编辑后保存退出时仍然有错误,则重要第一步;否则关闭

script2 key (脚本不怎么健壮仅做输入正确使用)
#!/bin/bash
#
until bash -n $1 &> /dev/null; do
read -p "$1 file syntax error.[Qq] to quit, others for editing:" CHOICE
case $CHOICE in
q|Q)
echo "$1 file is wrong in syntax, quiting..."
exit 5
;;
*)
vim $1
;;
esac
done

循环控制
while, until, for

break 提前退出循环
continue 提前结束本轮循环,而进入下一轮循环;

while循环特殊用法

1.死循环(在不知道要执行多少次循环时可用此招,
但里边最好有中断break条件,不然真的就死循环了,你懂得)
while :; do
statement
done

2.从头读取某文件中的每一行并对其进行操作
while read LINE; do
statement
done < /PATH/TO/SOMEFILE

函数:功能 function
代码重用
库:so shared object

一、定义函数
1.
function function_name {
command
函数体
}

2.(注意函数名后边紧跟小括号)
FUNCNAME() {
command
函数体
}

二、自定义函数执行状态返回值
return #
#为数字0-255
函数如果被调用时遇到return #语句则后边的函数体语句不被执行
与exit # 在主函数体里类似

三、给函数传递参数
给脚本传递参数
./a.sh m n
$1 m
$2 n

给函数传递参数类似(在调用函数时直接后接参数,在函数体内用$1,$2)
FUNCNAME() {
command $1 $2
函数体
}
FUNCTIONNAME M N

执行返回值
命令执行时标准输出到屏幕上的东东
执行状态返回值
命令执行完成后执行正确或错误会有一个执行状态返回值,
此信息不会直接显示到标准输出,使用echo $?可以查看该值

条件判断里的条件可以引用执行状态返回值

写脚本
判定192.168.0.230-254之间的主机哪里在线。要求
1.使用函数实现一台主机的判定过程
2.在主程序中调用此函数

script key
#!/bin/bash
#
PING(){
if ping -c1 -w1 $1 &> /dev/null;then
return 0
else
return 1
fi
}

for I in {30..35};do
PING 10.217.3.$I
if [ $? -eq 0 ]; then
echo "10.217.3.$I is up"
else
echo "10.217.3.$I is down"
fi
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  控制 while function