1)shell中判断变量为空时 if [ ! $a ];then
[ -n str1 ] #str1字符串长度不为0则true
[ -z str1 ] #str1字符串长度为0则true
[ -d dir ] #判断是否存在目录,有为真
[ -z $aa -o -z $bb ] #判断变量aa或者变量bb有一个为空即成立
[ -z $aa -a -z $bb ] #判断变量aa和变量bb都为空即成立
2)字符串在shell中可以直接比较,使用=、>、< 等,大于和小于需要转义
如果字符串是数字还是需要使用-gt、-lt等
3)shell脚本中函数里的位置变量和整个脚本的位置变量($1、$2)不会冲突,可以定义多个$1,$2等
4)2 > /dev/null 可以把登录的警告信息屏蔽,方便在shell中使用
2是标准错误
5)shell的set -e和set -x
set -e 只要脚本发生错误,就会终止执行
脚本执行期间,某个命令返回值非0就会自动退出
注:当多个命令使用管道连接时,set -e只判断最后一个命令的返回值
set +e 关闭该功能
6)set -x 输出命令执行的结果时同时会输出执行的哪个命令,方便进行排
1)数组的值进行循环
a='1 2 3'
for m in `echo $a`
do
可以1 2 3 各执行一次,适合多个变量重复脚本
done
数组的值循环
test=($(ls / ))
for i in ${test[@]}
2)while循环和for循环,for循环确认次数,while不确认
while true 一直为真
while read line 读取文件,默认按行读入
while read -r line 原样读取,不把\作为转义符
command | while read line command命令的输出作为循环的输入
3)for循环的自增
b=10
num=2
for ((a=1;a<=$b;a+=$num)) 或者 ((a=1; a<=$b; a++))
do
done
1)命令执行控制
&& command1 && command2 只有命令1返回真(0),命令2才执行
|| command1 || command2 只有命令1返回假(非0),命令2才执行
shell中的[]和[[]]对比
[]和test命令等价,用于判断文件、判断字符串、判断整数
支持的运算符只有==和!=,整数比较使用 -eq、-ne等等,逻辑组合是使用-a或者-o
[[]]属于加强版,支持字符串的模式匹配,如正则等,同时逻辑组合可以使用&&或者||,但是和-a、-o不同,可以执行命令控制
[[]] 左边是字符串,右边不加引号可以使用通配符,加引号是普通字符串
后续脚本建议使用 [[]]
2)每次自加1
a=0
((a++))
3)数值的三种运算方式
let 命令
(())命令
expr 表达式
4)shell的EOF是End of File的缩写,表示自定义终止符,EOF可以用其它字符代替,如FF等
EOF通常和<<一起使用
<<EOF #开始
命令1
命令2
...
EOF #结束,需要顶格写
一般用于有交互式的情景,如连接到mysql,切换库,查语句,退出等