技术流ken

运维拯救世界

1904课堂记录:shell编程3

shell编程

 

1.if

单分支if语句

 

if 条件判断 ;then

cmd1

cmd2

fi

 

if 条件判断

then

cmd1

fi

 

如果1等于1,;就

干什么

fi

 

例子1:对条件表达式进行判断

#!/bin/bash
if [ 1 -eq 1 ];then
echo “true”
fi

 

例子2:直接对命令进行判断

if ping -c 1 -w 1 192.168.163.32 &>/dev/null;then
echo “192.168.163.1在线!”
fi

 

例子3:$?

ping -c 1 -w 1 192.168.163.1 &>/dev/null
if [ $? -eq 0 ];then
echo “192.168.163.32在线!”
fi

 

 

2.双分支

 

if 条件判断 ;then

cmd1

cmd2

else

cmd3

cmd4

fi

 

 

例子1:

ping -c 1 -w 1 192.168.163.1 &>/dev/null
if [ $? -eq 0 ];then
echo “192.168.163.1在线!”
else
echo “192.168.163.1不在线!”
fi

 

如果代码中出现两次以上相同的字符串要考虑定义变量!

 

 

例子2:检测crond是否正在运行

#!/bin/bash
name=crond
num=`ps aux | grep $name | grep -v “grep” | wc -l`
if [ $num -eq 1 ];then
echo “$name正在运行!”
else
echo “$name不在运行!”
fi

 

3.if多分支

if 条件判断 ;then

cmd1

cmd2

elif条件判断 ;then

cmd1

cmd2

 

elif条件判断 ;then

cmd1

cmd2

else

cmd3

cmd4

fi

 

 

例子1:猜数字的小游戏 #初级班

#!/bin/bash
num=`echo $RANDOM`
read -p “请输入您猜测的数字:” num1
if [ $num1 -eq $num ];then
echo “恭喜你猜对了!”
elif [ $num1 -lt $num ];then
echo “您猜测的数字太小了!”
elif [ $num1 -gt $num ];then
echo “您猜测的数字太大了!”
else
echo “请输入一个数字!”
fi

 

练习题1:实现计算器

#!/bin/bash

read -p “请输入第一个数字:” num1
read -p “请输入运算符{+|-|*|/}:” num2
read -p “请输入第二个数字:” num3
if [ -n “$num1” -a -n “$num2” -a -n “$num3” ];then
if [ “$num2” == “+” ];then
echo “${num1}${num2}${num3}=$((${num1}${num2}${num3}))”
elif [ “$num2” == “-” ];then
echo “$num1$num2$num3=$(($num1$num2$num3))”
elif [ “$num2” == “*” ];then
echo “$num1$num2$num3=$(($num1$num2$num3))”
elif [ “$num2” == “/” ];then
echo “$num1$num2$num3=$(($num1$num2$num3))”
else
echo “请输入运算符{+|-|*|/}”
fi

else
echo “请正确输入以上要求的字符串!”
fi

 

练习题2:

方法一:

#!/bin/bash
read -p “请输入一个用户:” user
if id $user &>/dev/null;then
echo “$user存在!”
else
echo “$user不存在!”
fi

 

方法二:

#!/bin/bash
user=$1
if id $user &>/dev/null;then
echo “$user存在!”
else
echo “$user不存在!”
fi

 

2. for语句

 

for i  in 列表

do

CMD1

CMD2

done

 

例子1:批量判断192.168.163.0/24网段哪些主机在线

方法一

#!/bin/bash
ip=192.168.163.
for i in {1..255}
do
if ping -c 1 -w 1 $ip$i &>/dev/null;then
echo “$ip$i在线!”
else
echo “$ip$i不在线!”
fi
done

 

方法二:

#!/bin/bash
. /etc/init.d/functions
ip=192.168.163.
for i in {1..255}
do
if ping -c 1 -w 1 $ip$i &>/dev/null;then
echo -n “$ip$i”
success
echo “”
else
echo -n “$ip$i”
failure
echo “”
fi
done

 

把在线的主机IP都保存到一个文件中:

#!/bin/bash
ip=192.168.163.
for i in {1..10}
do
if ping -c 1 -w 1 $ip$i &>/dev/null;then
echo “$ip$i在线!”
echo “$ip$i” >> /root/host
else
echo “$ip$i不在线!”
fi
done

 

 

练习题2:计算100以内的偶数和

#!/bin/bash
num=0
for i in `seq 2 2 100`
do
let num+=$i
done
echo $num

 

练习题3:计算100以内的奇数和

#!/bin/bash
num=0
for i in `seq 1 2 100`
do
let num+=$i
done
echo $num

 

练习题4:找到系统中包含某个关键词的文件

#!/bin/bash
for i in `find / -type f`
do
if grep “$1” $i &>/dev/null;then
echo “$i”
sleep 1
fi
done

 

 

练习题5:批量判断当前目录下的文件类型

#!/bin/bash
for i in `ls /root`
do
type=`ls -ld $i | cut -c 1`
if [ “$type” == “-” ];then
echo “$i—->普通文件”
elif [ “$type” == “d” ];then
echo “$i—->目录”
elif [ “$type” == “l” ];then
echo “$i—->连接文件”
else
echo “不认识!”
fi
done

 

3.while循环

 

while 条件表达式

do

CMD1

CMD2

 

done

 

例子1:升级猜数字游戏

#!/bin/bash
num=`echo $RANDOM`
numq=0
while true
do
let numq++
read -p “请输入您猜测的数字:” num1
if [ $num1 -eq $num ];then
echo “恭喜你猜对了!”
break
elif [ $num1 -lt $num ];then
echo “您猜测的数字太小了!”
elif [ $num1 -gt $num ];then
echo “您猜测的数字太大了!”
else
echo “请输入一个数字!”
fi
done
echo -e “\033[32m您总共猜测了$numq次!\033[0m”

 

 

例子2:持续检测内存使用量

#!/bin/bash
while true
do
num=`free -h | grep Mem | cut -d “M” -f 4 | tr -d ” “`
echo “$num” >> /root/mem
sleep 1
done

 

 

后台执行shell脚本:

nohup bash test9.sh &

 

杀掉后台进程:

ps 找到pid

然后使用kill -9 关掉即可

 

例子3:检测终端数量

#!/bin/bash
while true
do
num=`who | wc -l`
echo “当前终端数量为$num”
sleep 1
done

 

例子4:每行输出文本内容

#!/bin/bash
while read line
do
echo “$line”
sleep 1
done < /etc/passwd

 

 

一键部署NFS

#!/bin/bash
ip=192.168.163.6

ip_s=192.168.163.5
#服务器端部署
mount /dev/cdrom /mnt &>/dev/null
yum install nfs-utils rpcbind -y &>/dev/null
if [ $? -ne 0 ];then
exit
fi
mkdir /ken &>/dev/null
echo “/ken *(rw)” > /etc/exports
systemctl restart rpcbind nfs

#客户端部署
ssh $ip mount /dev/cdrom /mnt &>/dev/null
ssh $ip yum install nfs-utils -y &>/dev/null
ssh $ip mkdir /ken
ssh $ip mount -t nfs $ip_s:/ken /ken
ssh $ip df -h

 

 

 

发表评论

电子邮件地址不会被公开。