本文共 2244 字,大约阅读时间需要 7 分钟。
菜鸟学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
本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1876022如需转载请自行联系原作者
Winthcloud