脚本练习

1、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
tar Jcf /etc/ /data/ectbak-`date -d “-1 day” +%F-%H`.tar.xz
30 1 * * 1-5 /root/Myscripts/backetc.sh

2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
0 */2 * * * cat /proc/meminfo |grep “^\(S\|M\)” >>/tmp/meminfo.txt

3、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报
#!/bin/bash
Diskspace=`df |sed -nr ‘s,^/dev/sd.*[ ]+(.*)%.*,\1,p’ |sort -nr |head -1`
Diskinode=`df -i |sed -nr ‘s,^/dev/sd.*[ ]+(.*)%.*,\1,p’ |sort -nr |head -1`

if [ $Diskspace -gt 80 -o $Diskinode -gt 80 ] ;then
wall “Disk space will not enough space!”
fi

*/10 * * * * /root/Myscripts/diskcheck.sh

1、判断/var/目录下所有文件的类型

cd /var ;ls |while read line ;do
file $line
done

2、添加10个用户user1-user10,密码为8位随机字符
for I in {1..10} ;do
if ! id user$I &>/dev/null ;then
useradd user$I
echo `openssl rand -hex 4 |head -c 8` |passwd –stdin user$I
else
echo “user is exist.”
fi
done

3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start

for I in `ls -1 /etc/rc.d/rc3.d/` ;do
echo $I |sed -r -e ‘/^S/s/(.*)/\1 start/’ -e ‘/^K/s/(.*)/\1 stop/’
done

4、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和
read -p “please input a positive integer: ” N
for (( i=0; i <= $N; i++ )) ;do
let SUM+=$i
done
echo $SUM

5、计算100以内所有能被3整除的整数之和
for I in {1..100} ;do
U=$[$I%3]
if [ “$U” -eq 0 ] ;then
let SUM+=$I
fi
done
echo $SUM

6、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
read -p “please input a network address: ” DIP
echo $DIP |grep -qE “^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){2}0$” || { ech
o “ipaddr error”; exit; }

for I in {1..254} ;do
{
if ping -W1 -c1 ${DIP%.*}.$I &>/dev/null ;then
echo “${DIP%.*}.$I is up.”
fi
}&
done

7、打印九九乘法表
for I in {1..9} ;do
for ((U=1; U<=I; U++)) ;do
T=$[I*U]
echo -n “${I}x${U}=$T ”
done
echo “”
done

8、在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html
mkdir /testdir
for i in `seq 1 10` ;do
touch /testdir/$[RANDOM%11]`openssl rand -base64 20 |grep -o “\([a-z]\|[A-Z]\)” |tr -d ‘\n’ |head -c 8`.html
done

