shell脚本——作业二(循环作业)

1、通过位置变量创建linux系统账户及密码

$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数

       #!/bin/bash

       #创建用户与密码

      

       declare -i c=0

       if [ -z $1 ] || [ -z $2 ];then

               echo "请输入用户名和密码!"

       fi

       for i in $(cat /etc/passwd|cut -d: -f1);do

               if [ $1 == $i ];then

                       let c=1

               fi

       done

       if [ $c -ne 1 ];then

               useradd $1

               `echo $2|passwd $1 --stdin &>/dev/null`

               if [ $? -eq 0 ];then

                       echo "添加成功"

               fi

       else

               echo "此用户已存在"

       fi

2、每周5使用tar命令备份/var/log 下的所有日志文件,防止文件覆盖

       #!/bin/bash

       #每周五备份/var/log下的所有日志文件

      

       tar -zcf log-`date +%Y%m%d`.tar.gz /var/log

       [root@sv7 ~]# crontab -e

       0 3 5 /root/tar.sh

      

3、

 脚本生成一个 100 以内的随机数值,提示用户猜数字,更具用户的输入,提示用户猜对了,猜打了或猜小了,直至用户猜对脚本结束。

       #!/bin/bash

      

       num=$(($RANDOM%100+1))

       c=0

      

       while [ $c -lt 5 ]

       do

               read -p "输入你猜的数>>" mynum

               if [ $mynum -eq $num ];then

                       echo "你猜对了!!"

                       break

               elif [ $mynum -gt $num ];then

                       echo "你猜大了!!请继续!!"

      

               elif [ $mynum -lt $num ];then

                       echo "你猜小了!!请继续!!"

               fi

               c=$(($c+1))

       done

       if [ $c -eq 5 ];then

               echo "随机数为$num"

       fi

      

4、依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字

       #!/bin/bash

      

       read -p "请输入第一个数>>" a

       read -p "请输入第二个数>>" b

       read -p "请输入第三个数>>" c

       if [ $a -gt $b ];then

               if [ $b -gt $c ];then

                       echo "$a>$b>$c"

               elif [ $b -lt $c ];then

                       if [ $a -gt $c ];then

                               echo "$a>$c>$b"

                       elif [ $a -lt $c ];then

                               echo "$c>$a>$b"

                       fi

               fi

       elif [ $a -lt $b ];then

               if [ $b -gt $c ];then

                       if [ $a -gt $c ];then

                               echo "$b>$a>$c"

                       elif [$a -lt $c ];then

                               echo "$b>$c>$a"

                       fi

               elif [ $b -lt $c ];then

                       echo "$c>$b>$a"

               fi

       fi

5、编写脚本,实现人机《石头,剪刀,布》游戏

       #!/bin/bash

      

       j=1

       while [ $j -le 5 ]

       do

               echo "1.石头 2.剪刀 3.布 "

               read -p "请出拳1-3:" i

               if [ $i -ne 1 -o $i -ne 2 -o $i -ne 3 ];then

                       echo "请输入1-3之间的数"

               fi

               game=(石头 剪刀 布)

               num=$((RANDOM%3))

               echo computer=${game[$num]}

               case $i in

               1)

                       if [ 0 -eq $num ];then

                       echo "平局"

                       elif [ 1 -eq $num ];then

                               echo "你输了"

                       else

                               echo "你赢了"

                       fi;;

               2)

                       if [ 1 -eq $num ];then

                               echo "平局"

                       elif [ 0 -eq $num ];then

                               echo "你输了"

                       else

                               echo "你赢了"

                       fi;;

               3)

                       if [ 2 -eq $num ];then

                               echo "平局"

                       elif [ 1 -eq $num ];then

                               echo "你输了"

                       else

                               echo "你赢了"

                       fi;;

               esac

               let j++

       done

      

