上篇关于测试语句的使用规则及相关使用方法,如果仅仅孤立使用时很难有其用武之地,当然在shell脚本中其实不可能孤立存在的,只有与条件语句和控制语句等搭配使用才能使其功能得到最大限度的体现,因此在日常使用中,其功能不容小觑。
一、控制流程
if控制流程可分为但分支if语句和多分支if语句,其使用语和C语言中有很多相似之处,具体用法如下文所述。
1.1但分支if语句结构:
1.2基本语法
1
2
3
4
|
if
条件 或
if
条件;
then
//
分号表示两个命令写在一行并不相互影响,命令执行顺序是从左往右依次执行。
then
语句
语句
fi
fi
|
例一.
1
2
3
4
5
|
#!/bin/bash
if
[ $USER == root ];
then
echo
"error"
exit
127
//
此处的
exit
为错误输出提示符
fi
|
1.3双分支if结构
1.4双分支if语句语法结构
1
2
3
4
5
|
if
条件1 ;
then
命令1
else
命令2
fi
|
例二.
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
ping
-c 3 $1 &>
/dev/null
if
[ $? -
eq
0 ];
then
echo
"THE HOST $1 is up"
//
该行中的$1为位置参数,具体可见脚本运行实例
else
echo
"THE HOST $1 is down"
fi
[root@node1 ~]
# sh if1.sh 192.168.213.101
THE HOST 192.168.213.101 is up
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/bash
service $1 status &>
/dev/null
if
[ $? == 0 ];
then
echo
"THE $1 is running"
else
echo
"THE $1 is Stop"
fi
[root@node1 ~]
# sh if1.sh network
THE network is running
[root@node1 ~]
# sh if1.sh NetworkManager
THE NetworkManager is running
[root@node1 ~]
# service NetworkManager stop
Stopping NetworkManager daemon: [ OK ]
[root@node1 ~]
# sh if1.sh NetworkManager
THE NetworkManager is Stop
[root@node1 ~]
#
|
二、多分支流程控制
2.1流程控制原理图
2.2语法结构
1
2
3
4
5
6
7
8
9
10
|
if
条件1 ;
then
命令1
elif
条件2 ;
then
命令2:
elif
条件3 ;
then
命令3
……………………
else
命令n
fi
|
例三.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/bash
ch=China
J=Japan
read
-p
"请输入你的国别:"
coun
//read
实现人机交互指令通常与-p -t 和-n配合使用
if
[ $coun == $ch ];
then
echo
"您是中国人"
elif
[ $coun == $J ] ;
then
echo
"你是日本人"
else
echo
"您是其他人"
fi
[root@node1 ~]
# ./if1.sh
请输入你的国别:U.s
您是美国人
[root@node1 ~]
# ./if1.sh
请输入你的国别:China
您是中国人
[root@node1 ~]
#
|
1
|
[root@node1 ~]
# vi if.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/bash
read
-p
"请输入要测试的文件:"
file
//
操作者运行脚本时提示输入的文件
if
[ -d $
file
] ;
then
echo
"该文件是目录文件"
elif
[ -f $
file
] ;
then
echo
"该文件是普通文件"
elif
[ -r $
file
] ;
then
echo
"该文件是可写文件"
else
echo
"该文件权限未知"
fi
[root@node1 ~]
# ./if.sh
请输入要测试的文件:
passwd
该文件是普通文件
|
以上列举出了关于if几种常用的流程控制语句,动手试试吧!!!
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自 CARYFLASH 51CTO博客,原文链接:http://blog.51cto.com/maoxiaoxiong/1840661