本文是根据慕课网tony老师的课程所写的笔记,老师讲的很好!感谢~http://www.imooc.com/u/279399/courses?sort=publish
目录
一、条件判断式
两种判断格式
使用中括号 [ ] 注意:
(1)在中括号[]内每个组件都需要有空格键来分隔
(2)在中括号内的变量,最好用双括号括起来
(3)在中括号内的常量,最好都以单引号或双引号括起来
1.按照文件类型进行判断
、
执行 [ -e /root/ ] 是没有返回结果的,那么我们怎么知道是不是执行成功了呢?
(1)echo $? 值为0,则代表成功;非0,则代表失败
(2) [ -e /root/ ] && echo yes || echo no
例子:
2.按照文件权限进行判断
3.两个文件之间进行比较
例子:
4.两个整数之间比较
5.字符串的判断
6.多重条件判断
例子:
二、单分支if语句
例子1: 判断登录用户是否是root
#!/bin/bash
name=$(whoami)
if [ $name == "user1" ]
then
echo "The current user is user1"
fi
user=$(env|grep "USER"|cut -d "=" -f 2)
if [ $user == "root" ]
then
echo "The current user is root"
fi
例子2:判断分区使用率
#!/bin/bash
rate=$(df -h|grep "/dev/sda1"|awk '{printf $5}'|cut -d "%" -f 1)
if [ $rate -gt 50 ]
then
echo error
fi
三、双分支if语句
例子1:判断输入的字符串是否是目录
#!/bin/bash
read -t 10 -p "请输入一个目录名:" dir
if [ -d "$dir" ]
then
echo "这是一个目录"
else
echo "这不是一个目录"
fi
例子2:判断Apache服务是否启动
ps aux 查询运行的进程
#!/bin/bash
test=$(ps aux|grep httpd|grep -v grep) #截取httpd进程,并把结果赋予变量test
if [ -n "$test" ] #如果test的值不为空,则执行then中的命令
then
echo "httpd is ok"
else
echo "httpd is done"
/etc/rc.d/init.d/httpd start #启动httpd服务
fi
脚本名字坚决不能包含httpd!因为运行这个脚本就会出现名字包含httpd的一个进程,那么test就会有值,apache会被误判为启动。
四、多分支if语句
例子1:计算器
#!/bin/bash
#通过read接收操作数与运算符
read -t 30 -p "请输入第一个操作数: " num1
read -t 30 -p "请输入第二个操作数: " num2
read -t 30 -p "请输入运算符: " op
#如果都不为空
if [ -n "$num1" -a -n "$num2" -a -n "$op" ]
then
#判断num1 num2是否是数值:把num1中的数字替换成空格,如果结果为空,则表示num1是数字
test1=$(echo $num1 | sed 's/[0-9]//g')
test2=$(echo $num2 | sed 's/[0-9]//g')
#如果num1 num2 是数字
if [ -z "$test1" -a -z "$test2" ]
then
#判断运算符
if [ "$op" == "+" ]
then
result=$(( $num1 + $num2))
elif [ "$op" == "-" ]
then
result=$(( $num1 - $num2 ))
elif [ "$op" == "*" ]
then
result=$(( $num1 * $num2 ))
elif [ "$op" == "/" ]
then
result=$(( $num1 / $num2))
else
echo "请输入有效的运算符!"
exit 10
fi
else
echo "请输入有效的操作数"
exit 11
fi
fi
echo "$num1 $op $num2 = $result"
例子2:判断用户输入的是什么文件
#!/bin/bash
read -t 30 -p "请输入文件名: " name
if [ -z "$name" ]
then
echo "请输入有效的文件名"
exit 1
elif [ ! -e "$name" ]
then
echo "该文件不存在"
exit 2
elif [ -d "$name" ]
then
echo "这是一个目录"
elif [ -f "$name" ]
then
echo "这是一个普通文件"
else
echo "这是一个其他文件"
fi
五、case语句
例子:判断用户输入的是yes还是no
#!/bin/bash
read -t 30 -p "请输入yes/no: " content
case "$content" in
"yes")
echo "您输入的是yes"
;;
"no")
echo "您输入的是no"
;;
*)
echo "error"
;;
esac
六、for循环
例子1:循环输出1-5
#!/bin/bash
for i in 1 2 3 4 5
do
echo "$i"
done
例子2:批量解压缩脚本
#!/bin/bash
cd /root/test
ls *.tar.gz > ls.log #覆盖
ls *.tgz >> ls.log #追加
for i in $( cat ls.log )
do
tar -zxf $i &>/dev/null #把输出内容写入null
done
rm -rf /lamp/ls.log
例子3:从1加到100
#!/bin/bash
s=0
for((i=1;i<=100;i=i+1))
do
s=$(($s+$i))
done
echo $s
例子4: 批量添加指定数量的用户
#!/bin/bash
read -t 30 -p "请输入用户名: " user
read -t 30 -p "请输入个数: " num
read -t 30 -p "请输入密码: " pass
if [ -n "$user" -a -n "$num" -a -n "$pass" ] #输入内容不为空
then
#num为数字
y=$(echo $num|sed 's/[0-9]//g')
if [ -z "$y" ]
then
for(( i=1;i<=$num;i=i+1))
do
/usr/sbin/useradd $user$i &> /dev/null
echo $pass|/usr/bin/passwd --stdin $user$i &> /dev/null
done
fi
fi
例子5:删除所有用户(除root)
#!/bin/bash
user=$( cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 )
for i in $user
do
userdel -r $i
done
七、while循环和until循环
例子1:从1加到100
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo $s
#!/bin/bash
i=1
s=0
until [ $i -gt 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo $s