一、shell中的算数运算
1.(())进行算数运算
格式: ((表达式1,表达式2,表达式3,.......))
最后一个是表达式的结果
1.1.获取输出的结果
var1=$((表达式1,表达式2,表达式3.....))
注意:
1> 括号中表达式使用变量时,可以加$,也可以不加$,建议加$
2>运算符的前后可以加空格,也可以不加空格
3>括号内可以写C语言中的任何的算数运算,甚至更复杂的运算。
2.$[ ]
1>格式
ret=$[ 表达式1,表达式2,....]
最后一个表达式的结果作为整个表达式的结果
2>$[ ]进行运算时必须有一个变量接受其返回值
3> 在运算符中引入变量时可以加$,也可以不加$
4> 运算符的两边可以有空格,也可以没有空格
3.let
1> 格式
let sum=var1运算符var2
2> let必须放到整个语句的最前边
3>运算符两边不允许有空格,等号两边也不能有空格
4> 如果使用变量可以加$,也可以不加$
4.expr
1>格式
expr 表达式
2>使用变量时,必须加$
3>运算符的前后必须加空格
4>expr 不能进行自增自减的运算
5> expr使用部分运算符必须进行转义
6>expr 中使用变量时,最后使用双引号将变量括起来
7>如何将expr的结果赋值给一个变量
ret=`expr "$var1"运算符"$var2"`
8>算数运算符
$arg1 \> $arg2 成立返回1,不成立返回0
$arg1 \< $arg2
$arg1 \>= $arg2
$arg1 \<=$arg2
$arg1 != $arg2
$arg1 = $arg2
$arg1 +|-|\*|/|% $arg2
以上运算符使用变量时可以不加双引号
也可以进行 | &运算
9>字符串的运算
expr match STRING REGEXP:
从STRING字符串中第一个字符开始匹配REGEXP字符串,
匹配成功返回,匹配的字符的个数,失败返回0。
expr substr STRING POS LENGTH :
从STRING字符串中第POS位置开始截取,截取的长度为LENGTH,
将截取的字符串返回(注:字符串的第一个字符从1开始)
expr index STRING CHARS :
查找CHARS字符在STRING字符串出现的位置,返回值是字符串的下边(注:字符串的第一个字符从1开始),如果一个字符串中有多个相同字符,匹配到第一个就会结束
expr length STRING :
计算STRING字符串的长度
${#str}------> 计算字符串的长度
二、if语句的使用
1.格式
if[表达式]
then
shell语句
fi
if [表达式]
then
shell语句
else
shell语句
(1)字符串对象
一定要注意在进行字符串的判断的时候都需要加上"","$a","hello"
-z 判断字符串是否为空
-n 判断字符串是否为非空
=或==都是来判断字符串是否相等
.......
(2) 数字对象
-eq :等于
-ne :不等于
-gt :大于
-lt :小于
-ge :大于等于
-le :小于等于
(3)文件属性
-b filename 判断文件是否存在,是否是块设备
-c filename 判断文件是否存在,是否是字符设备
-d ------------是否是目录
-f ------------是否是普通文件
(4)文件权限
-r filename 判断文件是否存在,是否有可读权限
-w filename 判断文件是否存在,是否有可写权限
-x filename 判断文件是否存在,是否有可执行权限
(5)文件比较
-nt 文件是否更新
-ot 文件是否更旧
-ef 文件的inode是否一致
(6)逻辑运算
-a 与&&
-o 与| |
!
三、case in 分支语句
case in 分支语句等价于C语言中的switch case 语句
case $var in
表达式1)
shell语句
; ;
表达式2)
shell语句
; ;
*)
shell语句
; ;
esac
四,循环语句----->while
while[ 表达式1 ]
do
循环体2
done
执行顺序:【1】【2 1】【2 1】......
五、循环语句-------> for
方式1:
for((表达式1;表达式2;表达式3))
do
循环体4
done
方式2:
for var in 单词列表
do
循环体
done
六、选择语句------>select in
格式:
select var in 选项列表
do
语句
done
select in 经常和 case in一起使用
七、break/continue
1.break : 退出整个循环体
break n
1> break 默认退出一层循环体
2>break n 退出n层循环体
2.continue :退出本次循环
continue n
1>continue 默认退出一层本次循环
2>continue n 退出n 层本次循环