Bootstrap

shell脚本经典10题

shell脚本练习题:

1、从1加到100的和:

#!/bin/bash
#求1-100的和:
sum=0
for i in {1..100}
do
sum=$[i+sum]
done
echo "求和结果为:$sum"

#下面运行脚本,查看结果。这里有五种方法,第一种方法需要赋予文件执行权力;
[root@localhost data]# chmod +x hh 
[root@localhost data]# ll
总用量 16
-rw-r--r-- 1 root root  59 1019 09:39 abc.repo
-rwxr-xr-x 1 root root  87 1019 09:23 hh    
-rw-r--r-- 1 root root   5 1019 10:57 passwd.txt
-rw-r--r-- 1 root root 201 1019 09:53 yumd
[root@localhost data]# ./hh
求和结果为:5050
#下面4种不需要赋予执行权限,这里的. hh 与 source hh 是一致的
[root@localhost data]# . hh 
求和结果为:5050
[root@localhost data]# source hh 
求和结果为:5050
[root@localhost data]# bash hh 
求和结果为:5050
[root@localhost data]# sh hh 
求和结果为:5050

#求10以内的奇数和:
sum=0
for i in {1..10..2}
do
sum=$[sum+i]
done
echo "10以内的奇数相加:$sum"
10以内的奇数相加:25

#求100以内的数字和:
sum=0
for ((i=0; i<=100; i++))
do
sum=$[sum+i]
done
echo "100以内的数求和:$sum"
100以内的数求和:5050

#用while 求和,1-100求和;
i=1
sum=0
while(( $i<=100 ))
do
sum=$[sum+i]
let "i++"
done
echo "1-100求和:$sum"
1-100求和:5050

2、shell脚本自动搭建本地yum仓库:

#!/bin/bash
#shell脚本自动搭建本地yum

cd /etc/yum.repos.d
mkdir bak
mv *.repo bak/

echo "[abc]
name=abc
baseurl=file:///mnt
enable=1
gpgcheck=0" > abc.repo

mount /dev/sr0 /mnt
yum clean all
rpm -q dhcp
yum install dhcp -y

在这里插入图片描述

3、shell脚本自动化分区,格式化和挂载:

#!/bin/bash
#shell脚本自动化磁盘分区,挂载,格式化:

lsblk
fdisk /dev/sdb <<EOF
m
n
p
1
2048
+10G
p
w
EOF

lsblk
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /opt/ky15
df -hT

在这里插入图片描述

4、shell脚本查看系统信息:

#!/bin/bash
#用shell脚本查看系统信息

name=`hostname`
ip=`ifconfig ens33|awk /netmask/'{print $2}'`
os=`cat /etc/redhat-release`
kernel=`uname -r`
cpu=`lscpu|grep 型号名称:|tr -s " "|cut -d" " -f1 --complement`
mem=`free -hm | awk /Mem/'{print $2}'`
space=`lsblk | awk /disk/'{print $4}'|awk -F G '{print $1}'`
#这里是设置输出时的字体颜色
G="\e[1;32m"
B="\e[1;34m"
E="\e[0m"

for i in $space
  do let sum=$[$sum+$i]
done

echo -e "$B主机名:$E$G\t$name\t$E"
echo -e "${B}IP地址:$E$G\t$ip\t$E"
echo -e "$B系统版本:$E$G\t$os\t$E"
echo -e "$B内核版本:$E$G\t$kernel\t$E"
echo -e "${B}cpu名称:$E$G\t$cpu\t$E" 
echo -e "$B内存总大小$E:$G\t$mem\t$E"
echo -e "$B硬盘总大小$E:$G\t${sum}G\t$E"

在这里插入图片描述

5、猜拳游戏(剪刀,石头,布)

#!/bin/bash
#猜拳游戏,玩家出拳,电脑出拳,最后比对决出胜负;

echo "游戏规则:
玩家出石头:输入: 1 
玩家出剪刀:输入: 2 
玩家出布  :输入: 3 
"
echo "-----------------猜拳游戏开始---------------"
num=$[RANDOM%3]

read -p "请选择 1-3:" i
case $i in
1)
echo "你出的是石头"
  if [ $num -eq 0 ] 
  then
  echo "计算机出石头"
  echo "平 局"
    elif [ $num -eq 1 ] 
    then
      echo "计算机出剪刀"
      echo "你赢了"
  else
    echo "计算机出布"
    echo "计算机赢了"
  fi;;
2)
echo "你出的是剪刀"
  if [ $num -eq 0 ] 
  then
  echo "计算机出剪刀"
  echo "平 局"
  elif [ $num -eq 1 ] 
  then
    echo "计算机出布"
    echo "你赢了"
  else
    echo "计算机石头"
    echo "计算机赢了"
  fi;;
3)
echo "你出的是布"
  if [ $num -eq 0 ]
  then
  echo "计算机出布"
  echo "平 局"
    elif [ $num -eq 1 ]
    then
      echo "计算机出石头"
      echo "你赢了"
  else
    echo "计算机出剪刀"
    echo "计算机赢了"
  fi;;
*)
  echo "请输入正确的数字:(提示:输入1、2、3)"
esac

在这里插入图片描述

6、判断成绩:

# !/bin/bash
#根据输入的数值,判断你的等级;

read -p "请输入你的成绩(0-100) : " grade

if [ $grade -ge 90 ] && [ $grade -le 100 ]
then
echo "你真是个小天才"
elif [ $grade -ge 80 ] && [ $grade -le 89 ]
then
echo "考的还行,,良好"
elif [ $grade -ge 60 ] && [ $grade -le 79 ]
then
echo "你及格了"
else
echo "准住备罚抄吧,你不及格"
fi

在这里插入图片描述

7、猜数字游戏:

#!/bin/bash
#生成一个100以内的随机数,提示用户猜数字;
#根据用户的输入,提示用户猜对了,猜大了,猜小了

# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
# 使用取余算法将随机数变为 1‐100 的随机数

num=$[RANDOM%100+1]
#echo "$num"
i=1
count=10

while(( $i<=10 ))
do
        read -p "----计算机生成了一个随机数(你有10次机会猜出这个数)----:" n
        let "count--"
        echo -e "你还有 "$count" 次机会哦!\n"
        if [ $n -eq $num ]
        then
          echo "恭喜你,猜对啦"
          exit
        elif [ $n -gt $num ]
        then
          echo -e "sorry,你猜大了\n"
        else
          echo -e "sorry,你猜小了\n"
        fi
        let "i++"
done

在这里插入图片描述

8、打印九九乘法表:(正序和倒序打印)

#!/bin/bash
#用 for 循环正序,倒序打印九九乘法表:

for j in {1..9}
do
  for i in `seq $j`
  do
    echo -e "$i*$j=$[i*j]\t\c"
  done
echo
done

for j in {9..1..-1}
do
  for i in `seq $j`
  do
    echo -e "$i*$j=$[i*j]\t\c"
  done
echo
done

echo
echo "用 for 的另一种格式循环输出99乘法表:"

for(( j=1;j<=9;j++ ))
do
  for(( i=1;i<=j;i++ ))
  do
    echo -e "$i*$j=$[i*j]\t\c"
  done
echo
done

在这里插入图片描述

9、shell脚本批量改文件名:

#!/bin/bash
#批量改扩展名

cd /root/aa
touch {1..10}.txt

for i in *
do
  name=`echo $i | cut -d "." -f1`
  mv $i ${name}.bak
done

在这里插入图片描述

10、查看dd 命令复制磁盘要多久:

#!/bin/bash

#查看dd 复制时所需的时间;

date
dd if=/dev/zero of=/root/sh/1.txt bs=10M count=5
date

在这里插入图片描述

11、shell脚本自动创建多个用户:

#!/bin/bash
#shell脚本创建多个用户:

i=1
while(( $i<=10 ))
do
useradd stu$i
echo "123456" | passwd --stdin stu$i &>/dev/null
let "i++"
done

在这里插入图片描述

;