1.bash 算数运算
+ - * / %
+=
-=
*=
/=
以上4种常用let ...
++/--sum;sum++/--
算数运算 1.let A=2+3
2.$[2+3]
3.$((2+3))
4.expr
2.语句的逻辑运算
&& 与 A&&B
|| 或 A||B
! 非 !A
逻辑与(&&)和逻辑或(||) 均是短路操作符
所谓短路操作符就是如果A语句足够完成对整个逻辑与 或者 逻辑或 语句的真假判断,任凭B语句写地多么高明高超高效都不会再执行了
例如 对于逻辑与(&&) A&&B 如果A是假,无论B是什么 A&&B语句的结果都为假 B不再执行
对于逻辑或(||) A||B 拂过A是真,无论B是什么 A||B语句的结果都为真 B不再执行
总结:如果A发生 则执行 B;如果A未发生则不执行B 可写成 A&&B
如果A不发生则执行B;如果A发生则不执行B 可写成 A||B
记:1.未发生理解为假,发生理解为真;
2.选择B不执行的条件判断句
3.若是A发生则是A||B
若是A未发生则是A&&B
注意:ping命令在Linux下不带任何参数是一直执行的 所以 用选项C来指定ping几个包
ping -c1 -w1 172.16.17.29
3种逻辑运算符的优先级
!>&&>||
注意,使用逻辑运算符时要慎用(),因为当前shell会为()中的内容打开一个子shell执行其内容 有时这会带来很×××烦
A&&B||C 表示如果A为真,则执行B 如果A为假,则执行C
更多组合具体分析
3.条件测试:
判断某个命令是否可以执行成功,并且以此作为后面命令执行是否进行的条件
有条件的执行,需要判断测试条件是偶满足
4.bash中如何进行条件测试
测试表达式:1.[空格condition空格]
2.[[空格condition空格]]
3.test condition
条件测试种类:
1.整数测试 condition:1.num1空格-eq空格num2 num1是否等于(equal)num2
2.num1空格-gt空格num2 num1是否大于(greater than)num2
3.num1空格-ge空格num2 num1是否大于等于(greater than or equal)num2
4.num1空格-lt空格num2 num1是否小于(less than)num2
5.num1空格-le空格num2 num1是否小于等于(less than or equal)num2
6.num1空格-ne空格num2 num1是否不等于于(no equal)num2
2.字符串测试 conditon:1.str1空格==|=空格str2 串str1是否匹配串str2
2.str1空格!=空格str2 串str1是否不匹配串str2
3.-z空格"string" 串string是否为空
4.-n空格“string” 串string是否不为空
3.文件测试condition:1.-e空格file file是否存在
2.-f空格file file是否为普通文件
3.-d空格file file是否为目录
4.-L|h空格file file是否为一个链接(软链接)
5.-b空格file file是否为块设备文件
6.-c空格file file是否为字符设备文件
7.-r空格file 当前用户或shell是否对文件有读权限
8.-w空格file 当前用户或shell是否对文件有写权限
9.-x空格file 当前用户或shell是否对文件有执行权限
注意:linux下目录与文件不能重名,使用-e file判断文件或目录存在更好
组合条件测试
[空格CONDITION1空格-aCONDITION2空格..]=[空格CONDITION1空格]&&[空格CONDITION2空格].. 与 条件同时满足时为真
[空格CONDITION1空格-oCONDITION2空格..]=[空格CONDITION1空格]||[空格CONDITION2空格].. 或 条件至少有一个满足时为真
!空格[空格CONDITION空格]非 取反
5.选择分支(使用if...fi)
1.单选择分支
if condition;then
statement
...
fi
2.双选择分支
if condition;then
statement
...
else
statement
...
fi
3.多选择分支
if condition1;then
statement
...
elif condition2;then
statement
...
elif condition3;then
statement
...
...
...
else
statement
...
fi
选择分支(使用case)
case $VARIABLE_NAME in]
value1)
statement1
;;
value2)
statement1
;;
value3)
statement1
;;
*)
statement1
;;
esac
Attention
1.每一个分支必须以“;;”结束
2.value中可以使用..|..或
3.*代表匹配除上述列出value1..n的任何字符,所以如果传递进来的参数是*,必须使用转义\*以示跟关键字“*"不同
5.for VARIABLE_NAME in LIST;do
statement1
..
done
LIST三种形式
1.{1..10}
2.seq 1 10 需要带命令替换··反引号 seq 1 2 10 带3个参数表示从1开始,以2为增幅,到10结束
3.1 2 3 4 5
4.$VARIABLE_NAME 将遍历的内容存到一个变量里面并引用
6.while CONDITION;do
statement1
..
done
Attention:1.条件满足时进入循环
2.循环执行的语句一定要包含改变CONDITION的语句
while read VARIABLE_NAME ;do
statement1
..
done</etc/passwd
Attention:1.当文件为空 read VARIABLE_NAME 此命令的退出码不为0 即退出循环
2.当文件遍历到最后一行后,再遍历,read VARIABLE_NAME的执行结果也不为0 即退出循环
7.until CONDITION;do
statemeng1
..
done
Attention:1.条件满足是退出循环
2.2.循环执行的语句一定要包含改变CONDITION的语句
8.循环控制条件
break 中断循环,而执行循环体后面的语句
continue 中断当前这一次循环,提前进入下一次循环
9.脚本如何接受参数
#bash shell a b c...
在shell文件中使用
$1来引用第1个参数,$2来引用第2个参数,以此类推到第10个之后有所改变,${10}来引用第10个参数,...,${11}来引用第11个参数
10.设初值/默认值: FILE=$[FILE:-/etc/issue]
当变量FILE为空时,将/etc/issue赋值给FILE
当变量FILE不空时,将FILE本身赋给自己
函数 function
目的:代码重用
做法:在主程序的某个位置调用函数
定义函数(两种格式)
1.function F_NAME空格{
body
return 0;成功
1-255;失败
}
2.F_NAME空格{
body
return 0;成功
1-255;失败
}
调用函数
F_NAME argument1 argument2
Attention:函数体中调用函数参数,需要使用$1 $2...做法与shell-script调用外部参数类似