shell脚本练习

1、
通过位置变量创建linux系统账户及密码
$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数

1#!/bin/bash

2 # Author: wangshilin

3 # Blog: https://home.cnblogs.com/wangshilin/

4 useradd "$!"
5 echo "$2 | passwd --stdin $2 "

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

  1 #!/bin/bash

  2 # Author: wangshilin

  3 # Blog: https://home.cnblogs.com/wangshilin/

  4 # Time: 2019-08-17 01:31:13

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

  6  00 03 * * 5 /root /logbak.sh

3、

实时监控本机内存和硬盘剩余空间,剩余内存小于500M,根分区剩余空间小于1000M的时候发送报警邮件
#!/bin/bash
#3
disk =$(df -h / | awk '/\//{print $4}')
mem=$(df -h / | awk '/\//{print $4}')
if [ $disk -le 512000 -a $mem -le 1024000 ]; then
mail -s Waring root << EOF
echo"Insufficient resources"
exit 0
fi

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

#!/bin/bash
#4
num=$[RANDOM%100+1]
read -p "Please enter a number:" num
if [ $num -eq $num ]; then
echo "You right"
exit
elif [ $num -gt $num ]; then
echo "Oops,You big"
else
echo"Osps You small"
fi


5、
检测本机当前用户是否为超级管理员,如果是管理员,使用 yum 安装 vsftpd,如果不是,则提示您非管理员,使用字串对比版本

#!/bin/bash
#5
if [ $UID -eq 0 ]; then
yum -y install vsftpd
else
echo "You do not administrator"
fi
~

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

#!/bin/bash
#
read -p "请输入一个整数:" num1
read -p "请输入一个整数:" num2
read -p "请输入一个整数:" num3
#不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"
#num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值

tmp=0
if [ $num1 -gt $num2 ];then
tmp=$num1
num1=$num2
num2=$tmp
fi

if [ $num1 -gt $num3 ];then
tmp=$num1
num1=$num3
num3=$tmp
fi

if [ $num2 -gt $num3 ];then
tmp=$num2
num2=$num3
num3=$tmp
fi
echo "排序后数据为:$num1,$num2,$num3

 

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

game=(石头 剪刀 布)
num=$[RANDOM%3]
computer=${game[$num]}#通过随机数获取计算机的出拳
#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能

echo "请根据下列提示选择您的出拳手势"
echo "1.石头"
echo "2.剪刀"
echo "3.布"
read -p "请选择 1-3:" person

case $person in

1)
if [ $num -eq 0 ];then
echo "平局"
elif [ $num -eq 1 ];then
echo "你赢"
else
echo "计算机赢"
fi;;

2)
if [ $num -eq 0 ];then
echo "计算机赢"
elif [ $num -eq 1 ];then
echo "平局"
else
echo "你赢"
fi;;


3)
if [ $num -eq 0 ];then
echo "你赢"
elif [ $num -eq 1 ];then
echo "计算机赢"
else
echo "平局"
fi;;
*)
echo "必须输入 1-3 的数字"
esac
[root@localhost ~]# vim 7.sh
game=(石头 剪刀 布)
num=$[RANDOM%3]
computer=${game[$num]}#通过随机数获取计算机的出拳
#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能

echo "请根据下列提示选择您的出拳手势"
echo "1.石头"
echo "2.剪刀"
echo "3.布"
read -p "请选择 1-3:" person

case $person in

1)
if [ $num -eq 0 ];then
echo "平局"
elif [ $num -eq 1 ];then
echo "你赢"
else
echo "计算机赢"
fi;;

2)
if [ $num -eq 0 ];then
echo "计算机赢"
elif [ $num -eq 1 ];then
echo "平局"
else
echo "你赢"
fi;;


3)
if [ $num -eq 0 ];then
echo "你赢"
elif [ $num -eq 1 ];then
echo "计算机赢"
else
echo "平局"
fi;;
*)
echo "必须输入 1-3 的数字"
esac