9、打印等腰三角形
for i in `seq $1` ;do
for j in `seq $[$1-i]` ;do
echo -n ” ”
done
for k in `seq $[i*2-1]` ;do
let color=$RANDOM%7+31
echo -e “\e[1;5;${color}m*\e[0m\c”
done
echo
done

1、编写脚本,求100以内所有正奇数之和
declare -i sum=0
declare -i i=1

while [ $i -le 100 ] ;do
let sum+=i
let i+=2
done
echo $sum
2、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态,并统计在线和离线主机各多少
trap ‘exit’ 2

read -p “please input a network address: ” DNET
echo $DNET |grep -qE “^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){2}0$” || { echo “ipaddr error”; exit; }

for I in {1..254} ;do
{
if ping -W1 -c1 ${DNET%.*}.$I &>/dev/null ;then
echo “${DNET%.*}.$I is up.”
fi
}&
done

unset DNET
unset I
wait
3、编写脚本,打印九九乘法表
for i in {1..9} ;do
for j in `seq $i` ;do
temp=$[i*j]
echo -e “$j*$i=$temp\t\c”
done
echo
done
4、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大值和最小值
tmpnum=0
for i in {1..10} ;do
RNUM=$RANDOM
echo $RNUM
if [ $tmpnum -lt $RNUM ] ;then
let tmpnum=RNUM
fi
done
echo “Maxinum: $tmpnum”
5、编写脚本,实现打印国际象棋棋盘
for i in {1..16} ;do
if [ $[i%2] -eq 0 ] ;then
for j in {1..16} ;do
if [ $[j%2] -eq 0 ] ;then
echo -e “\033[41m \033[0m\c”
else
echo -e “\033[47m \033[0m\c”
fi
done
echo
else
for k in {1..16} ;do
if [ $[k%2] -eq 1 ] ;then
echo -e “\033[41m \033[0m\c”
else
echo -e “\033[47m \033[0m\c”
fi
done
echo
fi
done

for i in {1..8} ;do
if [[ $[i%4] =~ [1-2] ]] ;then
for j in {1..4} ;do
if [ $[j%2] -eq 1 ] ;then
echo -e “\033[41m \033[0m\c”
else
echo -e “\033[47m \033[0m\c”
fi
done
echo
else
for k in {1..4} ;do
if [ $[k%2] -eq 0 ] ;then
echo -e “\033[41m \033[0m\c”
else
echo -e “\033[47m \033[0m\c”
fi
done
echo
fi
done

6、后续六个字符串:efbaf275cd、4be9c40b8b 、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机执行命令: echo $RANDOM|md5sum|cut –c1-10 后的结果,请破解这些字符串对应的RANDOM值
ad865d2f63:1000
b902c16c8b:3000
f8c8873ce0:6000
44b2395c46:9000
4be9c40b8b:12000
efbaf275cd:15000

for STR in efbaf275cd 4be9c40b8b 44b2395c46 f8c8873ce0 b902c16c8b ad865d2f63 ;do
{
for i in `seq 32767` ;do
tmpstr=`echo $i |md5sum |cut -c 1-10`
if [ $tmpstr == $STR ] ;then
echo $STR:$i
fi
done
}&
done
wait

1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并退出脚本
while :;do
if who |grep -q “hacker” ;then
echo hacker: `who |grep “hacker” |sed -r ‘s,.* ([0-9]+-.*),\1,’` >>/var/l
og/login.log
break
fi
sleep 3

2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出
tmpnum=0
for i in {1..10} ;do
RNUM=$RANDOM
echo $RNUM
if [ $tmpnum -lt $RNUM ] ;then
let tmpnum=RNUM
fi
done

echo “Maxinum: $tmpnum”
3、用文件名做为参数,统计所有参数文件的总行数
while [ “$#” -gt 0 ] ;do
anum=`wc -l $1 |cut -d’ ‘ -f1`
let linunum+=anum
shift
done
echo “lines : $linunum”

4、用二个以上的数字为参数,显示其中的最大值和最小值
declare -i temp=0
while [ “$#” -gt 0 ] ;do
if [ “$1” -gt “$temp” ] ;then
temp=$1
fi
shift
done
5、扫描/etc/passwd文件每一行,如发现GECOS字段为空,则填充用户名和单位电话为62985600,并提示该用户的GECOS信息修改成功
while read line ;do
staring=`echo $line |cut -d: -f5`
if [ -z “$staring” ] ;then
username=`echo $line |cut -d: -f1`
chfn -f “$username” -p “62985600” “$username” &>/dev/null
echo “$username GECOS message is cheange seccessful.”
fi
done < /etc/passwd

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97801

(1)
上一篇 2018-05-08 10:36
下一篇 2018-05-08 16:20

相关推荐

  • 认证基础及DNS服务基础

    认证基础及DNS服务基础

    Linux笔记 2018-04-27
  • 文件查找和压缩

    locate查询系统上预建的文件索引数据库索引数据库:/var/lib/mlocate/mlocate.db工作特点:查找速度快模糊查找非实时查找搜索的式文件的全路径,不仅仅是文件名可能只搜索用户具备读取和执行权限的目录参数:-i:不区分大小写-n:只列举前n行-r:使用正则表达式find:实时查找工具工作特点:查找速度慢,非常消耗资源精确查找实时查找可能只…

    2018-04-16
  • chmod 大写X

    大写执行权限X,加了怎么不显示呢

    2018-04-09
  • 软raid5制作

     一、准备工作 (1)VMware虚拟机 (2)centos6.9系统 二、在centos6.9关机状态下增加3块硬盘做RAID5,其中一块当校验盘。 三、用远程终端可以清楚的显示新增加的硬盘,将新增加的硬盘进行分区   四、开始制作 mdadm -C /dev/md0 -a yes -l 5 -c 32 -n 2 -x1 /dev/sd{b1,c…

    2018-04-29
  • Linux基础知识(二)

    简单介绍几种命令。

    Linux笔记 2018-04-08
  • Linux系统中RAID及LVM管理

    Linux系统中如何提高磁盘的读写性能,如何实现磁盘冗余,当磁盘快被占满时,又如何弹性拓展磁盘容量,RAID及LVM技术可以帮你轻松解决。

    2018-04-26