脚本从简到深练习

题要:本文与该链接结合初学者适用:https://blog.csdn.net/kali_yao/article/details/119970869?spm=1001.2014.3001.5502

后期会不间断的写入脚本,记的关注哦

1.搭建yum

#!/bin/bash
#部署yum仓库
mount /dev/cdrom /mydvd
rm -rf /etc/yum.repos.d/*.repo
echo "[abc]    //这里由于喊出的内容是有换行所以要用引号
name=xxx
baseurl=file:///mydvd
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo //最后使用重定向保存到yum配置文件中

2.安装apache服务

#!/bin/bash
yum -y install httpd   //装包
echo "web-test~~~" > /var/www/html/index.html   //定义主页内容
systemctl restart httpd    //开服务
systemctl enable httpd    //设置开机自启

3.安装ftp服务

yum -y install vsftpd &> /dev/null   //安装ftp,不显示任何信息
systemctl restart vsftpd
systemctl enable vsftpd

dev下的null相当于黑洞,不需要的信息都可以扔到里面让其消失。

 4.创建用户及密码

#!/bin/bash
useradd $1   //使用位置变量$1,在执行脚本时灵活定义用户名
echo "$2" | passwd --stdin $1   //使用位置变量$2定义密码

5.使用read指令,以交互式使用脚本 

#!/bin/bash
read  -p  "请输入用户名称:"  n   //使用变量n存储用户敲的名字  (-p就是你要输入什么交互式的指令)
useradd $n
read  -p  "请输入密码:"  m      //使用变量m存储用户敲的密码
echo "$m" | passwd --stdin $n

6.再次改良脚本

#!/bin/bash
read -p "请输入用户名称:" n
useradd $n
stty -echo
read -p "请输入密码:" m
echo
stty echo
echo "$m" | passwd --stdin $n

7.条件测试及逻辑符号

#!/bin/bash
[ $USER == root ] ||  exit   //如果用户不是管理员就退出
[ $USER != root ] &&  exit   //效果同上,另一种写法
yum -y install vsftpd
systemctl restart vsftpd
systemctl enable vsftpd

8.创建用户(read交互式条件测试及逻辑符运用)

#!/bin/bash
read -p "请输入用户名称:" n
[ -z $n ] && echo "你倒是给个名字阿!" && exit   //判断用户名为空的话就退出脚本
useradd $n
stty -echo
read -p "请输入密码:" m
echo
stty echo
echo "$m" | passwd --stdin $n

9.编写脚本,每2分钟检查服务器登录账户数量,如果超过3人 发邮件通知管理员

vim test01.sh
#!/bin/bash
n=$(who | wc -l)    //n里面存储了登录数量
[ $n -gt 3 ] && echo "服务器被入侵!可能牛老师来了!"  | mail -s test root
 //用n和3对比,如果超过3就发邮件

chmod  +x  test01.sh   //脚本写完后,赋予x权限
crontab -e      //编写计划任务
*/2  *  *  *  *  /opt/test01.sh    //每2分钟执行脚本,然后保存退出
只要目前超过3人登录系统,那么每隔2分钟就会收到邮件,使用mail命令
查看邮件

10.if测试网络联通性

#!/bin/bash
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
if [ $? -eq 0 ];then
    echo "通了!"
else
    echo "不通!"
fi

11.if多分支测试输入成绩测试

#!/bin/bash
read -p "期末考试成绩如何?"  n
if [ $n -ge 90 ];then
    echo "优秀!"
elif [ $n -ge 80 ];then
    echo "良好!"
elif [ $n -ge 60 ];then
    echo "及格!"
else
    echo "晚上没饭了!"
fi

12.for循环ping网络

#!/bin/bash
x=0
y=0
for i in {1..15}
do
    ping -c 3 -i 0.2 -W 1 192.168.4.$i &> /dev/null
    if [ $? -eq 0 ];then
        echo "4.$i 通了!"
		let x++
    else
        echo "4.$i 不通!"
		let y++
    fi
done
echo "$x台通了,$y台不通"

13.猜数脚本

#!/bin/bash
x=$[RANDOM%100]    //RANDOM是可以得到随机数的变量,除以100取余数可以得到零到99之间的随机数,并且存到变量x中
y=0     //这里还可以定义猜的次数,一次没猜时是0次
while :     //无限循环
do
let y++    //每猜一次,把y+1
read -p "请输入一个整数(0-99):" n        //将用户给的数字存到变量n中
if [ $n -eq$x ];then      //使用if多分枝加条件测试判断n是否等于x
        echo "恭喜!猜对了!猜了$y次"     //如果n等于x就喊出这句话
        exit
