菜鸟学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