shell脚本运算符与shell脚本循环

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值