elif [ $n -gt $x ];then                           //如果n比x大
        echo "猜大了!"
else                                                          //还有最后一种情况
        echo "猜小了!"
fi
done

14.case控制简单的nginx服务

1.配置nginx服务,nginx与httpd一样也是网站服务,但安装和使用方式有所不同

cp lnmp_soft/nginx-1.17.6.tar.gz  /opt   //拷贝nginx到opt下
cd  /opt
vim  test03.sh
#!/bin/bash
yum -y install gcc make pcre-devel openssl-devel  //安装依赖
tar -xf nginx-1.17.6.tar.gz   //释放nginx的tar包
cd nginx-1.17.6   //进入nginx目录
./configure   //配置
make   //编译
make install    //安装

ls  /usr/local/nginx     //脚本执行完毕后查看
systemctl stop httpd  //关闭之前网站服务
/usr/local/nginx/sbin/nginx   //开启nginx
systemctl stop firewalld   //关闭防火墙

2.使用case分支编写脚本,用来控制nginx服务

#!/bin/bash
case $1 in    //使用执行脚本后的第1个位置变量作为匹配对象
start|kai|k)  //如果$1是start|kai|k中的任意一个就执行下面命令
    /usr/local/nginx/sbin/nginx;;    //开服务
stop|guan)  //如果$1是stop|guan中的任意一个就执行下面命令
    /usr/local/nginx/sbin/nginx -s stop;;   //关服务
restart|cq)   //如果$1是restart|cq中的任意一个就执行下面命令
    /usr/local/nginx/sbin/nginx -s stop     //先关闭
/usr/local/nginx/sbin/nginx;;     //再开启,相当于重启服务
cha|status)
    netstat -ntulp | grep -q nginx
    [ $? -eq 0 ] && echo "nginx正在运行。。。"  || echo "nginx未开启。。。";;
*)
    echo "请输入start|stop|restart"
esac

15.再次将之前脚本改良,加入可以定义颜色的函数,然后下方调用 并且加入判断效果,如果服务已经开启不会报错

#!/bin/bash
c(){       //定义函数名字叫c,可以用来输出不同颜色的内容
echo -e "\033[$1m$2\033[0m"
}
case $1 in
start|kai|k)
    netstat -ntulp | grep -q nginx    //检测nginx是否开启
    [ $? -eq 0 ] && c 32 "nginx已开启" && exit   //如果开启就喊出提示并推出
    /usr/local/nginx/sbin/nginx;;   //如果没开启就正常执行开启任务
stop|guan)
    /usr/local/nginx/sbin/nginx -s stop;;
restart|cq)
    /usr/local/nginx/sbin/nginx -s stop
    /usr/local/nginx/sbin/nginx;;
cha|status)
    netstat -ntulp | grep -q nginx
    [ $? -eq 0 ] && c 32 "nginx正在运行。。。"  || c 31 "nginx未开启。。。";;
*)
    echo "请输入start|stop|restart"
esac				

16.echo一个好玩的脚本

#!/bin/bash
for i in {1..20};
do
     for j in {1..50};
     do
          color=$[RANDOM%7+31]
          echo -e "\033[1;${color};5m*\033[0m\c"
     done
     echo 
done

17.编写脚本,实现批量修改文件扩展名

#!/bin/bash
#批量修改扩展名
for i in $(ls *.txt)   //找到所有的txt文件交给for循环
do
    a=${i%.*}   //用去尾的方法删除扩展名
    mv $i $a.doc   //再将源文件修改为doc的
done
#!/bin/bash
#批量修改扩展名
for i in $(ls *.$1)     //要改啥类型的文件用$1位置变量表示
do
    a=${i%.*}
    mv $i $a.$2   //要改成啥,用$2表示
done

18.倒计时脚本

#!/bin/bash
#功能描述(Description):通过tput定位光标,在屏幕特定位置打印当前的计算机时间.

#使用Ctrl+C中断脚本时显示光标.
trap 'tput cnorm;exit' INT EXIT

