shell脚本的运算符
1 算术运算符
在shell脚本中bash解释器不支持简单的算术运算符,需要由一个命令来实现,这个命令就是expr。别的还有awk。
#!/bin/bash
a=10
b=20
#赋值:=
echo "a=$a"
echo "b=$b"
#加法:+
val=`expr $a + $b`
echo "a + b : $val"
#减法:-
val=`expr $a - $b`
echo "a - b : $val"
#乘法:\*
val=`expr $a \* $b`
echo "a * b : $val"
#除法:/
val=`expr $b / $a`
echo "b / a : $val"
#取余:%
val=`expr $b % $a`
echo "b % a : $val"
#相等:==
#用于比较两个数字,相同则返回 true。
if [ $a == $b ]
then
echo "a 等于 b"
fi
#不相等:!=
#用于比较两个数字,不相同则返回 true。
if [ $a != $b ]
then
echo "a 不等于 b"
fi
shell脚本中条件表达式放在方括号之间,并且有空格, [
a
=
=
a==
a==b]是错误的,必须要写成**[ $a == $b ]**
表示式和运算符之间要有空格,例如"2+2" 是不对的,必须写成"2 + 2",这些与其他编程语言不同
2 关系运算符
判断两个数是否相等
-eq:equal等于
[ %a -eq $b ] 当a和b的值相等时,返回值为true,否则为false
判断两个数是否不相等
-ne:not equal不等于
[ $a -ne $b ] 当a和b的值不相等,返回值为true,否则为false
判断左边的数是否大于右边的数
-gt:great than大于
[ $a -gt $b ] 当a的值大于b的值时,返回值为true,否则为false
判断左边的数是否小于右边的数
-lt:less than小于
[ $a -lt $b ] 当a的值小于b的值时,返回值为true,否则为false
判断左边的数是否大于等于右边的数
-ge:great than or equal大于等于
[ $a -ge $b ] 当a的值大于等于b的值时,返回值为true,否则为false
判断左边的数是否小于等于右边的数
-le:less than or equal小于等于
[ $a -le $b ] 当a的值小于等于b的值时,返回值为true,否则为false
3 逻辑运算符(布尔运算符)
! : 非运算,就是取反的意思
[ ! false ] 返回true
-o : 或运算,多个表达式中只要有一个为true,则返回true
[ $a -lt 20 -o $b -gt 100 ]
-a : 与运算,多个表达式中每个表达式都必须为true,才返回true;其中有一个表达式返回为false,则整个表达式返回false
[ $a -lt 20 -a $b -gt 100 ]
拓展
运算符&&和||
#!/bin/bash
a=10
b=20
### && : 逻辑的 AND
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
#返回false
### || : 逻辑的or
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
#返回true
4 字符串运算符
假定变量 a 为 "abc",变量 b 为 "efg"
= : 判断两个字符串是否相等,相等返回 true
[ $a = $b ] 返回 false
!= : 判断两个字符串是否不相等,不相等返回 true
[ $a != $b ] 返回 true
-z : 判断字符串的长度是否为0,字符串的长度为0,则返回true
[ -z $a ] 返回false
-n : 判断字符串的长度是否为0,字符串的长度不为0,则返回true
[ -n $a ] 返回true
判断字符串的长度是否为空,字符串的长度不为空,则返回true
[ $a ] 返回true
5 文件测试运算符
文件测试运算符是对文件属性的一种判断
假定变量file=“文件路径”
判断文件是否是块设备文件,如果是,则返回 true
[ -b $file ] 返回 false
判断文件是否是字符设备文件,如果是,则返回 true
[ -c $file ] 返回 false
判断文件是否是目录,如果是,则返回 true
[ -d $file ] 返回 false
判断文件是否是普通文件,如果是,则返回 true
[ -f $file ] 返回 true
判断文件是否可读,如果是,则返回 true
[ -r $file ] 返回 true
判断文件是否可写,如果是,则返回 true
[ -w $file ] 返回 true
判断文件是否可执行,如果是,则返回 true
[ -x $file ] 返回 true
判断文件是否为空(文件大小是否大于0),不为空返回 true
[ -s $file ] 返回 true
判断文件(包括目录)是否存在,如果是,则返回 true
[ -e $file ] 返回 true
shell脚本循环
for循环第一种写法
#!/bin/bash
for 变量名 1 2 3 4 5
do
循环体
done
for循环第二种写法
for 变量名 in{1..5}
do
循环体
done
for循环步进控制
for 变量名 in{1..10..2} #步长为2,循环1到10
do
循环体
done
for循环:根据ls结果进行循环
for 变量名 in $(ls 路径)
do
循环体
done
举个例子
#!/bin/bash
for var in $(ls /root/test)
do
echo "file:$var"
done
类C语言的for循环
#!/bin/bash
#举个例子说明
for ((integer=1;interger<=5;interger++))
do
echo "$interger"
done
:<<EOF
integer=1 定义变量interger的起始值为1;
interger<=5 直到变量interger的值大于5才停止循环;
interger++ 每循环一次变量interger的值加1;
EOF
while循环
#!/bin/bash
int=1
while (($int<=5)) #结束循环的条件
do
echo "$int"
let int++ 每循环一次,变量int的值加1
done
#注意:这里的let很重要,变量名在运算时要加let,记住这个用法
案例:通过for循环和while循环实现在某个目录下创建5个文件,文件名称是test1.sh,…,test5.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
touch /root/test$i.sh
done
#!/bin/bash
path=/root/yuwei
i=1
while ((i<=5))
do
touch $path/test$i.sh
let i=$i + 1
done