Shell-day09
1. 昨日回顾
1. 判断数据库主从复制脚本
2. 循环语句之while循环 无限循环
while read line
do
done < file
a=0
while [ $a -lt 10 ]
do
done
while true
do
done
3. while循环的语法示例
4. 创建不同日期的文件脚本
5. 通过读入文件的方式进行创建用户 及设置对应的密码
6. 通过读入文件创建用户 输入前缀和数量 批量创建用户 并设置随机密码
2. 随机点名脚本
1. 要有名单
2. 提示用户输入循环多少次
3. 循环打印这些名单
4. 打印最后一个人员名单
[root@db01 /service/scripts/day09]
read -p "请输入你要循环的次数:" Num
if [[ ! $Num =~ ^[0-9]+$ || $Num -eq 0 ]];then
echo "你输入的不符合要求!"
exit
fi
Count=$(grep -c '.*' student.txt)
i=1
while [ $i -le $Num ]
do
Ran=$(( $RANDOM % $Count + 1 ))
sed -n "${Ran}p" student.txt
let i++
sleep 0.5
done
Name=$(sed -n "${Ran}p" student.txt)
echo "天选子:$Name"
3. 猜数字的脚本
1. 随机输出一个1-100之间的数字 guess
2. 执行脚本时,提示用户输入一个数字
3. 判断用户输入的数字是否为正整数
4. 判断用户输入的数字跟随机数进行比较
5. 大了则输出输入的数字大了,小了就输入小了
6. 猜对了则退出 错误继续猜
7. 统计总共猜了多少次 ,错误多少次
[root@db01 /service/scripts/day09]
Ran=$(( $RANDOM % 100 + 1 ))
i=0
cat<<EOF
欢迎来到Linux脱产08期猜数字游戏!
游戏规则:
请随机猜一个1-100之间的数字!
EOF
while true
do
read -p "请输入一个你要猜的数字:" Guess
if [[ ! $Guess =~ ^[0-9]+$ ]];then
echo "你输入的不符合要求!请重新输入!"
continue
fi
if [ $Guess -eq 0 -o $Guess -gt 100 ];then
echo "你输入的数字不在1-100之内!请重新输入!"
continue
fi
if [ $Guess -gt $Ran ];then
echo "你猜的数字大了!请往小了猜!"
elif [ $Guess -lt $Ran ];then
echo "你猜的数字小了!请往大了猜!"
else
echo "恭喜你!猜对了!"
break
fi
let i++
done
echo "你总共猜了$(($i+1))次!失败了${i}次!"
[root@db01 /service/scripts/day09]
欢迎来到Linux脱产08期猜数字游戏!
游戏规则:
请随机猜一个1-100之间的数字!
请输入一个你要猜的数字:0
你输入的数字不在1-100之内!请重新输入!
请输入一个你要猜的数字:101
你输入的数字不在1-100之内!请重新输入!
请输入一个你要猜的数字:a
你输入的不符合要求!请重新输入!
请输入一个你要猜的数字:10
你猜的数字小了!请往大了猜!
请输入一个你要猜的数字:50
你猜的数字小了!请往大了猜!
请输入一个你要猜的数字:75
你猜的数字小了!请往大了猜!
请输入一个你要猜的数字:90
你猜的数字小了!请往大了猜!
请输入一个你要猜的数字:95
你猜的数字大了!请往小了猜!
请输入一个你要猜的数字:93
你猜的数字大了!请往小了猜!
请输入一个你要猜的数字:92
恭喜你!猜对了!
你总共猜了7次!失败了6次!
4. 分发公钥的脚本
1. 生成秘钥对
-f filename
-N new_passphrase
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ""
-o StrictHostKeyChecking=no
sshpass -p123456
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. 返回结果
[root@db01 /service/scripts/day09]
[ -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
else
action "密钥对不存在!" /bin/false
rm -rf /root/.ssh &>/dev/null
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N "" &>/dev/null
if [ $? -eq 0 ];then
action "密钥对生成成功!" /bin/true
else
action "密钥对生成失败!" /bin/false
exit
fi
fi
i=1
>key.log
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\/tcp/{print $2}')
if [ $Status == "open" ];then
action "${Ip}主机的远程连接端口是开放的...." /bin/true
sshpass -p1 ssh-copy-id -p22 -i /root/.ssh/id_rsa.pub -o "StrictHostKeyChecking=no" root@$Ip &>/dev/null
if [ $? -eq 0 ];then
action "${Ip}主机公钥发送成功...." /bin/true
echo "${Ip} 主机公钥发送成功!" >>key.log
else
action "${Ip}主机公钥发送失败...." /bin/false
fi
else
action "${Ip}主机的远程连接端口是关闭的!无法进行分发公钥!" /bin/false
fi
else
action "${Ip}主机不存活!" /bin/false &>/dev/null
fi
}&
let i++
sleep 0.3
done
wait
[root@db01 /service/scripts/day09]
密钥对存在! [ OK ]
172.16.1.5主机是存活的.... [ OK ]
172.16.1.5主机的远程连接端口是开放的.... [ OK ]
172.16.1.5主机公钥发送成功.... [ OK ]
172.16.1.70主机是存活的.... [ OK ]
172.16.1.70主机的远程连接端口是关闭的!无法进行分发公钥! [FAILED]
172.16.1.81主机是存活的.... [ OK ]
172.16.1.81主机的远程连接端口是开放的.... [ OK ]
172.16.1.81主机公钥发送成功.... [ OK ]
172.16.1.170主机是存活的.... [ OK ]
172.16.1.170主机的远程连接端口是开放的.... [ OK ]
172.16.1.170主机公钥发送成功.... [ OK ]
[root@db01 /service/scripts/day09]
Last login: Wed Apr 29 11:09:18 2020
[root@lb01 ~]
Connection to 172.16.1.5 closed.
[root@db01 /service/scripts/day09]
Last login: Tue Apr 28 09:08:27 2020 from 10.0.0.1
[root@db02 ~]
Connection to 172.16.1.170 closed.
[root@db01 /service/scripts/day09]
172.16.1.5 主机公钥发送成功!
172.16.1.81 主机公钥发送成功!
172.16.1.170 主机公钥发送成功!
5. 随机点菜菜单系统
菜品 价格
1. 五香牛肉 48元
2. 夫妻肺片 48元
3. 糖醋鲤鱼 68元
4. 红烧排骨 88元
5. 澳洲龙虾 398元
6. 帝王蟹 998元
7. 澳洲肥牛 198元
8. 北京烤鸭 888元
9. 战斧牛排 298元
0. 结束点菜 汇总
[root@db01 /service/scripts/day09]
Menu() {
cat<<EOF
##############################
菜品 价格
1. 五香牛肉 58元
2. 夫妻肺片 48元
3. 糖醋鲤鱼 68元
4. 红烧排骨 88元
5. 澳洲龙虾 398元
6. 帝王蟹 998元
7. 澳洲肥牛 198元
8. 北京烤鸭 888元
9. 战斧牛排 298元
0. 结束点菜 汇总
##############################
EOF
}
>menu.log
echo "欢迎来到Linux脱产08期大酒店!很高兴为您服务!"
while true
do
Menu
read -p "请根据菜单点出你想吃的菜品:" Num
case $Num in
1)
clear
echo "您点了一份五香牛肉,价格58元!"
echo -e "五香牛肉\t48 元" >>menu.log
;;
2)
clear
echo "您点了一份夫妻肺片,价格48元!"
echo -e "夫妻肺片\t48 元" >>menu.log
;;
3)
clear
echo "您点了一份糖醋鲤鱼,价格68元!"
echo -e "糖醋鲤鱼\t68 元" >>menu.log
;;
4)
clear
echo "您点了一份红烧排骨,价格88元!"
echo -e "红烧排骨\t88 元" >>menu.log
;;
5)
clear
echo "您点了一份澳洲龙虾,价格398元!"
echo -e "澳洲龙虾\t398 元" >>menu.log
;;
6)
clear
echo "您点了一份帝王蟹,价格998元!"
echo -e "帝王蟹\t998 元" >>menu.log
;;
7)
clear
echo "您点了一份澳洲肥牛,价格198元!"
echo -e "澳洲肥牛\t198 元" >>menu.log
;;
8)
clear
echo "您点了一份北京烤鸭,价格888元!"
echo -e "北京烤鸭\t888 元" >>menu.log
;;
9)
clear
echo "您点了一份战斧牛排,价格298元!"
echo -e "战斧牛排\t298 元" >>menu.log
;;
0)
echo "您结束了您的点餐!您点的菜品详情如下:"
awk '{print $1}' menu.log | sort |uniq -c | sort -rn | awk '{print "您点了"$1"份"$2"!"}'
awk '{print $2}' menu.log |xargs |tr ' ' '+' |bc | awk '{print "您点的菜品总价格为:"$1"元!"}'
exit
;;
*)
echo "您点的菜品!我们酒店暂时没有!请重新点餐!"
continue
esac
done
6. while计算题
1. 使用while循环计算1-100之间的和
[root@db01 /service/scripts/day09]
a=1
while [ $a -le 100 ]
do
Sum=$(( $Sum + $a ))
let a++
done
echo $Sum
2. for循环实现计算1-100之间的和
[root@db01 /service/scripts/day09]
for i in {1..100}
do
Sum=$(( $Sum + $i ))
done
echo $Sum
3. 生成0-100之间的随机数,并相加,直到结果大于1000,输出相加的结果
[root@db01 /service/scripts/day09]
while true
do
Ran=$(( $RANDOM % 101 ))
Sum=$(( $Sum + $Ran ))
if [ $Sum -gt 1000 ];then
echo $Sum
exit
fi
done
[root@db01 /service/scripts/day09]
for i in {1..1000}
do
Ran=$(( $RANDOM % 101))
Sum=$(( $Sum +$Ran ))
if [ $Sum -gt 1000 ];then
echo $Sum
exit
fi
done
[root@db01 /service/scripts/day09]
for ((i=1;;i++))
do
Ran=$(($RANDOM % 101))
Sum=$(( $Sum +$Ran ))
if [ $Sum -gt 1000 ];then
echo $Sum
exit
fi
done
4. 生成0-100之间的随机数,并相加,直到结果大于1000,输出相加的结果,并判断最后一个随机数是否被3整除
[root@db01 /service/scripts/day09]
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@db01 /service/scripts/day09]
for (( i=1;;i++ ))
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
5. 计算100以内的所有3的倍数的数字的和
[root@db01 /service/scripts/day09]
for i in $(seq 0 3 100 )
do
Sum=$(( $Sum + $i ))
done
echo $Sum
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现