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}"
输出:
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