6、编写脚本测试192.168.4.0/24整个网段中那些主机处于开机状态,那些主机处于关机状态(for 版本)

       #!/bin/bash

      

       declare -i sum=0

       declare -i nsum=0

       for i in $(seq 1 254);do

               ping -c 1 -w 1 10.6.12.$i &> /dev/null

               if [ $? -eq 0 ];then

                       let sum++

                       echo "10.6.12.$i 开机 "

               else

                       let nsum++

                       echo "10.6.12.$i 关机"

               fi

       done

      

       echo "总共有$sum 台电脑开机!"

       echo "总共有$nsum 台电脑关机!" 

7、9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)

       #!/bin/bash

      

       for i in {1..9};do

               for j in $(seq $i);do

                       echo -ne "$i*$j=$((i*j)) "

               done

               echo ''

       done

8、使用死循环实时显示 eth0 网卡发送的数据包流量

       #!/bin/bash

       while :

       do

       echo “本地网卡 eth0 流量信息如下:”

           ifconfig eth0 | grep "RX pack" | awk ‘{print $5}‘

           ifconfig eth0 | grep "TX pack" | awk ‘{print $5}‘

           sleep 1

       done

9、使用user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码

脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户信息

       #!/bin/bash

       c=`wc -l user.txt|cut -d' ' -f1`

       for i in $(seq $c);do

               username=`head -$i user.txt|tail -1 |cut -f1`

               passwd=`head -$i user.txt|tail -1 |cut -f2`

               c=0

               for j in $(cat /etc/passwd|cut -d: -f1);do

                       if [ $username == $j ];then

                               echo "$username 已经存在无法添加"

                               c=1

                       fi

               done

               if [ $c -eq 0 ];then

                       `useradd $username &>/dev/null`

                       `echo $passwd|passwd $username --stdin &>/dev/null`

                       echo "添加成功"

               fi

      

       done

10、编写批量修改扩展名脚本,如批量将 txt 文件修改为doc文件

执行脚本时,需要给脚本添加位置参数

脚本名 txt doc (可以将 txt 的扩展名修改为doc)

脚本名 doc jpg(可以将doc 的扩展名修改为jpg)

       #!/bin/bash

       # Author: Sean Martin

       # Blog: https://www.cnblogs.com/shy13138/

       # Time: 2019-08-16 10:24:42

       # Name: houzhui.sh

       # Version: v1.0

       read -p "输入旧的后缀名:" a

       read -p "输入新的后缀名:" b

       read -p "输入文件夹:" d

       cd $d

       for i in $(ls $d | grep .$a)

               do

               name=$(ls $i | cut -d. -f1)

               mv $i ${name}.$b

               echo "$name.$a ====> $name.$b"

               done

      

       echo "修改完毕"

      

11、查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计)

使用 netstat -atn 可以查看本机所有连接状态,-a 查看所有,-t 仅显示tcp连接信息, -n数字格式显示local address(第四列是本机的IP和端口信息)Foreign address(第五烈是远程主机的IP和端口信息)使用awk命令仅显示第5列数据,再显示第1列IP地址的信息

sort 可以按数字的大小排序,最后使用 Uniq 将多余重复的删除,并统计重复次数

       #!/bin/bash

       # Author: Sean Martin

       # Blog: https://www.cnblogs.com/shy13138/

       # Time: 2019-08-16 10:32:19

       # Name: netstat1.sh

       # Version: v1.0

       declare -i L=0

       declare -i E=0

       declare -i O=0

       for i in $(netstat -tna|grep "^tcp"|awk '{print $6}');do

               if [ $i = "LISTEN" ];then

                       let L++

               elif [ $i = "ESTABLISHED" ];then

                       let E++

               else

                       let O++

               fi

       done

       echo "监听链接有$L 个,建立的链接有$E 个,其他链接有$O"

      

12、对100 以内的所有正整数相加求和(1+2+3.。。+100)

eq 100 可以快速自动生成100个整数

       #!/bin/bash

       # Author: Sean Martin

       # Blog: https://www.cnblogs.com/shy13138/

       # Time: 2019-08-18 06:26:33

       # Name: 1-100.sh

       # Version: v1.0

       declare -l sum=0

       for i in $(seq 0 2 100);do

               let sum=$sum+$i

       done

echo $sum

猜你喜欢

转载自www.cnblogs.com/shy13138/p/11387648.html
今日推荐