有条件的执行:需要测试条件是否满足
bash中如何进行条件测试:
1.整数测试 2.字符串测试 3.文件测试
测试的表达式:
[ condition ]
` cndition `
test condition
整数测试的符号:
变量是否相等:
-eq 等于
-gt 大于
-ge 大于等于
-lt小于
-le 小于等于[ $I -le 100] 测试变量I小于等于100
-ne 不等
字符串测试:
== 左右相等
!= 左右不等
-z 是否为空
-n 是否不为空
文件测试:
-e 文件是否存在
-f 是否为普通文件
-d 是否为目录
-h/-L 是否为符号链接
-b 是否块文件
-c 字符设备
-r 读权限
-w 写权限
-x 执行权限
选择分支:
if循环语句有三种:单分支,双分支,多分支
单分支:if condition;then
statement
...
fi
双分支:else
statement
...
fi
多分支:
if condition1;then
statement
...
elif condition2;then
statement
...
elif condition3;then
statement
...
else
statement
1、求100以内的所有奇数的和,if单分支
#!/bin/bash
declare -i SUM=0 定义一个参数
for I in {1..100};do
SUM+=$I 是奇数则进行相加
fi
done
2、求一百以内的奇数和、偶数和 双分支
#!/bin/bash
declare -i EVEN=0 声明一个变量
declare -i ODD=0
for I in {1..100};do
if [ $[$I%2] -eq 0 ];then 取余等于0则计算偶数和
let EVEN+=$I
else 不等于0则算奇数和
let ODD+=$I
fi
done
echo "The even=$EVEN"
echo "The odd=$ODD"
#!/bin/bash
FILE=/var/log
if [ -f $FILE ];then 如果是普通文件 就echo
echo "$FILE is a commen file"
elif [ -d $FILE ];then如果是目录就。。
echo "$FILE is a directory"
else
echo "$FILE is unknow."如果两者都不是就说这个文件不知道是什么类型文件
fi
./pingtest.sh a b c
shift 轮换,轮替
位置变量:$1,$2,$3,...${10},${11}
$* 引用所有的变量(个体)
$@ 所有是个整体
$# 位置变量的参数的个数之和
给变量A设定默认值:A=${B:-abc},B有值就等于B,否则就等于abc
如果B为空,B等于A的默认值,如果B有值,则A=B:A=${B:=abc}
如果为?且B为空,显示错误信息,B没值,A为abc,否则都等于B的值
sed 流编辑器,行编辑器
非交互式编辑器
d 删除行 sed "起始地址,结束地址 命令" inputfile
表示方法:
","隔开的表范围
3 表范围
/正则/command
p 显示 被匹配到的行显示出来
a\ 下面添加一行
i\ 上面添加一行
! 对匹配添加取反
s 搜索,用法同vim
sed的常用选项:
-n 只显示被匹配到的内容
-e 可以匹配多个模式
-i 直接修改原文件
-f 读取sed脚本