shell运算符与流程控制-2

1、shell运算符

1.1、算数运算符

原生的bash不支持算数运算,可以通过其它方式实现例如expr。

1 `expr a + b`
2 #a b为数字,和运算符之间要有空格
3 #``不是单引号,为键盘上ESC键下方的反引号

示例如下:

 1 #!/bin/sh
 2 
 3 a=4
 4 b=3
 5 #加法
 6 val=`expr ${a} + ${b}`
 7 echo " ${a} + ${b} is :${val}"
 8 
 9 #减法
10 val=`expr ${a} - ${b}`
11 echo " ${a} - ${b} is :${val}"
12 
13 #乘法
14 val=`expr ${a} * ${b}`
15 echo " ${a} * ${b} is :${val}"
16 
17 #除法
18 val=`expr ${a} / ${b}`
19 echo " ${a} / ${b} is :${val}"
20 
21 #取余
22 val=`expr ${a} % ${b}`
23 echo " ${a} % ${b} is :${val}"
View Code

输出:

4 + 3 is :7
4 - 3 is :1
4 * 3 is :12
4 / 3 is :1
4 % 3 is :1

 1.2、关系运算符

关系运算符只支持数字,常见的关系运算符如下:

 1 c=3
 2 d=3
 3 #等于
 4 if [ ${c} -eq ${d} ]
 5 then
 6    echo "${c} is equal to ${d}"
 7 fi
 8 #不等于
 9 d=2   
10 if [ ${c} -gt ${d} ]
11 then
12    echo "${c} is great than ${d}"
13 fi
# -eq 等于,[ ${c} -ne ${d} ]返回True
# -gt 检测左边数是否大于右边,如果是,则返回True,反之,返回False
# -lt 检测左边数是否小于右边,如果是,则返回True,反之,返回False
# -ge 检测左边数是否大于等于右边,如果是,则返回True,反之,返回False
# -le 检测左边数是否小于等于右边,如果是,则返回True,反之,返回False

输出如下:

3 is equal to 3
3 is great than 2

1.3、布尔运算符

1 #非运算!,表达式为True,则返回False
2 #与运算-o,有一个表达式为True则返回True
3 #或运算-a,两个表达式为True则返回True
1 c=1
2 d=2
3 e=3
4 if [ ${c} -ne ${d} -o ${d} -eq ${e} ]
5 then
6    echo "${c} 不等于 ${d} 或者 ${d} 等于 ${e} ,返回True。"
7 fi

输出如下:

1 不等于 2 或者 2 等于 3 ,返回True。 

1.4、逻辑运算符

1 #&& 逻辑and
2 #|| 逻辑or
1 c=1
2 d=2
3 e=3
4 if [ ${c} -ne ${d} and ${d} -eq ${e} ]
5 then
6    echo "${c} 不等于 ${d} 并且 ${d} 等于 ${e} ,返回True。"
7 else
8    echo "${c} 不等于 ${d} 或者 ${d} 等于 ${e} ,返回True。"
9 fi
1 不等于 2 或者 2 等于 3 ,返回True。

1.5、字符串运算符

1 #  =,检测两个字符串是否相等,相等则返回True
# !=,检测两个字符串是否不等,不等则返回True
# -z,检测字符串是否为零,为零返回True
# -n,检测字符串是否不为零,为零返回False
# $ ,检测字符串是否为空,不为空返回True

示例如下:

 1 a="Hello"
 2 b="Hello"
 3 if [ ${a} = ${b} ]
 4 then
 5 echo "str ${a} is equal  to  ${b}"
 6 fi
 7 
 8 if [ -n ${a} ]
 9 then
10 echo "str ${a} is not zero. "

输出如下:

str Hello is equal  to  Hello
str Hello is not zero.

1.6、文件检测运算符

1 #-w ${file} 检测文件是否可写,可写则返回True
2 #-r ${file} 检测文件是否可读,可写则返回True
3 #-x ${file} 检测文件是否可执行,可执行则返回True
4 #-s ${file} 检测文件是否为空,不为空则返回True
5 #-e ${file} 检测文件或目录是否存在,存在则返回True
6 #文件检测运算符比较多,此时不一一列举
curr_path=`pwd`
if [ -e ${curr_path} ]
then
echo "dir ${curr_path} is exist."
fi

输出如下:

dir /home/stephen/桌面 is exist.

2、shell流程控制

2.1、if

#!/bin/bash
#假如 条件1成立,则执行语句1
#假如 条件1不成立,条件2成立,则执行语句2
#假如 条件1,2不成立,则执行语句3

if 条件1
then
    语句1
elif 条件2
then
   语句2
else
   语句3

示例如下:

 1 age=15
 2 if [ ${age} -lt  16 ]
 3 then
 4     echo "age is ${age}, yonng"
 5 elif [ ${age}  40 ]
 6 then 
 7     echo "age is ${age},midlife"
 8 else
 9     echo "age is ${age},old"
10 fi

输出如下:

age is 15, yonng

2.2、for循环

1 data_path=(data1 data2 data3)
2 for datai in  ${data_path[@]}
3 do
4 echo ${datai}
5 done

输出:

data1
data2
data3
1 for ((i=0;i<5;i++))
2 do
3 echo ${i}
4 done

输出:

0
1
2
3
4

2.3、while

#当条件1成立,循环执行语句1
while 条件1
do
     语句1
done

示例如下:

1 i=1
2 while [ ${i} -lt 4 ]
3 do
4 echo "loop ${i}"
5 #语法 let "表达式"
6 let i++
7 done

输出如下:

loop 1
loop 2
loop 3

2.4、until

#当条件1不成立时,就执行语句1
until 条件1
do
语句1
done

示例如下:

1 j=7
2 until [ ${j} -lt 4 ]
3 do
4 echo "loop ${j}"
5 let j--
6 done

输出如下:

loop 7
loop 6
loop 5
loop 4

 

原文地址:https://www.cnblogs.com/webDepOfQWS/p/10651355.html