一、随机点名脚本
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进行整除!