0%

Shell流程控制

Shell流程控制

流程控制if语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
单分支结构

if 如果你有钱 ;then
就嫁给你
fi


[root@shell shell]# cat if-1.sh
#!/bin/bash
if ls /opt ;then
echo "Ok"
fi


双分支结构

if 如果你有钱 ;then
就嫁给你
else
再见
fi


[root@shell shell]# cat if-1.sh
#!/bin/bash
if ls /opt ;then
echo "Ok"
else
echo "err"
fi


多分支


if 如果你有钱 ;then
就嫁给你
elif 如果你有房 ;then
也会嫁给你
elif 活好,运维技术好 ;then
倒贴也嫁给你
else
再见
fi

if语句中的文件比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
选项	说明								示例
-e 如果文件或目录存在则为真 [ -e file ]
-s 如果文件存在且至少有一个字符则为真 [ -s file ]
-d 如果文件存在且为目录则为真 [ -d file ]
-f 如果文件存在且为普通文件则为真 [ -f file ]
-r 如果文件存在且可读则为真 [ -r file ]
-w 如果文件存在且可写则为真 [ -w file ]
-x 如果文件存在且可执行则为真 [ -x file ]




[root@shell shell]# [ -d /etc ] && echo "该目录存在" || echo "该目录不存在"
该目录存在
[root@shell shell]# [ -d /etcc ] && echo "该目录存在" || echo "该目录不存在"
该目录不存在
[root@shell shell]# [ -f /etcc ] && echo "该目录存在" || echo "该目录不存在"
该目录不存在
[root@shell shell]# [ -f /etc ] && echo "该目录存在" || echo "该目录不存在"
该目录不存在
[root@shell shell]# [ -f /etc/hosts ] && echo "该目录存在" || echo "该目录不存在"
该目录存在
[root@shell shell]# [ ! -f /etc/hosts ] && echo "该目录存在" || echo "该目录不存在"
该目录不存在

