码迷,mamicode.com
首页 > 其他好文 > 详细

Bash编程语法结构第二节

时间:2014-08-03 15:27:16      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:target   style   title   blank   border   

Bash编程语法结构

一、for结构

bubuko.com,布布扣

其中 $var 是循环控制变量,[list] 是 $var 需要遍历的一个集合,

do/done 对包含了循环体,相当于 C 语言中的一对大括号。另外如果

do 和 for 被写在同一行,必须在 do 前面加上 ";"。如: 

for $var in [list]; do 。下面是一个运用 for 进行循环的例子:

bubuko.com,布布扣

bubuko.com,布布扣

二、while适用于循环次数未知,或不便用for直接生成较大的列表时;

     while 测试条件; do

     循环体

    done

测试条件为真,进入循环;测试条件为假,退出循环;

测试条件一般通过变量来描述,需要在循环体不变量地改变变量的值,

以确保某一时刻测试条件为假,进而结束循环;

bubuko.com,布布扣

三、until格式:

     until 测试条件; do

          循环体

     Done

测试条件为假,进入循环;测试条件为真,退出循环;

测试条件一般通过变量来描述,需要在循环体不变量地改变变量的值,

以确保某一时刻测试条件为真,进而结束循环;

bubuko.com,布布扣

四、If 结构

               单分支结构   双分支结构   及多分支结构

bubuko.com,布布扣

bubuko.com,布布扣

练习:给定一个文件路径

1、判断此文件是否存在;不存在,则说明文件不存,并直接结束脚本;

2、如果文件是否普通文件,则显示为“regular file”;

如果文件是目录,则显示为“directory”;

如果文件是链接文件,则显示为“Symbolic file";

否则,则显示为“unknown type.”

bubuko.com,布布扣

五、case 条件选择

case string in
exp-1)
若干个命令行1
;;
exp-2)
若干个命令行2
;;
……
*)

其他命令行

esac

shell通过计算字符串string的值,将其结果依次和表达式exp-1、

exp-2等进行比较,直到找到一个匹配的表达式为止,如果找到了

匹配项则执行它下面的命令直到遇到一对分号(;;)为止。

在case表达式中也可以使用shell的通配符(“*”、“?”、

“[ ]”)。通常用“*”作为case命令的最后表达式以便使在前面

找不到任何相应的匹配项时执行“其他命令行”的命令。

bubuko.com,布布扣

示例:服务脚本示例

#!/bin/bash
# chkconfig: 2345 67 34
srvName=$(basename $0)
lockFile=/var/lock/subsys/$srvName
start() {
    if [ -f $lockFile ];then
echo "$srvName is already running."
return 1
    else
touch $lockFile
[ $? -eq 0 ] && echo "Starting $srvName OK."
return 0
     fi
}
stop() {
    if [ -f $lockFile ];then
rm -f $lockFile &> /dev/null
[ $? -eq 0 ] && echo "Stop $srvName OK" && return 0
    else
echo "$srvName is not started."
return 1
    fi
}
status() {
    if [ -f $lockFile ]; then
echo "$srvName is running."
    else
echo "$srvName is stopped."
    fi
    return 0
}
usage() {
     echo "Usage: $srvName {start|stop|restart|status}"
     return 0
}
case $1 in
start)
start
;;
stop)
stop ;;
restart)
stop
start ;;
status)
status ;;
*)
usage
exit 1 ;;

esac

六、循环条件控制 contine 、 break

continue: 提前进入下一轮循环

用于条件语句中,仅在某些个特殊场景提前进入;

break [n]:跳出当前循环

用于条件语句中,跳出当前循环

bubuko.com,布布扣

七、函数

function F_NAME {
函数体
}
F_NAME() {
函数体
}
可调用:使用函数名
函数名出现的地方,会被自动替换为函数;
脚本:
函数的返回值:
函数的执行结果返回值:代码的输出
函数中的打印语句:echo, print
函数中调用的系统命令执行后返回的结果
执行状态返回值:
函数体中最后一次执行的命令状态结果
自定函数执行状态的返回值:return #

脚本:写一个脚本,能够ping探测指定网络内的所有主机是否在线?

#!/bin/bash
#
quitScript() {
    echo "Quit..."
}   
trap ‘quitScript; exit 5‘ SIGINT
cnetPing() {
    for i in {1..254}; do
if ping -c 1 -W 1 $1.$i &> /dev/null; then
     echo "$1.$i is up."
else
     echo "$1.$i is down."
fi
     done
}
bnetPing() {
    for j in {0..255}; do
cnetPing $1.$j
    done
}
anetPing() {
    for m in {0..255}; do
bnetPing $1.$m
    done
}
netType=`echo $1 | cut -d"." -f1`
if [ $netType -ge 1 -a $netType -le 126 ]; then
    anetPing $netType
elif [ $netType -ge 128 -a $netType -le 191 ]; then
    bnetPing $(echo $1 | cut -d‘.‘ -f1,2)
elif [ $netType -ge 192 -a $netType -le 223 ]; then
    cnetPing $(echo $1 | cut -d‘.‘ -f1-3)
else
    echo "Wrong"
    exit 2
fi


Bash编程语法结构第二节,布布扣,bubuko.com

Bash编程语法结构第二节

标签:target   style   title   blank   border   

原文地址:http://1983939925.blog.51cto.com/8400375/1534953

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!