#定义数组变量,该数字有9个元素,每行是1个元素,每一个数字占用12列.
#0的数组坐标位置为0-11,1的数组坐标位置为12-23,依此类推.
number=(
'  0000000000      111     2222222222  3333333333 44    44     5555555555  6666666666   777777777   888888888  9999999999 '
'  00      00    11111             22          33 44    44     55          66           77     77   88     88  99      99 '
'  00      00   111111             22          33 44    44     55          66           77     77   88     88  99      99 '
'  00      00       11             22          33 44    44     55          66                  77   88     88  99      99 '
'  00      00       11     2222222222  3333333333 44444444444  5555555555  6666666666          77   888888888  9999999999 '
'  00      00       11     22                  33       44             55  66      66          77   88     88          99 '
'  00      00       11     22                  33       44             55  66      66          77   88     88          99 '
'  00      00       11     22                  33       44             55  66      66          77   88     88          99 '
'  0000000000  1111111111  2222222222  3333333333       44      555555555  6666666666          77   888888888  9999999999 '
)

#获取计算机时间,并分别提取个位和十位数字.
get_time(){
   if [ -z "$1" ];then
       echo "Usage:$0 倒计时分钟"
       exit
   fi
   sec=$[$1*60]
}

#将数组中的某个数组打印出来.
print_time(){
    #从第几个位置开始提取数组元素,0就从0开始,1就从12开始,2就从24开始,依此类推.
    begin=$[$1*12]
    for i in `seq 0 ${#number[@]}`   #0-9的循环.
    do
        tput cup $[i+5] $2
        echo -en "\033[91m${number[i]:$begin:12}\033[0m"
    done
}

#依次打印小时,分钟,秒(个位和十位分别打印).
get_time $1
while :
do
  [ $sec -lt 0 ] && exit
   tput civis    #隐藏光标.
   tput clear
   tput cup 3 16
   echo  "倒计时:"
   for j in `seq ${#sec}`
   do
        num=`echo $sec | cut -c $j`
        y=$[j*16]
        print_time $num $y
   done
   let sec--
   echo
   sleep 1
done

                     

19.国际象棋背景

#!/bin/bash
color1='\033[46m    \033[0m'
color2='\033[47m    \033[0m'
for i in {1..8};do
    for k in {1..2};do
        if [ $[i%2] -eq 0 ];then
              for j in {1..4};do
                   echo -en "$color1$color2"
              done
        else
              for j in {1..4};do
                    echo -en "$color2$color1"
               done
        fi
       echo 
    done
done  

20.

#!/bin/bash
read -p "请输入n值:" num
i=0
while [ $i -le $num ];do
        if [ $i -eq 0 ];then
           num1=0
           echo $num1
        elif [ $i -eq 1 ];then
           num2=1
           echo $num2
        else
           tmp=$num2
           let num2+=num1
           num1=$tmp
           echo $num2
        fi
        let i++
done

21.可以查看各种服务器的信息

#!/bin/bash
while :
do
clear     //清屏
ifconfig eth0  | awk '/RX p/{print "服务器eth0网卡的接收流量是"$5"字节"}'
ifconfig eth0  | awk '/TX p/{print "服务器eth0网卡的发送流量是"$5"字节"}'
df -h | awk '/\/$/{print "根分区剩余容量是"$4}'
awk 'END{print "服务器账户总数是"NR"个"}' /etc/passwd
echo "当前已登陆账户数量是$(who | wc -l)个"
free -h | awk '/^Mem:/{print "服务器内存剩余容量是"$4}'
uptime | awk '{print "cpu的15分钟平均负载是"$NF}'
echo "服务器安装软件包数量是$(rpm -qa | wc -l)个"
sleep 3    //休息3秒
done

22.双色球

#!/bin/bash
#7个球,6个红球,红球号码1-33中不能重复,1个蓝球,1-16抽
red_ball=""
blue_ball=""
read -p "红球个数:" aa
read -p "蓝球个数:" bb
while :
do
   clear
    echo "红球个数:$aa"
    echo "蓝球个数:$bb"
    echo "双色球开奖"
    tmp=$[RANDOM%33+1]
    echo "$red_ball " | grep -q -w $tmp && continue
    red_ball+=" $tmp"
    echo -en "\033[31m$red_ball\033[0m"
    word=$(echo "$red_ball" | wc -w)
    if [ $word -eq $aa ];then
       while  :
       do
         clear
         tmp2=$[RANDOM%16+1]
         echo "$blue_ball" | grep -w -q $tmp && continue
         blue_ball+=" $tmp2"
         echo "红球个数:$aa"
         echo "蓝球个数:$bb"
         echo "双色球开奖"
         echo -en "\033[31m$red_ball\033[0m"
         echo -e "\033[32m$blue_ball\033[0m"
         word2=$(echo "$blue_ball" | wc -w)
            if [ $word2 -eq $bb ];then
               exit
            fi
          sleep 1
       done
    fi
    sleep 1
done

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值