数值比较[整数1 操作符 整数2 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
选项	说明						示例
-eq 等于则条件为真 [ 1 -eq 10 ]
-ne 不等于则条件为真 [ 1 -ne 10 ]
-gt 大于则条件为真 [ 1 -gt 10 ]
-lt 小于则条件为真 [ 1 -lt 10 ]
-ge 大于等于则条件为真 [ 1 -ge 10 ]
-le 小于等于则条件为真 [ 1 -le 10 ]



[root@shell shell]# [ 10 -eq 20 ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ 20 -eq 20 ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ 20 -ne 20 ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ 10 -ne 20 ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ 10 -ge 20 ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ 30 -ge 20 ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ 20 -ge 20 ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ 20 -le 20 ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ 30 -le 20 ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ 30 -gt 20 ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ 20 -gt 20 ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ 20 -lt 20 ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ 10 -lt 20 ] && echo "为真" || echo "为假"
为真

if字符比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
选项		说明					示例
== 等于则条件为真 [ "$a" == "$b" ]
!= 不相等则条件为真 [ "$a" != "$b" ]
-z 字符串的长度为零则为真 [ -z "$a" ]
-n 字符串的长度不为零则为真 [ -n "$a" ]



[root@shell shell]# [ $USER == "root" ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ $USER == "roo" ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ $USER != "roo" ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ $USER != "root" ] && echo "为真" || echo "为假"
为假
[root@shell shell]# name=''
[root@shell shell]# [ -z $name ] && echo "为真" || echo "为假"
为真
[root@shell shell]# name=1
[root@shell shell]# [ -z $name ] && echo "为真" || echo "为假"
为假
[root@shell shell]# [ -n $name ] && echo "为真" || echo "为假"
为真
[root@shell shell]# name=''
[root@shell shell]# [ -n $name ] && echo "为真" || echo "为假"
为真
[root@shell shell]# [ -z $name ] && echo "为真" || echo "为假"
为真

多整数进行比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-a  并且    

-o 或者

[root@shell shell]# [ 1 -gt 10 -a 2 -lt 1 ] && echo "正确" || echo "错误"
错误
[root@shell shell]# [ 11 -gt 10 -a 2 -lt 1 ] && echo "正确" || echo "错误"
错误
[root@shell shell]# [ 11 -gt 10 -a 2 -gt 1 ] && echo "正确" || echo "错误"
正确
[root@shell shell]# [ 10 -gt 10 -a 2 -gt 1 ] && echo "正确" || echo "错误"
错误


[root@shell shell]# [ 10 -gt 10 -o 2 -gt 1 ] && echo "正确" || echo "错误"
正确
[root@shell shell]# [ 10 -gt 10 -o 2 -gt 10 ] && echo "正确" || echo "错误"
错误
[root@shell shell]# [ 11 -gt 10 -o 2 -gt 1 ] && echo "正确" || echo "错误"
正确


&& 并且
|| 或者
必须要用双[]号
[root@shell shell]# [[ 11 -gt 10 && 2 -gt 1 ]] && echo "正确" || echo "错误"
正确
[root@shell shell]# [[ 11 -lt 10 && 2 -gt 1 ]] && echo "正确" || echo "错误"
错误
[root@shell shell]# [[ 9 -lt 10 && 2 -gt 10 ]] && echo "正确" || echo "错误"
错误



[root@shell shell]# [[ 9 -lt 10 || 2 -gt 10 ]] && echo "正确" || echo "错误"
正确
[root@shell shell]# [[ 11 -lt 10 || 2 -gt 10 ]] && echo "正确" || echo "错误"
错误
[root@shell shell]# [[ 9 -lt 10 || 2 -gt 10 ]] && echo "正确" || echo "错误"
正确

if正则比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@shell shell]# [ $USER =~ root ]  &&  echo "OK"  ||  echo  "ERR"
-bash: [: =~: binary operator expected
ERR
[root@shell shell]# [[ $USER =~ root ]] && echo "OK" || echo "ERR"
OK
[root@shell shell]# [[ $USER =~ ^r ]] && echo "OK" || echo "ERR"
OK
[root@shell shell]# name=roo
[root@shell shell]# [[ $name =~ ^r ]] && echo "OK" || echo "ERR"
OK
[root@shell shell]# name=123
[root@shell shell]# [[ $name =~ ^r ]] && echo "OK" || echo "ERR"
ERR
[root@shell shell]# [[ $name =~ ^[0-9]+$ ]] && echo "OK" || echo "ERR"
OK
[root@shell shell]# name=123a
[root@shell shell]# [[ $name =~ ^[0-9]+$ ]] && echo "OK" || echo "ERR"
ERR
[root@shell shell]# name=ok
[root@shell shell]# [[ $name =~ ^[0-9]+$ ]] && echo "OK" || echo "ERR"
ERR
[root@shell shell]# [[ $name =~ ^[a-Z]+$ ]] && echo "OK" || echo "ERR"
OK

case语句

case用来实现对程序流程的选择、循环等进行控制。语法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
case 变量 in
变量1)
命令序列 1;;
变量2)
命令序列 2;;
变量3)
命令序列 3;;
*)
无匹配后命令序列
esac


安装PHP的不同版本


菜单

1、安装PHP 5.5 版本
2、安装PHP 5.6 版本
3、安装PHP 7.0 版本
4、退出


[root@shell shell]# cat case-1.sh
#!/bin/bash
#定义菜单
cat << EOF
######################
1、安装PHP 5.5 版本
2、安装PHP 5.6 版本
3、安装PHP 7.0 版本
4、退出
######################
EOF
#根据上方菜单进行选择要安装PHP版本
read -p "请选择你要安装的PHP版本,请输入对应的数字:" install

case $install in
1)
echo "你选择安装PHP版本为5.5."
echo "正在安装,请稍后......."
sleep 2
echo "PHP 5.5 已经安装完成!"
;;
2)
echo "你选择安装PHP版本为5.6."
echo "正在安装,请稍后......."
sleep 2
echo "PHP 5.6 已经安装完成!"
;;
3)
echo "你选择安装PHP版本为7.0."
echo "正在安装,请稍后......."
sleep 2
echo "PHP 7.0 已经安装完成!"
;;
4)
exit
;;
*)
echo "请输入数字[1-4],不能乱输!"
esac