8、
编写脚本测试192.168.4.0/24整个网段中那些主机处于开机状态,那些主机处于关机状态(for 版本)
#!/bin/bash
#
for i in {1..254} do
ping -f 1 -i 0.2 -W 1 192.168.4.$i &>/dev/null
if [ $? –eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
done

9、
编写脚本测试 192.168.4.0/24 整个网段中那些主机处于开机状态,那些主机处于关机状态(多进程版),定义一个函数来实现,ping 某一台主机,并检测主机的存货状态

#!/bin/bash
#9
myping(){
ping -c2 -i0.3 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
}

for i in {1..254}
do
myping 192.168.4.$i &
done

10、
编写脚本,复制文件的时候,显示进度条

i=0
str='#'
ch=('|' '\' '-' '/')
index=0
while [ $i -le 25 ]
do
printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]}
str+='#'
let i++
let index=i%4
sleep 0.1
done
printf "\n"


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

#!/bin/bash
for i in `seq 9`
do
for j in `seq $i`
do
echo -n "$i*$j=$[i*j] "
done
echo
done


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

  1 #!/bin/bash

  2 # Author: wangshilin

  3 # Blog: https://home.cnblogs.com/wangshilin/

  4 # Time: 2019-08-17 01:48:21

  5 while :

  7 do

  9 echo '本地网卡 eth0 流量信息如下: '

 11     ifconfig eno16777736 | grep "RX pack" | awk '{print $5}'

 13     ifconfig eno16777736 | grep "TX pack" | awk '{print $5}'

 15     sleep 1

 17 done

 

1、通过位置变量创建linux系统账户及密码$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数
#!/bin/bash#1useradd "$!"echo "$2 | passwd --stdin $2    "
2、每周5使用tar命令备份/var/log 下的所有日志文件,防止文件覆盖tar -czf log -`date +%Y%m%d` .tar.gz /var/log00 03 * * 5 /root /logbak.sh
3、实时监控本机内存和硬盘剩余空间,剩余内存小于500M,根分区剩余空间小于1000M的时候发送报警邮件#!/bin/bash#3disk =$(df -h / | awk '/\//{print $4}')mem=$(df -h / | awk '/\//{print $4}')if [ $disk -le 512000 -a $mem -le 1024000 ]; then        mail -s Waring root << EOF        echo"Insufficient resources"        exit 0fi
4、 脚本生成一个 100 以内的随机数值,提示用户猜数字,更具用户的输入,提示用户猜对了,猜打了或猜小了,直至用户猜对脚本结束。
#!/bin/bash#4num=$[RANDOM%100+1]read -p "Please enter a number:" numif [ $num -eq $num ]; then        echo "You right"        exitelif [ $num -gt $num ]; then        echo "Oops,You big"else        echo"Osps You small"fi

5、检测本机当前用户是否为超级管理员,如果是管理员,使用 yum 安装 vsftpd,如果不是,则提示您非管理员,使用字串对比版本
#!/bin/bash#5if [ $UID -eq 0 ]; then        yum -y install vsftpdelse        echo "You do not administrator"fi~
6、依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字
#!/bin/bash#read -p "请输入一个整数:" num1read -p "请输入一个整数:" num2read -p "请输入一个整数:" num3#不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"#num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值
tmp=0if [ $num1 -gt $num2 ];then    tmp=$num1    num1=$num2    num2=$tmpfi
if [ $num1 -gt $num3 ];then    tmp=$num1    num1=$num3    num3=$tmpfi
if [ $num2 -gt $num3 ];then    tmp=$num2    num2=$num3    num3=$tmpfiecho "排序后数据为:$num1,$num2,$num3


