脚本练习

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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code