Shell脚本练习题
1、编写shell脚本,计算1-100的和
1 #!/bin/bash
2 #caculate the sum of numbers from 1 to 100 3
4 sum=0
5 for i in `seq 1 100`; do 6 sum=$[$sum+$i] 7 done
8 echo $sum
2、编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,输入的数字小于1则重新输入,直到输入正确的数字为止。
1 #! /bin/bash 2 j=0
3 while [ $j -lt \
4 read -p \请输入数字不能小于\5 done 6 sum=0
7 for i in `seq 1 $j`;do 8 sum=$[$i+$sum] 9 done
10 echo $sum
3、编写shell脚本,把/root/目录下的所有目录拷贝到/tmp/目录下。 1. #! /bin/bash
2. for i in `ls /root/`;do 3. if [ -d $i ];then 4. cp -r $i /tmp/ 5. fi 6. done
4、编写shell脚本,批量建立用户user_00,user_01,…,user_100并且所有用户属于users组。 1. #! /bin/bash 2. i=0
3. for i in `seq 1 100`;do 4. userdel -r user_0$i 5. done 5、编写shell脚本,截取文件test.log中包含关键词”abc”的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列。
1. 2. 3. 4. #! /bin/bash
awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt awk '$1>10 {print $2}' /tmp/n2.txt
6、编写shell脚本,判断输入的IP是否正确(IP的规则是,n1,n2,n3,n4,其中1 1. #! /bin/bash 2. checkip() { 3. if echo $1 |egrep -q '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$' ; then 4. a=`echo $1 | awk -F. '{print $1}'` 5. b=`echo $1 | awk -F. '{print $2}'` 6. c=`echo $1 | awk -F. '{print $3}'` 7. d=`echo $1 | awk -F. '{print $4}'` 8. for n in $a $b $c $d; do 9. if [ $n -ge 255 ] || [ $n -le 0 ]; then 10. echo \ 11. return 2 12. fi 13. done 14. else 15. echo \ 16. return 1 17. fi 18. } 19. rs=1 20. while [ $rs -gt 0 ]; do a) read -p \ b) checkip $ip c) rs=`echo $?` 21. done 22. echo \ 7、自动编译安装httpd服务器的脚本 1. #!/bin/bash 2. 3. 4. 5. 6. 7. # 自动编译安装httpd服务器的脚本 cd /usr/src/httpd-2.2.17/ ./configure --prefix=/usr/local/httpd --enable-so &> /dev/null make &> /dev/null make install &> /dev/null # …… 8、 查看内存占用情况 #!/bin/bash USED=$(free | grep \ TOTAL=$(free | grep \USAGE=$(expr $USED \\* 100 / $TOTAL) echo \实际内存占用情况:$USAGE%\ 9、备份文件,及使用情况 #!/bin/bash TARFILE=beifen-`date +%s`.tgz tar zcf $TARFILE $* &> /dev/null echo \已执行 $0 脚本,\ echo \共完成 $# 个对象的备份\echo \具体内容包括: $*\ 10、MySQL数据库逻辑备份脚本 #!/bin/bash # 这是一个简化的MySQL数据库逻辑备份脚本 # 1. 定义数据库连接、目标库信息 MY_USER=\MY_PASS=\ MY_HOST=\ MY_CONN=\MY_DB1=\MY_DB2=\ # 2. 定义备份目录、工具、时间、文件名主体 BF_DIR=\ BF_CMD=\BF_TIME=`date +%Y%m%d-%H%M` NAME_1=\NAME_2=\ # 3. 先导出为.sql脚本,然后再进行压缩(打包后删除原文件) cd $BF_DIR/ $BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql $BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql /bin/tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &> /dev/null /bin/tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &> /dev/null 11、查看cup,用户,及内存情况 #!/bin/bash echo \echo \ echo \12、查看用户是否为root用户,是否能查看磁盘 #!/bin/bash if [ \then echo \错误:非root用户,权限不足!\ exit 1 fi fdisk -l /dev/sda 13、查看是否安装sysstat监控软件,及安装 #!/bin/bash rpm -q sysstat &> /dev/null if [ $? -eq 0 ] then echo \已安装 `rpm -q sysstat`\else echo \未安装,尝试自动安装\ RHEL_DIR=\ if [ -d $RHEL_DIR ] then cd $RHEL_DIR rpm -ivh sysstat-*.rpm && echo \安装完成。\ else echo \错误:无法访问光盘目录:$RHEL_DIR\ fi fi