一、随机点名脚本
1.脚本代码
[root@xian /server/scripts]# cat stdent.sh
#!/bin/bash
# File Name: stdent.sh
# Author: lixian
#######################
Count=$(cat stdent.txt |wc -l)
read -p "请输入需要循环名单的次数:" Num
#判断输出的次数是否为整数
if [[ ! $Num =~ ^[0-9]+$ ]];then
echo "你输入的不正确!"
exit
fi
i=1
while [ $i -le $Num ]
do
Ran=$(( $RANDOM % $Count + 1 ))
#循环打印人员名单
sed -n "${Ran}p" stdent.txt
sleep 0.5
let i++
done
Name=$(sed -n "${Ran}p" stdent.txt)
echo -e "今晚翻牌:\033[42;37m $Name \033[0m"
2.执行结果
[root@xian /server/scripts]# sh stdent.sh 请输入需要循环名单的次数:3 大桥未久 早乙女露依 早乙女露依 今晚翻牌: 早乙女露依 [root@xian /server/scripts]# sh stdent.sh 请输入需要循环名单的次数:4 天海翼 波多野结衣 早乙女露依 波多野结衣 今晚翻牌: 波多野结衣 [root@xian /server/scripts]# sh stdent.sh 请输入需要循环名单的次数:7 椎名由奈 波多野结衣 天海翼 大桥未久 樱井莉亚 小川阿佐美 波多野结衣 今晚翻牌: 波多野结衣
二、猜数字的脚本
1.业务需求
1. 随机输出一个1-100之间的数字 guess
2. 执行脚本时,提示用户输入一个数字
3. 判断用户输入的数字是否为正整数
4. 判断用户输入的数字跟随机数进行比较
5. 大了则输出输入的数字大了,小了就输入小了
6. 猜对了则退出 错误继续猜
7. 统计总共猜了多少次 ,错误多少次
2.脚本代码
[root@xian /server/scripts]# cat guess_num.sh
#!/bin/bash
# File Name: guess_num.sh
# Author: lixian
#######################
#随机产生一个数字
num=$(echo $((RANDOM % 100 + 1 )))
i=0
while true
do
#提示用户输入一个数字
read -p "请输入你猜的数字:" Guess
#判断用户输入的是否是整数
if [[ ! $Guess =~ ^[0-9]+$ ]];then
echo "请输入整数!"
continue
fi
if [ $Guess -eq 0 -o $Guess -gt 100 ];then
echo "你输入的数字不能为0或者不能大于100!"
continue
fi
if [ $Guess -gt $num ];then
echo "你猜的太大了"
elif [ $Guess -lt $num ];then
echo "你猜的太小了"
else
echo "你猜对了"
break
fi
let i++
done
echo "你一共猜了$(( $i + 1 ))次!"
3.执行结果
[root@xian /server/scripts]# sh guess_num.sh 请输入你猜的数字:50 你猜的太大了 请输入你猜的数字:0 你输入的数字不能为0或者不能大于100! 请输入你猜的数字:30 你猜的太小了 请输入你猜的数字:40 你猜的太小了 请输入你猜的数字:46 你猜的太小了 请输入你猜的数字:48 你猜的太小了 请输入你猜的数字:49 你猜对了 你一共猜了6次!
三、分发公钥的脚本
1.业务需求
1. 生成秘钥对
#如何免交互式的进行创建密钥对
-f filename #指定私钥文件保存的路径
-N new_passphrase #指定一个新的密码
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N “”
#如何免交互式的分发公钥
-o StrictHostKeyChecking=no #忽略回复yes的交互(避免第一次交互出现公钥检查)
sshpass -p123456 #指定密码为123456,忽略交互
yum install sshpass -y
sshpass -p1 ssh-copy-id -P22 -i /root/.ssh/id_rsa.pub -o “StrictHostKeyChecking=no” root@10.0.0.70
2. 先判断对方主机是否存活
3. 存活则判断远程连接端口是否存在
4. 分发公钥
5. 返回结果
2.脚本代码
[root@xian /server/scripts]# cat key.sh
#!/bin/bash
# File Name: key.sh
# Author: lixian
#######################
#引用函数库
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
#判断秘钥对是否存在
if [ -f /root/.ssh/id_rsa.pub -a -f /root/.ssh/id_rsa ];then
action "密钥对已存在!" /bin/true
echo '------------------------------------'
else
rm -rf /root/.ssh &>/dev/null
#生成密钥对
ssh-keygen -t rsa -f /root/.ssh/od_rsa -N "" &>/dev/null
if [ $? -eq 0 ];then
action "密钥对生成成功!" /bin/true
echo '------------------------------------'
else
action "密钥对生成失败!" /bin/false
exit
fi
fi
#批量探测网段内的主机是否存活
i=1
while [ $i -lt 255 ]
do
{
IP=172.16.1.$i
#测试主机是否存活
ping -c1 -W1 $IP &>/dev/null
if [ $? -eq 0 ];then
action "${IP}主机是存活的!" /bin/true
Status=$(nmap -p22 $IP |awk '/22/{print $2}')
if [ $Status == "open" ];then
action "${IP}主机的远程连接端口是开放的!" /bin/true
sshpass -p1 ssh-copy-id -o "StrictHostKeyChecking no" -i /root/.ssh/id_rsa.pub ${IP} &>/dev/null
if [ $? -eq 0 ];then
action "${IP}主机公钥发送成功!" /bin/true
echo '------------------------------------'
else
action "${IP}主机公钥发送失败!" /bin/false
fi
else
action "${IP}主机的远程连接端口是关闭的!无法进行分发公钥!" /bin/false
fi
fi
}&
let i++
sleep 0.5
done
wait
3.执行结果
[root@xian /server/scripts]# sh key.sh 密钥对已存在! [ 成功 ] ------------------------------------ 172.16.1.7主机是存活的! [ 成功 ] 172.16.1.7主机的远程连接端口是开放的! [ 成功 ] 172.16.1.7主机公钥发送成功! [ 成功 ] ------------------------------------ 172.16.1.51主机是存活的! [ 成功 ] 172.16.1.51主机的远程连接端口是开放的! [ 成功 ] 172.16.1.51主机公钥发送成功! [ 成功 ] ------------------------------------ 172.16.1.99主机是存活的! [ 成功 ] 172.16.1.99主机的远程连接端口是开放的! [ 成功 ] 172.16.1.99主机公钥发送成功! [ 成功 ] ------------------------------------
四、菜单金额结算系统
1.脚本代码
[root@xian /server/scripts]# cat menu_jiudian.sh
#!/bin/bash
# File Name: menu_jiudian.sh
# Author: lixian
#######################
#定义函数菜单
menu() {
cat<<EOF
+-----------------------------+
| |
| 1. 小川阿佐美 100元 |
| 2. 大桥未久 200元 |
| 3. 早乙女露依 250 |
| 4. 樱井莉亚 300元 |
| 5. 椎名由奈 400元 |
| 6. 波多野结衣 500元 |
| 7. 天海翼 600元 |
| 8. 邱老师 998元 |
| 9. 结束点菜 |
| |
+-----------------------------+
EOF
}
>cai.txt
echo ""
while true
do
menu
read -p "请开始你的选择:" Num
if [[ ! $Num =~ ^[1-9]$ ]];then
echo "请根据菜单表选择你喜欢的女忧!"
continue
fi
case $Num in
1)
clear
echo "你选择了小川阿佐美,价格100元!"
echo "小川阿佐美 100 元" >>cai.txt
;;
2)
clear
echo "你选择了大桥未久,价格200元!"
echo "大桥未久 200 元" >>cai.txt
;;
3)
clear
echo "你选择了早乙女露依,价格250元!"
echo "早乙女露依 250 元" >>cai.txt
;;
4)
clear
echo "你选择了樱井莉亚,价格300元!"
echo "樱井莉亚 300 元" >>cai.txt
;;
5)
clear
echo "你选择了椎名由奈,价格400元!"
echo "椎名由奈 400 元" >>cai.txt
;;
6)
clear
echo "你选择了波多野结衣,价格500元!"
echo "波多野结衣 500 元" >>cai.txt
;;
7)
clear
echo "你选择了天海翼,价格600元!"
echo "天海翼 600 元" >>cai.txt
;;
8)
clear
echo "你选择了邱老师,价格998元!"
echo "邱老师 998 元" >>cai.txt
;;
9)
echo "你结束了选择!你的选择如下:"
awk '{print $1}' cai.txt |sort | uniq -c | sort -rn | awk '{print "你选择了"$1"次"$2"按摩师!"}'
echo "你本次按摩消费金额如下(赶快买单):"
awk '{print $2}' cai.txt |xargs | tr ' ' '+' | bc | awk '{print "消费总价格为:"$1"元!"}'
exit
esac
done
2.执行结果
[root@xian /server/scripts]# sh menu_jiudian.sh +-----------------------------+ | | | 1. 小川阿佐美 100元 | | 2. 大桥未久 200元 | | 3. 早乙女露依 250 | | 4. 樱井莉亚 300元 | | 5. 椎名由奈 400元 | | 6. 波多野结衣 500元 | | 7. 天海翼 600元 | | 8. 邱老师 998元 | | 9. 结束点菜 | | | +-----------------------------+ 请开始你的选择:3 你选择了邱老师,价格998元! +-----------------------------+ | | | 1. 小川阿佐美 100元 | | 2. 大桥未久 200元 | | 3. 早乙女露依 250 | | 4. 樱井莉亚 300元 | | 5. 椎名由奈 400元 | | 6. 波多野结衣 500元 | | 7. 天海翼 600元 | | 8. 邱老师 998元 | | 9. 结束点菜 | | | +-----------------------------+ 请开始你的选择:9 你结束了选择!你的选择如下: 你选择了5次小川阿佐美按摩师! 你选择了3次樱井莉亚按摩师! 你选择了2次波多野结衣按摩师! 你选择了1次邱老师按摩师! 你本次按摩消费金额如下(赶快买单): 消费总价格为:3398元!
五、while循环简单计算脚本
1.计算100以内的所有3的倍数的数字的和
[root@xian /server/scripts]# cat for-3-bei.sh
#!/bin/bash
# File Name: for-3-bei.sh
# Author: lixian
#######################
for i in $(seq 0 3 100)
do
Sum=$(( $Sum + $i ))
done
echo "$Sum"
[root@xian /server/scripts]# sh for-3-bei.sh
1683
2.使用while循环和for循环计算1-100之间的和
[root@xian /server/scripts]# cat while-1-100.sh
#!/bin/bash
# File Name: while-1.sh
# Author: lixian
#######################
a=1
while [ $a -le 100 ]
do
Sum=$(( $Sum + $a ))
let a++
done
echo $Sum
[root@xian /server/scripts]# sh while-1-100.sh
5050
[root@xian /server/scripts]# cat for-1-100.sh
#!/bin/bash
# File Name: for-1-100.sh
# Author: lixian
#######################
for i in {1..100}
do
Sum=$(( $Sum + $i ))
done
echo $Sum
[root@xian /server/scripts]# sh for-1-100.sh
5050
3.生成0-100之间的随机数,并相加结果大于1000,输出相加的结果,并判断最后一个随机数是否被3整除
[root@xian /server/scripts]# cat suiji.sh
#!/bin/bash
# File Name: suiji.sh
# Author: lixian
#######################
while true
do
Ran=$(( $RANDOM % 101 ))
Sum=$(( $Sum + $Ran ))
if [ $Sum -gt 1000 ];then
echo "$Sum"
break
fi
done
Remainder=$(( $Ran % 3 ))
if [ $Remainder -eq 0 ];then
echo "最后一个随机数${Ran}能够被3进行整除!"
else
echo "最后一个随机数${Ran}不能够被3进行整除!"
fi
[root@xian /server/scripts]# sh suiji.sh
1035
最后一个随机数98不能够被3进行整除!
[root@xian /server/scripts]# sh suiji.sh
1018
最后一个随机数57能够被3进行整除!
[root@xian /server/scripts]# sh suiji.sh
1002
最后一个随机数44不能够被3进行整除!

