一、条件判断式语句
1.shell条件判断式语句之按文件类型判断
两种判断格式:①test -e /root/install.log
②[ -e /root/install.log ]
例子:[ -e /root ]&&echo "yes" || echo "no" #第一个判断命令如果正确执行,则打印“yes”,否则打印“no”。([和“-e”之间要加一个空格,否则会报错)
2.按文件权限判断
判断格式:[ -w student.txt ] && echo "yes" || echo "no" #判断文件是否有写权限。不区分所有者
3.两个文件之间的比较
ln /root/student.txt /tmp/stu.txt #给student.txt创建个硬链接到/tmp下改名为stu.txt
判断格式:[ /root/student.txt -ef /tmp/syu.txt ] && echo "yes" || echo "no" #判断两个文件的i节点号是否一致
4.两个整数之间的比较
判断格式:[ 23 -ge 22 ] && echo "yes" || echo "no" #判断23是否大于等于22,结果为真,输出“yes”
5.字符串的判断
name = fengj #给name变量赋值
判断格式:[ -z "$name" ] && echo "yes" || echo "no" #判断name变量是否为空,不为空,所以返回no
例子:aa=11 #给变量aa赋值
bb==22#给变量bb赋值
[ “$aa” == "bb" ] && echo "yes" || echo "no" #判断两个变量是否相等,明显不相等,返回no
注意:此处字符串和数值需要区分。
6.多重条件判断
aa=11#给变量aa赋值
判断格式:[ -n “$aa” -a "$aa" -gt 23 ] && echo "yes" || echo "no" #判断变量aa是否有值,同时判断aa是否大于33。因为变量aa不大于23,所以虽然第一个判断值为真,返回的结果也为假。
二、单分支if语句
1.if语句概述
学习脚本实例的好处:1.掌握语法结构2.了解shell的作用3.分析编程思想
建立编程思想的方法:1.熟悉Linux基本命令、规范、语法及shell语法2.当遇到实际需求时,应用所学知识。
如何“背”程序?
1.抄写代码并能够正确运行2.为程序补全注释3.删掉注释,为代码重新加注释4.看注释写代码5.删掉代码注释,重头开始写。
2.单分支if语句
单分支if条件语句需要注意的几个点:
1.if语句使用fi结尾,和一般语言使用大括号结尾不同
2.[ 条件判断式 ]计算使用test命令判断,所以中括号和条件判断式之间必须有空格
3.then后面跟符合条件之后执行的程序,可以放在[]之后,用“ ; ”分割。也可以换行写入,就不需要“;”了。
例子:判断登录的用户是否是root
#!/bin/bash
test=$(env | grep "USER" | cut -d "=" -f2)
if [ "$test" == root ]
then
echo "current user is root!"
fi
3.例子—判断分区使用率
#!/bin/bash
#统计根分区使用率,把根分区使用率作为变量值赋予变量rate
rate=$(df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f1)#awk:打印第五列 f1:提取第一列
if [ $rate -ge 80 ] #rate是否大于等于80
then
echo "warning! /dev/sda3 is full!!!!!"
fi
三、双分支if语句
1.判断输入的是否有误
例子:注意:记得给此sh脚本赋予权限:chmod 755 if2.sh
#!/bin/bash
read -t 30 -p "please input a dir:" dir #用户键盘输入
if [ -d "$dir" ] # -d判断是否是目录
then
echo "输入的是目录"
else
echo“输入的不是目录”
fi
2.判断Apache服务是否启动
ps aux | grep httpd | grep -v grep
#查看系统中运行的进程,搜索出包含httped的剔除掉包含grep的进程
3.判断例子
注意,需要给脚本赋予755权限
四、多分支if语句
1.语句简介
2.例子:计算器
数值运算需要思考的内容:
1.有没有输入内容;2.判断输入的内容是不是数值;3.判断输入的运算符;4.执行运算符操作
#!/bin/bash
#字符界面加减乘除计算器。通过read命令接收要计算的数值,并赋予变量num1,num2
read -t 30 -p "please input num1:" num1
read -t 30 -p "please input num2:" num2
read -t 30 -p "please input a operator:"ope #接收要计算的符号,并赋予变量ope
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ] #第一层判断,判断3个变量都有值
then
test1=$(echo $num1 | sed 's/[0-9] //g')
test2=$(echo $num2 | sed 's/[0-9] //g)
#把变量test1的值替换为空,如果能替换为空。证明num1的值为数字。如果不能替换为空,证明num1的值为非数字。我们使用这种方法判断变量num1的值为数字。
if [ -z "$test1" -a -z "$test2" ]
echo $test1 $test2
#第二层判断,判断num1和num2是数值。如果变量test1和test2的值为空,则证明num1和num2是数字
then
#如果test1和test2是数字,则执行以下命令
if [ "$ope" == ' + ' ]
#第三层判断用来确认运算符,判断变量ope是什么运算符
then
sum=$(( $num1 + $num2 ))
elif [ "$ope" == ' - ' ]
then
sum=$(( $num1 + $num2 ))
elif [ "$ope" == ' * ' ]
then
sum=$(( $num1 * $num2 ))
elif [ "$ope" == ' / ' ]
then
sum=$(( $num1 / $num2 ))
else
echo "Please enter a vaild symbol!"
exit 10
fi
else
echo "Please input a valid value "
exit 11
fi
else
echo "please input a num!!"
exit 12
fi
3.例子:判断用户输入的是什么文件
#!/bin/bash
#判断用户输入的是什么文件.-t:30s
read -t 30 -p "Please input a filename:" file
#接收键盘的输入,并赋予变量file
if [ -z "$file" ]
#判断file变量是否为空
then
echo "Error,please input a filename!"
exit 1
elif [ ! -e "$file" ]
#判断file的值是否存在
then
echo "Your input is not a file!"
exit 2
elif [ -f "$file" ]
#判断file的值是否是普通文件
then
echo "$file is a regulare file!"
elif [ -d "$file" ]
#判断file的值是否是目录文件
then
echo "$file is a directory!"
else
echo "$file is an other file!"
fi
五、多分支case语句
1.case语句
case语句和if...elif...else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。
例子 :
#!/bin/bash
#判断用户输入.-t 30:输入的时间限制30s
read -p "Please choose yse/no: " -t 30 cho
case $cho in
"yes")
echo "Your choose is yes!"
;;
"no")
echo "Your choose is no!"
;;
*)
echo "Your choose is error!"
;;
esac
六、for循环
1.for循环
例 子 一:
#!/bin/bash
#批量解压缩脚本
cd /root/test
#输出重定向写入日志文件中
ls *.tar.gz > ls.log
#追加到日志文件,不覆盖之前的
ls *.tgz >> ls.log
for i in $(cat ls.log)
do
#&>/dev/null相当于回收站,不查看任何执行信息
tar -zxf $i & > /dev/null
done
rm -rf /lamp/ls.log
2.例子:批量添加删除指定数量的用户
例子:
#!/bin/bash
#从1加到100
s=0
for (( i=1;i<=100;i++))
do
s=$(( $s + $i ))
done
echo "The sum of 1+2+3+...+100 is: $s "
七、while和until循环
1.while和until循环
while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。不同于for的固定循环。
#!/bin/bash
#从1加到 100
i=1
s=0
while [ $i -le 100 ]
#如果变量i的值小于等于100,则执行循环
do
s=$(( $s + $i ))
i=$(( $i + 1 ))
done
echo "The sum is: $s"
until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。
例子:
#!/bin/bash
#从1加到100
i=1
s=0
until [ $i -gt 100 ]
#循环直到变量i的值大于100,就停止循环
do
s=$(( $s + $i ))
i=$(( $i + 1))
done
echo "The sum is : $s"
八、总结
1.shell主要用来简化管理员的操作
2.shell编程更多的考虑程序功能的实现,而不是效率
: