运算
1.使用expr命令,可以运算并输出结果
expr 1 + 1 //加法,运算符号两边要有空格
expr 2 – 1 //减法
expr 2 '’ 2 //乘法,单引号可以屏蔽特殊符号的功能,本身
是通配符,而不是乘号,屏蔽之后就可以识别为乘号
expr 2 * 2 // \是转义符号,可以屏蔽身后一个特殊符号的功能
expr 4 / 2 //除法
expr 5 % 2 //取余数
a=10
b=20
expr $a + $b
expr $a + 100
expr $a + $a
2.
[
]
运
算
使
用
[ ] 运算 使用
[]运算使用(( )) 可以实现相同效果
echo $[2*2]
echo $[2-2]
echo $[2/2]
echo $[2%2]
a=10
b=20
expr $a + $b
echo $[a+b]
3.let不输出任何结果,
主流写法 常规写法
let a++ —> let a=a+1 #变量a+1
let a-- —> let a=a-1 #变量a-1
let a+=10 —> let a=a+10 #变量a+10
let a-=10 —> let a=a-10 #变量a-10
let a*=2 —> let a=a2 #变量a2
let a/=2 —> let a=a/2 #变量a/2
let a%=2 —> let a=a%2 #变量a除以2取余
4.使用bc,可以进行小数计算
echo “10/3” | bc
echo “scale=2;10/3” | bc //scale可以定义结果是小数点后多少位
条件测试
语法格式1,test表达式2,【表达式】
1,对字符串进行测试 [ ]
==两边是否相等,相等时条件测试算成功
!=两边是否不等,不相等时条件测试算成功
test a == a #方式一:test ,使用常量判断,再用echo $?测试结果
test a == b
[ a == a ] #方式二:中括号,使用常量判断,再用echo $?测试结果
[ a == b ]
a=abc
a=xyz
[ $a == $b ] //使用变量判断两个变量的值是否相等
[ $a != $b ] //使用变量判断两个变量的值是否不相等
-z
[ -z $a ] //判断变量是否为空,为空时条件测试算成功
[ ! -z $a ] //判断变量是否非空,非空时条件测试算成功
2.逻辑组合
1)条件 && 指令 条件成功才执行指令
条件 || 指令 条件失败才执行指令
[ root == $USER ] || exit //判断当前用户名是否为root
如果判断失败,则执行exit
[ $USER != root ] && exit //判断当前用户名是否不为root
如果判断成功,则执行exit
1).当多个逻辑符号组合使用时
a && b #a、b任务都成功算成功
a || b #a、b任务有一个成功算成功
touch a b c
ls a && ls b && ls c //结果是都显示
ls a || ls b || ls c //结果是显示a
ls a && ls b || ls c //结果是显示a和b
ls a || ls b && ls c //结果是显示a和c
[ root != $USER ] && echo “非管理员不能执行该脚本” && exit //之前
的语句可以改进成这个方式
3.数字
-eq 是否相等
-ne 是否不等
-gt 是否大于
-ge 是否大于或等于
-lt 是否小于
-le 是否小于或等于
postfix(邮件服务)
mail -s test root #test是标题
再敲mail命令打开邮件列表课查看邮件,再按回车
删除邮件/var/spool/mail/root #文件清空邮件
x=$(cat /etc/passwd | wc -l) //将目前用户数量赋值给变量x
[ $x -gt 29 ] && echo “用户数量发生变化,服务器可能被入
侵” | mail -s test root //如果目前用户数量大于29,就
发邮件给管理员,29是之前查看的用户数量
chmod u+x test01.sh //然后给脚本加x权限
crontab -e //编写计划任务
*/2 * * * * /opt/test01.sh //定义每2分钟执行脚本
4.文件
-e 判断文件是否存在,不关心类型
-f 判断文件是否存在,必须是普通文件
-d 判断文件是否存在,必须是目录
-r 判断当前用户对文件是否有读权限,对root无效
-w 判断当前用户对文件是否有写权限,对root无效
-x 判断当前用户对文件是否有x权限
[ -e abc ] //判断当前目录下的abc是否存在,用echo $?查结果
[ -f /opt/abc ] //判断opt下有没有abc这个普通文件
[ -d /opt/abc ] //判断opt下有没有abc这个目录
mkdir xyz
[ -d /opt/xyz ] //判断opt下有没有xyz这个目录
[ -r /opt/abc ] //判断当前用户对abc是否有读权限
[ -w /opt/abc ] //判断当前用户对abc是否有写权限
[ -x /opt/abc ] //判断当前用户对abc是否有x权限
条件测试总结
== != -z ! -z
&& ||
-eq -ne -gt -ge -lt -le
-e -f -d -r -w -x
if分支
1.单分支
2.双分支
if 条件测试;then //满足条件的话就执行下面指令
执行指令A //指令可以是一条,也可以是多条
else //否则,不满足条件的话就执行下面指令
执行指令B
fi
ping
ping -c 3 -i 0.2 -W 1 192.168.2.254 # -c 定义ping的次数;-i 定义ping的间隔时间(秒);-W ping失败时多久反馈结果
使用if双分支编写ping脚本
3.多分支
if 条件测试;then //满足条件的话就执行下面A指令
执行指令A //指令可以是一条,也可以是多条
elif 条件测试;then //满足条件的话就执行下面B指令
执行指令B
elif 条件测试;then //满足条件的话就执行下面C指令
执行指令C
else //否则,不满足条件的话就执行下面指令
执行指令
fi
循环
for循环(可以定义循环次数)
for 变量名称 in 值1 值2 值3 。。。。 //此处变量名可以自定义,通常习惯
用i,值的多少决定了下面do与done之间的任务执行多少次,每个值之间有空
格,这里是有3个值,所以就循环执行指令3次
do
任务
done
1)循环输出1-13
2)利用for循环添加用户
3)循环输出1-10的ip