7、编写脚本,实现人机《石头,剪刀,布》游戏
game=(石头 剪刀 布)num=$[RANDOM%3]computer=${game[$num]}#通过随机数获取计算机的出拳#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能
echo "请根据下列提示选择您的出拳手势"echo "1.石头"echo "2.剪刀"echo "3.布"read -p "请选择 1-3:" person
case $person in
1)if [ $num -eq 0 ];then    echo "平局"elif [ $num -eq 1 ];then    echo "你赢"else    echo "计算机赢"fi;;
2)if [ $num -eq 0 ];then   echo "计算机赢"elif [ $num -eq 1 ];then   echo "平局"else   echo "你赢"fi;;

3)if [ $num -eq 0 ];then   echo "你赢"elif [ $num -eq 1 ];then   echo "计算机赢"else   echo "平局"fi;;*)   echo "必须输入 1-3 的数字"esac[root@localhost ~]# vim 7.sh game=(石头 剪刀 布)num=$[RANDOM%3]computer=${game[$num]}#通过随机数获取计算机的出拳#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能
echo "请根据下列提示选择您的出拳手势"echo "1.石头"echo "2.剪刀"echo "3.布"read -p "请选择 1-3:" person
case $person in
1)if [ $num -eq 0 ];then    echo "平局"elif [ $num -eq 1 ];then    echo "你赢"else    echo "计算机赢"fi;;
2)if [ $num -eq 0 ];then   echo "计算机赢"elif [ $num -eq 1 ];then   echo "平局"else   echo "你赢"fi;;

3)if [ $num -eq 0 ];then   echo "你赢"elif [ $num -eq 1 ];then   echo "计算机赢"else   echo "平局"fi;;*)   echo "必须输入 1-3 的数字"esac

8、编写脚本测试192.168.4.0/24整个网段中那些主机处于开机状态,那些主机处于关机状态(for 版本)#!/bin/bash#for i in {1..254} do        ping -f 1 -i 0.2 -W 1 192.168.4.$i &>/dev/null        if [ $? –eq 0 ];then                echo "192.168.4.$i is up"        else                echo "192.168.4.$i is down"        fidone
9、编写脚本测试 192.168.4.0/24 整个网段中那些主机处于开机状态,那些主机处于关机状态(多进程版),定义一个函数来实现,ping 某一台主机,并检测主机的存货状态
#!/bin/bash#9myping(){    ping -c2 -i0.3 -W1 $1 &>/dev/null    if [ $? -eq 0 ];then       echo "$1 is up"    else       echo "$1 is down"    fi}
for i in {1..254}do     myping 192.168.4.$i &done
10、编写脚本,复制文件的时候,显示进度条
i=0str='#'ch=('|' '\' '-' '/')index=0while [ $i -le 25 ]do    printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]}    str+='#'    let i++    let index=i%4    sleep 0.1doneprintf "\n"

11、9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)
#!/bin/bashfor i in `seq 9`do    for j in `seq $i`        do           echo -n "$i*$j=$[i*j] "        done    echodone

12、使用死循环实时显示 eth0 网卡发送的数据包流量
13、使用user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户信息

14、编写批量修改扩展名脚本,如批量将 txt 文件修改为doc文件执行脚本时,需要给脚本添加位置参数脚本名 txt doc (可以将 txt 的扩展名修改为doc)脚本名 doc jpg(可以将doc 的扩展名修改为jpg)
15、查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计)使用 netstat -atn 可以查看本机所有连接状态,-a 查看所有,-t 仅显示tcp连接信息, -n数字格式显示local address(第四列是本机的IP和端口信息)Foreign address(第五烈是远程主机的IP和端口信息)使用awk命令仅显示第5列数据,再显示第1列IP地址的信息sort 可以按数字的大小排序,最后使用 Uniq 将多余重复的删除,并统计重复次数
16、对100 以内的所有正整数相加求和(1+2+3.。。+100)eq 100 可以快速自动生成100个整数

 

posted on 2019-08-16 19:27  此生来过_无悔  阅读(2219)  评论(0编辑  收藏  举报