系统自带脚本学习

1
ls /etc/init.d/

字符串值判断逻辑

string1 = string2 [ 命令一起使用的等价运算符,如果两个操作数相等,则返回 true
string1 == string2 相等运算符与 [[ 命令一起使用,如果两个操作数都相等,则返回 true
string1 != string2 不等式运算符,如果两个操作数不相等,返回 true
string1 =~ regex Regex 运算符,如果 string1 符合扩展的 regex,则返回 true
string1 > string2 大于运算符,如果 string1 大于 string2,则根据词法(字母)顺序返回 true
string1 < string2 小于运算符,如果 string1 小于 string2,则根据词法(字母)顺序返回 true
-z string 如果 string 的长度是 0,返回 true
-n string 如果 string 的长度不是 0,返回 true

注意:

  • 使用变量时需要用双引号

  • 判断符左右需要空格隔开

数值比较符号

数值比较符号.jpg

注意:

  • 如果想在[ ]中使用数学比较符时,需要在比较符前加转义符,如

    \>

  • 双中括号[[ ]]中也可以使用test与[ ]中的比较符

案例

1
2
3
4
5
6
7
8
9
[root@localhost ~]# [ 2 > 1 ] && echo "yes" ||echo "no"
yes
[root@localhost ~]# [ 2 < 1 ] && echo "yes" ||echo "no"
yes
########
[root@localhost ~]# [ 2 \< 1 ] && echo "yes" ||echo "no"
no
[root@localhost ~]# [ 2 \> 1 ] && echo "yes" ||echo "no"
yes

逻辑运算符

逻辑运算符.jpg

注意:

[ ] 和 test 中不能使用 &&,||,!

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# [ 2 -gt 1 && "abc" -ne "ABC" ] && echo "yes" ||echo "no"
bash: [: 缺少 `]'
no
[root@localhost ~]# [ 2 -gt 1 || "abc" -ne "ABC" ] && echo "yes" ||echo "no"
bash: [: 缺少 `]'
bash: abc: 未找到命令
no
[root@localhost ~]# test 2 -gt 1 || "abc" -ne "ABC" && echo "yes" ||echo "no" yes
[root@localhost ~]# test 2 -gt 1 && "abc" -ne "ABC" && echo "yes" ||echo "no"
bash: abc: 未找到命令
no
###################
[root@localhost ~]# [[ 2 -gt 1 || "abc" -ne "ABC" ]] && echo "yes" ||echo "no"
yes
[root@localhost ~]# [[ 2 -gt 1 && "abc" -ne "ABC" ]] && echo "yes" ||echo "no"
no
###########注意下面的实例,值得思考
[root@localhost ~]# (( "2" > "1" || "abc" == "ABC" )) && echo "yes" ||echo "no"
yes
[root@localhost ~]# (( "2" > "1" && "abc" == "ABC544" )) && echo "yes" ||echo "no"
yes
[root@localhost ~]# (( "2" > "1" && "5" == "5" )) && echo "yes" ||echo "no" yes
[root@localhost ~]# (( "2" > "1" && "5" != "5" )) && echo "yes" ||echo "no"
no

通过上面的实例,要注意

  1. 双小括号不能使用-gt等数值比较符
  2. 双小括号不能使用== 判断两个字符串是否相等

逻辑运算脚本

接收用户输入字符串,判断是否等于某些数字

编写test_ao.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
read -p "pls input a char:" var
#逻辑条件测试
[ "$var" = "1" ] && {
echo "Right. value is $var"
exit 0
}
[ "$var" = "2" ] && {
echo "Right. value is $var"
exit 0
}
[ "$var" != "1" -o "$var" != "" ] && {
echo "Error value $var"
exit 1
}

运行演示

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# bash test_ao.sh
pls input a char:1
Right. value is 1
[root@localhost ~]# bash test_ao.sh
pls input a char:2
Right. value is 2
[root@localhost ~]# bash test_ao.sh
pls input a char:3
Error value 3